第11章串行扩展要点分析.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图中KEY1作为外部中断0的中断源,当按下KEY1,单片机通过I2C总线发送数据0xaa给AT24C02,等发送数据完毕后,将0xaa送P2口通过LED显示。 KEY2作为外部中断1的中断源,当按下KEY2时,单片机通过I2C总线读AT24C02,等读数据完毕后,将读出的最后数据0x55送P2口的LED显示出来。 最终显示的仿真效果是:按下KEY1,标号为D1~D8的8个LED中D3、D4、D5、D6灯亮,如图11-20所示。按下KEY2,则D1、D3、D5、D7灯亮。 Proteus提供的I2C调试器是调试I2C系统的得力工具,使用I2C调试器的观测窗口可观察I2C总线上的数据流,查看I2C 总线发送的数据,也可作为从器件向I2C总线发送数据。 在原理电路中添加I2C调试器具体操作:先单击图4-2左侧工具箱中的虚拟仪器图标 ,此时在预览窗口中显示出各种虚拟仪器选项,单击 “I2C DEBUGGER”项,并在原理图编辑窗口单击鼠标左键,就会出现I2C调试器符号,如图11-20所示。然后把I2C调试器的“SDA”端和“SCL” 端分别连接在I2C总线的“SDA”和“SCL”线上。 仿真运行时,用鼠标右键单击I2C调试器符号,出现下拉菜单,单击“Terminal”选项,即可出现I2C调试器的观测窗口,如图11-21所示。从观测窗口上可看到按一下KEY1时,出现在I2C总线上的数据流。 图11-21 I2C调试器的观测窗口 本例参考程序: #include reg51.h #include intrins.h //包含有函数_nop_()的头文件 #define uchar unsigned char #define uint unsigned int #define out P2 //发送缓冲区的首地址 sbit scl=P1^1; sbit sda=P1^0; sbit key1=P3^2; sbit key2=P3^3; uchar data mem[4]_at_ 0x55; //发送缓冲区的首地址 uchar mem[4]={0x41,0x42,0x43,0xaa}; //欲发送的数据数组 uchar data rec_mem[4] _at_ 0x60 ; //接收缓冲区的首地址 void start(void); //起始信号函数 void stop(void); //终止信号函数 void sack(void); //发送应答信号函数 bit rack(void); //接收应答信号函数 void ackn(void); //发送无应答信号函数 void send_byte(uchar); //发送一个字节函数 uchar rec_byte(void); //接收一个字节函数 void write(void); //写一组数据函数 void read(void); //读一组数据函数 void delay4us(void); //延时4μs void main(void) //主函数 { EA=1;EX0=1;EX1=1; //总中断开,外中断0与外中断0允许中断 while(1); } void ext0()interrupt 0 //外中断0中断函数 { write(); //调用写数据函数 } void ext1()interrupt 2 //外中断1中断函数 { read(); //调用读数据函数 } void read(void) //读数据函数 { uchar i; bit f; start(); //起始函数 send_byte(0xa0); //发从机的地址 f=rack(); //接收应答 if(!f) { start(); //起始信号 send_byte(0xa0); f=rack(); send_byte(0x00); //设置要读取从器件的片内地址 f=rack(); if(!f) { or(i=0;i3;i++) { rec_mem[i]=rec_byte(); sack(); } rec_mem[3]=rec_byte();ackn(); } } } stop();out=rec_mem[3];while(!key2); } void write(void) //写数据函数 { uchar i; bit f; start(); send_byte(0xa0); f=rack();- if(!f){ sen

文档评论(0)

挺进公司 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档