将数据“0x0f“写入AT24C02再读出送P1口显示

#include <reg51.h>        //  包含51单片机寄存器定义的头文件
#include <intrins.h>      //包含_nop_()函数定义的头文件
#define    OP_READ    0xa1        // 器件地址以及读取操作,0xa1即为1010 0001B
#define    OP_WRITE 0xa0        // 器件地址以及写入操作,0xa1即为1010 0000B
sbit SDA=P3^4;          //将串行数据总线SDA位定义在为P3.4引脚
sbit SCL=P3^3;         //将串行时钟总线SDA位定义在为P3.3引脚

/*****************************************************
函数功能:延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
***************************************************/
void delay1ms()
{
   unsigned char i,j;    
     for(i=0;i<10;i++)
      for(j=0;j<33;j++)
       ;         
 }

/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
 void delaynms(unsigned char n)
 {
   unsigned char i;
    for(i=0;i<n;i++)
       delay1ms();
 }
/***************************************************
函数功能:开始数据传送
***************************************************/
void start()
// 开始位
{
    SDA = 1;    //SDA初始化为高电平“1”
   SCL = 1;    //开始数据传送时,要求SCL为高电平“1”
    _nop_();    //等待一个机器周期
    _nop_();    //等待一个机器周期
    _nop_();    //等待一个机器周期
    _nop_();    //等待一个机器周期
    SDA = 0;    //SDA的下降沿被认为是开始信号
    _nop_();    //等待一个机器周期
    _nop_();    //等待一个机器周期
    _nop_();    //等待一个机器周期
    _nop_();    //等待一个机器周期
    SCL = 0;    //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)  
}
/***************************************************
函数功能:结束数据传送
***************************************************/
void stop()
// 停止位
{
    SDA = 0;     //SDA初始化为低电平“0”    _n
    SCL = 1;     //结束数据传送时,要求SCL为高电平“1”
    _nop_();     //等待一个机器周期
    _nop_();     //等待一个机器周期
    _nop_();     //等待一个机器周期
    _nop_();     //等待一个机器周期
    SDA = 1;    //SDA的上升沿被认为是结束信号
    _nop_();     //等待一个机器周期
    _nop_();     //等待一个机器周期
    _nop_();     //等待一个机器周期
    _nop_();     //等待一个机器周期
    SDA=0;
    SCL=0;
}
/***************************************************
函数功能:从AT24Cxx读取数据
出口参数:x
***************************************************/
unsigned char ReadData()
// 从AT24Cxx移入数据到MCU
{
    unsigned char i;
    unsigned char x;   //储存从AT24Cxx中读出的数据
    for(i = 0; i < 8; i++)
    {
        SCL = 1;                //SCL置为高电平
        x<<=1;                  //将x中的各二进位向左移一位
        x|=(unsigned char)SDA;  //将SDA上的数据通过按位“或“运算存入x中
        SCL = 0;                        //在SCL的下降沿读出数据
    }
    return(x);                //将读取的数据返回
}
/***************************************************
函数功能:向AT24Cxx的当前地址写入数据
入口参数:y (储存待写入的数据)
***************************************************/
//在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0
bit WriteCurrent(unsigned char y)
{
    unsigned char i;
    bit ack_bit;               //储存应答位
    for(i = 0; i < 8; i++)        // 循环移入8个位
    {
        SDA = (bit)(y&0x80);   //通过按位“与”运算将最高位数据送到S
                                          //因为传送时高位在前,低位在后
        _nop_();            //等待一个机器周期   
       SCL = 1;            //在SCL的上升沿将数据写入AT24Cxx      
       _nop_();            //等待一个机器周期 
      _nop_();             //等待一个机器周期       
        
          SCL = 0;            //将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲
        y <<= 1;           //将y中的各二进位向左移一位
    }
    SDA = 1;              // 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,
                    //以让SDA线转由接收设备(AT24Cxx)控制
    _nop_();        //等待一个机器周期 
    _nop_();        //等待一个机器周期 
    SCL = 1;       //根据上述规定,SCL应为高电平
    _nop_();       //等待一个机器周期 
    _nop_();       //等待一个机器周期 
    _nop_();       //等待一个机器周期 
    _nop_();       //等待一个机器周期 
    ack_bit = SDA; //接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节
                   //若送高电平,表示没有接收到,传送异常
    SCL = 0;       //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)
    return  ack_bit;            // 返回AT24Cxx应答位
}
/***************************************************
函数功能:向AT24Cxx中的指定地址写入数据
入口参数:add (储存指定的地址);dat(储存待写入的数据)
***************************************************/
void WriteSet(unsigned char add, unsigned char dat)
// 在指定地址addr处写入数据WriteCurrent
{
    start();               //开始数据传递
    WriteCurrent(OP_WRITE);  //选择要操作的AT24Cxx芯片,并告知要对其写入数据
    WriteCurrent(add);       //写入指定地址
    WriteCurrent(dat);       //向当前地址(上面指定的地址)写入数据
    stop();                //停止数据传递
    delaynms(4);           //1个字节的写入周期为1ms, 最好延时1ms以上
}
/***************************************************
函数功能:从AT24Cxx中的当前地址读取数据
出口参数:x (储存读出的数据) 
***************************************************/
unsigned char ReadCurrent()
{
    unsigned char x;
    start();               //开始数据传递
    WriteCurrent(OP_READ);   //选择要操作的AT24Cxx芯片,并告知要读其数据
    x=ReadData();         //将读取的数据存入x
    stop();                //停止数据传递
    return x;              //返回读取的数据
}
/***************************************************
函数功能:从AT24Cxx中的指定地址读取数据
入口参数:set_addr
出口参数:x 
***************************************************/
unsigned char ReadSet(unsigned char set_addr)
// 在指定地址读取
{
    start();                      //开始数据传递
    WriteCurrent(OP_WRITE);       //选择要操作的AT24Cxx芯片,并告知要对其写入数据
    WriteCurrent(set_addr);       //写入指定地址
    return(ReadCurrent());        //从指定地址读出数据并返回
}
/***************************************************
函数功能:主函数
***************************************************/
main(void)
{
   SDA = 1;           // SDA=1,SCL=1,使主从设备处于空闲状态
    SCL = 1;             
   WriteSet(0x36,0x0f);   //在指定地址“0x36”中写入数据“0x0f”
    P1=ReadSet(0x36);      //从指定地址“0x36中读取数据并送P1口显示
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10系统gpu本地部署chatglm3-6b,从0开始安装

开源地址&#xff1a; GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 前言&#xff1a;ChatGLM2与ChatGLM3区别 ChatGLM2与ChatGLM3模型架构是完全一致的&#xff0c;ChatGLM与后继者结构不同。可见ChatGLM3相对于ChatGLM2没…

付费进群系统源码带定位完整独立版(12月30日)再次修复首发

搭建教程 nginx1.2 php5.6–7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库&#xff08;shujuku.sql&#xff09; 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账号&…

ArkUI中自定义组件的生命周期

文章概叙 本文主要是介绍下在作为page以及component的时候的生命周期&#xff0c;以及调用API等应该在哪个生命周期使用。 书接上回 之前的博客已经结束了对底部栏的操作&#xff0c;现在开始需要关注到具体内容的对接了。 而开发的第一步&#xff0c;我们对页面的生命周期…

最后一次纪念在泰山OFFICE的日子,明年开源量子OFFICE

今天去泰山在无锡的办公地点&#xff0c;给门卫送了一点零食表示感谢。送了之后&#xff0c;我也没进去怀旧&#xff0c;然后就去附近的南山&#x26e50;礼佛求福。 2021年的最后一天&#xff0c;公司举办了迎新活动。看了恍如隔世。我怀念泰山OFFICE&#xff0c;是因为在这里…

上海周边公路骑行路线分享,维乐带你抓住秋天的小尾巴

路线一&#xff1a;松江郊里骑行      在魔都上海&#xff0c;藏着一条自然风景适宜&#xff0c;能眺望黄浦江的美丽骑行路线。导航到华长路杨家角就能到达起点&#xff0c;一路向西&#xff0c;这里路况非常好&#xff0c;只有一条小道&#xff0c;没有汽车的障碍&#xf…

25、WEB攻防——通用漏洞SQL读写注入MYSQLMSSQLPostgreSQL

文章目录 Mysql-root高权限读写注入PostgreSQL——dba高权限读写注入Mssql-sa高权限读写注入 Access无高权限注入点——只能猜解&#xff0c;而且是暴力猜解&#xff1b; MYSQL&#xff0c;PostgreSQL&#xff0c;MSSQL(SQL server)高权限注入点——可升级读写&#xff08;文件…

学习体系结构 - AArch64 异常模型

学习体系结构 - AArch64 异常模型 Learn the architecture - AArch64 Exception Model version 1.3 根据DeepL翻译 校准 1、Overview AArch64异常模型指南&#xff0c;介绍了Armv8-A和Armv9-A中的异常和特权模型。它涵盖了Arm架构中不同类型的异常以及处理器在处理异常时的行…

12/31

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;用于密集预测的多路径视觉Transformer1、研究背景2、方法提出3、相关方法3.1、Vision Transformers for dense predictions3.2、C…

GAMES101:作业4记录

文章目录 总览算法编写代码&#xff1a;recursive_bezier()的实现Bezier()函数的实现提高部分&#xff1a;反走样 总览 Bzier 曲线是一种用于计算机图形学的参数曲线。在本次作业中,你需要实现 de Casteljau 算法来绘制由 4 个控制点表示的 Bzier 曲线 (当你正确实现该算法时,…

亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织的第七届大数据“星河&#xff08;Galaxy&#xff09;”案例评选结果公示&#xff0c;亚信安慧AntDB数据库两项目入选&#xff0c;其中“基于Ant…

国图公考:研究生可以考选调生吗?

研究生可以报考选调生吗?当然是可以的&#xff0c;但是同样需要满足一定的条件才可以。 除本科生外&#xff0c;具有硕士、博士学位的考生均可申请考试。但是&#xff0c;除了满足应届毕业生的身份&#xff0c;还需要满足年龄限制。一般来说&#xff0c;本科生不超过25岁&…

Kubernetes集群部署Rook Ceph实现文件存储,对象存储,块存储

Kubernetes集群部署Rook Ceph部署Ceph集群 1. Rook Ceph介绍 Rook Ceph是Rook项目中的一个存储方案&#xff0c;专门针对Ceph存储系统进行了优化和封装。Ceph是一个高度可扩展的分布式存储系统&#xff0c;提供了对象存储、块存储和文件系统的功能&#xff0c;广泛应用于提供…

FTP简介FTP服务器的搭建【虚拟机版】以及计算机端口的介绍

目录 一. FTP简介 二. FTP服务器的搭建【虚拟机Windows2012版】 1. 启用防火墙 2. 打开服务器管理器➡工具➡计算机管理 3. 选择本地用户与组➡新建组 4. 给组命名&#xff0c;输入描述&#xff0c;点击创建 5. 新建用户&#xff0c;设置用户名称&#xff0c;添加描述&a…

传感器原理与应用复习--光电式与半导体式传感器

文章目录 上一篇光电传感器光电器件 光纤传感器光纤传感器的工作原理及组成 半导体传感器下一篇 上一篇 传感器原理与应用复习–磁电式与霍尔传感器 光电传感器 光电器件 每个光子的能量为 E h v E hv Ehv h为普朗克常数 6.626 ∗ 1 0 − 34 ( J / s ) 6.626 * 10^{-…

【ARMv8M Cortex-M33 系列 2.3 -- SEGGER JFlash 烧写命令介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 SEGGER JFlash 烧写命令介绍JFlash 配置文件 固件烧写地址介绍确定烧写地址 SEGGER JFlash 烧写命令介绍 本文以介绍烧写 Renesas RA4M2 为例&#xff0c;对 JFlash 进行简单介绍。它是 ARM Cortex-M33 微控制器…

华为ensp网络设计期末测试题-复盘

网络拓扑图 地址分配表 vlan端口分配表 需求 The device is running!<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]sys S1 [S1]vlan 99 [S1-vlan99]vlan 100 [S1-vlan100]des IT [S1-…

2023 全球 AI 大事件盘点

本文来自微信公众号硅星人

跨境电商的语言障碍:翻译工具的必要性

随着全球化的加速和电子商务的普及&#xff0c;跨境电商逐渐成为企业拓展市场的重要渠道。然而&#xff0c;跨境电商在带来无限商机的同时&#xff0c;也面临着语言障碍的挑战。由于不同国家和地区的语言和文化差异&#xff0c;跨境电商在产品描述、用户沟通、广告宣传等方面需…

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part1

原创 古猫先生 存储随笔 2023-12-31 08:31 发表于上海 回首2023 2-8月份有近半年时间基本处于断更状态 好在8月份后小编没有松懈 &#xff08;虽然2023年度总结&#xff0c;更像是近4个月总结&#xff09; 本年度顺利加V啦&#xff01; 感谢各位粉丝朋友的一路支持与陪伴 …

2024主流的免费电脑数据恢复软件EasyRecovery

EasyRecovery绿色版是一款非常专业的电脑数据恢复工具。它可以全面恢复删除丢失数据&#xff0c;能对电脑误删文件恢复、格式化硬盘数据恢复、手机U盘数据恢复等&#xff0c;能恢复包括文档、表格、图片、音视频等各种文件&#xff0c;此版本经过处理&#xff0c;可永久免费使用…