




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*-IIC总线读写EEPROM(串行扩展eeprom,24c02)(STC12C系列单片机自带eeprom,且有另外的eeprom操作方式)作者:Allen.H(帮同学修改的一个程序)时间:2010.11.5-*/#include #include /是用括号还是双引号看情况,本地头文件用双引号,系统头文件用括号/这里使用了_nop_()函数,所以调用此头文件#define TRUE 1/*define宏定义一般用大写,宏定义并不会减少最终代码空间define多行语句时,每一行末尾写上,最后一行可以不写,有时比较短的语句写成一个子函数会牺牲更多的时间,因为函数调用耗时比较多,这个时候用一个define语句更好*/#define FALSE 0typedef unsigned char uchar;/良好的程序风格,不应该用#define/#define uchar unsigned char sbit sda=P20;/-你把sda和scl引脚可能定反了,我换过来了-sbit scl=P21;/等号对其,变量名长短不一时,注意,且测试等于号=或者其他双目关系运算符两边都空一格/-void delay(uchar z)/带参数很好/大括号所在行不要写代码uchar i,j;/局部变量中用来自加自减可以用i,j之类的定义,计数建议不要用i,j/局部变量不占内存,函数调用时生成堆栈,不应该定义局部变量时作初始化/-局部变量命名后空一格,写正式代码for(i=z;i0;i-)for(j=100;j0;j-);/注明多少时间,在调试模式下,看窗口左边的SEC值/函数与函数之间空一格void delay_7nop()/子程序命名最好顾名思义,比如delay_1ms(),这里考虑都是使用7nop,不带参数/*程序代码每进一层逻辑就缩进一格TAB键,TAB设置为3,4格, 在keil的view-options里面设置,不要使用几个空格来缩进,统一使用TAB键*/_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/这里0-1000多个_nop_都可以/delay函数都放在一起,函数顺序不要乱放,相关的放一起,/-void init()sda=1;delay_7nop();scl=1;delay_7nop();/-SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;/SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。/但更具体还是得看时序图,下面就没有都先把scl先拉高再去变sdavoid start()sda=1;delay_7nop(); /这里sda和第三行的scl信号哪个放上没什么区别,主要起始和停止信号风格保持一致就行了scl=1;delay_7nop();sda=0;delay_7nop();/scl=0;/允许数据变化,传数据的时候拉低才允许数据变化,/但是在开始信号和停止信号scl都为高,这里看时序图就知道了void stop()sda=0;delay_7nop();scl=1;delay_7nop();sda=1;delay_7nop();bit ask()/应答信号,return是什么类型这里函数就是什么类型, /每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位) /如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据bit flag;/真假判断,或只有0/1取值的标志位设置为bitsda=1;scl=1;delay_7nop();flag=sda;delay_7nop();scl=0;delay_7nop();if(flag=1)return FALSE;/非应答elsereturn TRUE;/应答/用下面屏蔽的的应答信号也可以,上面的应答信号考虑更周全/*void ask() /应答uchar i;scl=1;delay_7nop();while(sda=1)&(i250)i+;scl=0;delay_7nop();*/-void writedata(uchar dat)/下面是readdata()和readadd()保持程序风格的一致性,命名不该命为writecurrent/函数参数不要乱用P,q之类的毫无意义的名字,这里用dat,date是关键字,不能用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();scl=0;delay_7nop();sda=1;/总线释放delay_7nop();void writeadd(uchar add,uchar infor)start();writedata(0xa0);/器件地址 ask();writedata(add);/器件内部存储区的地址ask();writedata(infor);/数据ask();stop(); /-uchar readdata()uchar i,dat;scl=0;delay_7nop();sda=1;/数据总线释放delay_7nop();for(i=0;i8;i+) scl=1;delay_7nop();dat=(datI/O-ports-)看不出P2口的变换,/因为这里是外部EEPROM,要仿真芯片或者硬件的支持才能观察结果,本程序测试无误init();/这里初始化一下writeadd(25,0xaa);delay(50);/此处最少要delay(7);P1=readadd(25);/P1还是P2还是P3主要是看你的硬件用哪个来测试/主函数放最后是省去了函数申明,但在工程应用中建议放在最上面/这样一眼就能看到该工程是做什么的,且功能函数本身就应该在头文件中作申明/以便其他点C文件能方便调用,每写一个功能函数都在头文件中作申明,这是一个好习惯/方便其他点C文件随时调用/-/总结:/1.你的程序最初可能把scl和sda可能定反了,/2.你没写ask函数(屏蔽了),应答信号必须写, /3.你的代码风格,变量名命名,函数名命名,函数排放顺序,无注释,/ 书写排版有很大问题,看你的程序很吃力,且不美观/4.能用子函数代替的就写成子函数,用那么多nop看上去代码真丑/5.有关读写的4个函数你函数名命名风格没统一/建议:/1.看时序图的能力和对IIC总线的理解有待加强/2.要慢慢形成规范的代码风格/3.keil软件对你还有很大学习空间,要学习用更多的keil调试和用protus仿真/相关提示:/1.要学些使用下列对内存和存储的理解:/code :程序存储区(64KB)/data :可直接寻址的内部数据存储区(128B) 默认的变量存储区/idata:不可直接寻址的内部数据存储区(256B) 当全局变量定义太多的时候/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国饲料用鱼粉行业市场前景预测及投资战略研究报告
- 2025年 达州市大竹县乡村职业经理人招聘笔试试题附答案
- 中国远程协作办公行业市场深度研究及投资战略规划报告
- 花叶项目投资可行性研究分析报告(2024-2030版)
- 红外防水摄像机外壳项目投资可行性研究分析报告(2024-2030版)
- 中国有线数字电视增值业务行业市场深度调查评估及投资方向研究报告
- 中国铁路车辆设备行业发展运行现状及发展趋势预测报告
- 钛封头行业深度研究分析报告(2024-2030版)
- 北京消防培训课件
- 中国一次性使用无菌医用敷贴行业市场占有率及投资前景预测分析报告
- 北师大版二年级数学下册各单元测试卷
- 招生就业处2025年工作计划
- 【MOOC】外国文学经典导读-西北大学 中国大学慕课MOOC答案
- 医院供电合同
- 市场营销学练习及答案(吴健安)
- 2023水电工程费用构成及概(估)算费用标准
- Unit2 Bridging Cultures Discovering useful structures 课件英语人教版(2019)选择性必修第二册
- 脊柱健康与中医养生课件
- 《土地复垦介绍》课件
- 天然气管道安装施工组织方案
- 《能源培训讲义》课件
评论
0/150
提交评论