资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
/* 说明,该程序是模拟 IIC 的通信思想,但也不全是,首先本人设计的不是从机与主机的通信,而是两单片机是平等的,单片机 A 可以向 B 或其他任何单片机发送数据(通过各个单片机所设置的地址来加以区分) ,同时单片机 A 可以也向 B 或其他任何单片机读取数据。反之单片机 B 或其他单片机也可以向 A 发送数据或读取 A 的数据,所以各个单片机的代码基本上是一样的,只需根据具体不同的需要调用就行。由于本人初学单片机,代码写的并不是很好。望各位多多指教!*/单片机 A 的代码#include#define uchar unsigned char#define uint unsigned int#define LOC_address 0x48sbit sda=P10;sbit scl=P11;sbit STROBE = P12;bit R_W;bit START_flag=0;uchar DEV_address;void delay()uint i;for(i=0;i#define uchar unsigned char#define uint unsigned int#define LOC_address 0xaasbit sda=P10;sbit scl=P11;sbit STROBE = P12;bit R_W;bit START_flag=0;uchar DEV_address;void delay()uint i;for(i=0;i=100;i+);/*void start() /启动 I2C 总线 sda = 1; delay(); scl = 1; delay(); sda = 0; delay(); */void start_scan()bit PreState;bit NowState;char NN = 10;PreState = sda; /记录当前 SDA 状态,用作比较while(scl = 1 & NN-)NowState = sda;if(PreState = 1 & NowState = 0) /如果为下降沿则为开始信号 START_flag = 1;void Send_Date(uchar j) unsigned char i;bit temp;scl = 1;while(STROBE);if(STROBE=0) delay();delay();delay();for (i = 0 ;i 8 ;i+)if(ji)else temp=0;sda = temp; delay(); scl = 0; delay(); scl = 1; delay();scl = 0;sda = 1; /释放数据线 delay();STROBE=1; STROBE=1;uchar Receive_Date()uchar i,j,k=0xff;scl = 1;STROBE=0;delay();if(!scl)&(sda)return k;if(STROBE=0)while(scl);for(i=0;i8;i+)while(!scl);if(sda=1)j=1;else j=0;k=(k1)|j;delay();delay();while(scl);P2=k;return k;return k;void ChackRdd()uchar i,j,k=0xff;scl = 1;STROBE=0;/置低信号告诉单片机 A、单片机 B 已做好准备接收delay();if(!STROBE)while(scl);/等待 A 响应for(i=0;i8;i+)while(!scl);if(sda=1) j=1;else j=0;k=(k1)|j;delay();delay();while(scl);P0=k;R_W=kDEV_address=(kSTROBE=1; STROBE=1;void B_work()if(STROBE)start_scan();if(START_flag)START_flag=0;STROBE=0;delay();STROBE=1;ChackRdd();if(DEV_address=LOC_address) if(R_W)STROBE=(STROBE);STROBE=1;/必须再次置高,使得两单片机在发送和接收数据时时序保持一致Send_Date(0x80);else if(!R_W)STROBE=(STROBE); Receive_Date(); void main()STROBE=1;scl=1;while(1) B_work();
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号