- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
                您可能关注的文档
最近下载
- 职业技能竞赛数控车工、数控铣工、加工中心实操训练试题-1.doc VIP
- 低压并网柜技术规范书.doc VIP
- 2025年法官入额考试真题及答案.docx VIP
- 《工程勘察设计收费管理规定》计价格【2002】10号.doc VIP
- 2025年法官入额考试真题及答案.docx VIP
- 《GJ B798-1990-伪装涂料漆膜颜色》.pdf VIP
- 美国纽约摄影学院摄影教材【上下册无密码全版】PDF版.docx VIP
- 职业生涯规划书.docx VIP
- 截屏-节能与新能源汽车技术路线图3.0-2025-10-新能源.pptx
- 2022年二级造价师《建设工程计量与计价实务》(水利)考试题库.pdf VIP
 原创力文档
原创力文档 
                        

文档评论(0)