ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:17.43KB ,
资源ID:12668220      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12668220.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(51单片机模拟I2C总线的C语言实现.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

51单片机模拟I2C总线的C语言实现.docx

1、51单片机模拟I2C总线的C语言实现51单片机模拟I2C总线的C语言实现电路原理图 EEPROM为ATMEL公司的AT24C01A。单片机为ATMEL公司的AT89C51。软件说明 C语言为Franklin C V3.2。将源程序另存为testi2c.c,用命令C51testi2c.cL51TESTI2C.OBJOHS51TESTI2C编译,连接,得到TESTI2C.HEX文件,即可由编程器读入并进行写片,实验。3源程序#include #include #define uchar unsigned char#define uint unsigned int#define AddWr 0xa0

2、/*器件地址选择及写标志*/#define AddRd 0xa1/*器件地址选择及读标志*/#define Hidden 0x0e /*显示器的消隐码*/*有关全局变量*/sbit Sda=P37;/*串行数据*/sbit Scl=P36;/*串行时钟*/sbit WP=P35;/*硬件写保护*/void mDelay(uchar j)uint i;for(;j0;j-)for(i=0;i125;i-);/*发送起始条件*/void Start(void)/*起始条件*/Sda=1;Scl=1;_nop_();_nop_();_nop_();_nop_();Sda=0;_nop_();_nop

3、_();_nop_();_nop_();void Stop(void)/*停止条件*/Sda=0;Scl=1;_nop_();_nop_();_nop_();_nop_();Sda=1;_nop_();_nop_();_nop_();_nop_();void Ack(void)/*应答位*/Sda=0;_nop_();_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();Scl=0;void NoAck(void)/*反向应答位*/Sda=1;_nop_();_nop_();_nop_();_nop_();Scl=1;_no

4、p_();_nop_();_nop_();_nop_();Scl=0;void Send(uchar Data)/*发送数据子程序,Data为要求发送的数据*/uchar BitCounter=8;/*位数控制*/uchar temp;/*中间变量控制*/dotemp=Data;Scl=0;_nop_();_nop_();_nop_();_nop_();if(temp&0x80)=0x80)/*如果最高位是1*/Sda=1;elseSda=0;Scl=1;temp=Data1;/*RLC*/Data=temp;BitCounter-;while(BitCounter);Scl=0;uchar

5、Read(void)/*读一个字节的数据,并返回该字节值*/uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;doScl=0;_nop_();_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();if(Sda)/*如果Sda=1;*/temp=temp|0x01;/*temp的最低位置1*/elsetemp=temp&0xfe;/*否则temp的最低位清0*/if(BitCounter-1)temp1=temp1;temp=temp1;BitCounter-;while(

6、BitCounter);return(temp);void WrToROM(uchar Data,uchar Address,uchar Num)uchar i;uchar *PData;PData=Data;for(i=0;iNum;i+)Start();/*发送启动信号*/Send(0xa0);/*发送SLA+W*/Ack();Send(Address+i);/*发送地址*/Ack();Send(*(PData+i);Ack();Stop();mDelay(20);void RdFromROM(uchar Data,uchar Address,uchar Num)uchar i;uchar

7、 *PData;PData=Data;for(i=0;iNum;i+)Start();Send(0xa0);Ack();Send(Address+i);Ack();Start();Send(0xa1);Ack();*(PData+i)=Read();Scl=0;NoAck();Stop();void main()uchar Number4=1,2,3,4;WP=1;WrToROM(Number,4,4);/*将初始化后的数值写入EEPROM*/mDelay(20);Number0=0;Number1=0;Number2=0;Number3=0;/*将数组中的值清掉,以验证读出的数是否正确*/RdFromROM(Number,4,4);问题:本程序中未采用块读写的方法,显得有点笨,这是由于项目原因,现项目已完成,程序已写好,短时不会修改,也不会花上一定的精力去做,虽然理论上已很成熟,就这样写一下,未必不对,但与我的本栏目要求不符,所以就未做上去,如果以后我做了,将再补上。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1