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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

IIC总线读写EEPROM深度诠释.docx

1、IIC总线读写EEPROM深度诠释/*-IIC总线读写EEPROM(串行扩展eeprom,24c02)(STC12C系列单片机自带eeprom,且有另外的eeprom操作方式)Allen.H(帮同学修改的一个程序)时间:2010.11.5-*/#include #include /是用括号还是双引号看情况,本地头文件用双引号,系统头文件用括号typedef unsigned char uchar;/良好的程序风格,不应该用#define/#define uchar unsigned charsbit sda=P20;/-你把sda和scl引脚可能定反了,我换过来了-sbit scl=P21;/

2、等号对其,变量名长短不一时,注意,且测试等于号=或者其他双目关系运算符两边都空一格/-void delay(uchar z)/带参数很好/大括号所在行不要写代码/函数与函数之间空一格void delay_7nop()/子程序命名最好顾名思义,比如delay_1ms(),这里考虑都是使用7nop,不带参数/*程序代码每进一层逻辑就缩进一格TAB键,TAB设置为3,4格,在keil的view-options里面设置,不要使用几个空格来缩进,统一使用TAB键*/delay函数都放在一起,函数顺序不要乱放,相关的放一起,/-void init()_nop_();_nop_();_nop_();_nop

3、_();_nop_();_nop_();_nop_();/这里0-1000多个_nop_都可以uchar i,j;/局部变量中用来自加自减可以用i,j之类的定义,计数建议不要用i,j/局部变量不占内存,函数调用时生成堆栈,不应该定义局部变量时作初始化/-局部变量命名后空一格,写正式代码for(i=z;i0;i-)for(j=100;j0;j-);/注明多少时间,在调试模式下,看窗口左边的SEC值/这里使用了_nop_()函数,所以调用此头文件#define TRUE 1/*define宏定义一般用大写,宏定义并不会减少最终代码空间define多行语句时,每一行末尾写上,最后一行可以不写,有时比

4、较短的语句写成一个子函数会牺牲更多的时间,因为函数调用耗时比较多,这个时候用一个define语句更好*/#define FALSE 0/-SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;/SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。/但更具体还是得看时序图,下面就没有都先把scl先拉高再去变sdavoid start()sda=1;delay_7nop(); /这里sda和第三行的scl信号哪个放上没什么区别,主要起始和停止信号风格保持一致就行了void stop()bit ask()/应答信号,return是什么类型这里函数就是什么类型, /每一个被传

5、送的字节后面都必须跟随一位应答位(即一帧共有9位)/如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据bit flag;/真假判断,或只有0/1取值的标志位设置为bitsda=1;scl=1;delay_7nop();flag=sda;delay_7nop();scl=0;sda=0;delay_7nop();scl=1;delay_7nop();sda=1;delay_7nop();scl=1;delay_7nop();sda=0;delay_7nop();/scl=0;/允许数据变化,传数据的时候拉低才允许数据变化,/但是在开始信号和停止信号scl都为高,这里看时序图就知

6、道了sda=1;delay_7nop();scl=1;delay_7nop();delay_7nop();if(flag=1)elsereturn TRUE;/应答return FALSE;/非应答/用下面屏蔽的的应答信号也可以,上面的应答信号考虑更周全/*void ask()/应答*/-void writedata(uchar dat)/下面是readdata()和readd()保持程序风格的一致性,命名不该命为writecurrent/函数参数不要乱用P,q之类的毫无意义的名字,这里用dat,date是关键字,不能用/void writeadd(uchar add,uchar infor)

7、scl=0;delay_7nop();sda=1;/总线释放delay_7nop();uchar i;scl=0;/此句可有可无for(i=0;i8;i+)/按位写dat=dat1;/左移一位scl=0;delay_7nop();sda=CY;/psw位中的CY进位标识位,左移后最高位移入CYdelay_7nop();scl=1;/scl高电平,数据稳定delay_7nop();uchar i;scl=1;delay_7nop();while(sda=1)&(i250)i+;scl=0;delay_7nop();/-uchar readdata()uchar readd(uchar add)s

8、tart();writedata(0xa0);ask();writedata(add);ask();start();writedata(0xa1);ask();uchar r=0;/局部变量小写,全局变量首字母大写uchar i,dat;scl=0;delay_7nop();sda=1;/数据总线释放delay_7nop();for(i=0;i8;i+)/密切相关的代码紧接着写,不很相关的空一格再写return dat;scl=1;delay_7nop();dat=(datI/O-ports-)看不出P2口的变换,writeadd(25,0xaa);delay(50);/此处最少要delay(7);P1=readd(25);/P1还是P2还是P3主要是看你的硬件用哪个来测试init();/这里初始化一下/因为这里是外部EEPROM,要仿真芯片或者硬件的支持才能观察结果,本程序测试无误/xdata:外部数据存储区(64KB)当使用来了外部RAM时,应用它,keil中optionsfortarget的memory mode可选/pdata:分页的外部数据存储区bdata:可位寻址内部数据存储区(16B)idata:不可直接寻址的内部数据存储区(256B)当全局变量定义太多的时候/使用,比如:idata int或int idata来使用这个区域存储全局变量

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

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