No.99615 作者:yjshappy 邮件:yjs_happy@126.com ID:50226 登陆:2次 文章数:4篇 最后登陆IP:202.38.212.133 最后登陆:2007/3/23 22:54:10 注册:2006/3/30 11:31:21 财富:115 发帖时间:2006/11/14 16:15:02 发贴者IP:202.38.214.137 标题:yjshappy:请教I2C双机通讯的问题(附程序) 摘要:No.99615请教I2C双机通讯的问题(附程序) 大家好,请帮我看下这个程序应该怎么样修改才能实现:16F876为被控器通过I2C总线连续发送数据到主控器16F877。他们的RC3与RC4都是连在一起的,通过1K电阻接到+5V的。 下面是我写的程序,只能够发送一个数据到PIC16F877,也就是在PORTB端口的8个二极管显示出011100111。 而16F876的PORTB端口的二极管显示11001101,RC2脚接的二极管不亮。 万分感激!!!! //16f877作为主控接收器的程序 #include <pic.h> #include <pic1687x.h> #define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit) static bit PORTD_7@ PORTBIT(PORTD,7); static bit PORTD_6@ PORTBIT(PORTD,6); unsigned char n; unsigned char m; void i2_cinit(); void i2_cstart(); //i2c初始化子程序 void i2_cinit() {TRISC=0X18;//RC3,RC4设定为输出 SSPADD=19;//8MHZ晶振设定传送率为100KHZ SSPSTAT=0X80; SSPCON=0X38; } //i2c发送启动信号子程序 void i2_cstart() {for(n=255;n--;) {for(m=255;m--;);} //延时一会 SEN=1; // 发送启动信号 while(SSPIF==0); SSPIF=0; } //主程序 main() {TRISD=0; TRISB=0; PORTB=0; //清输出 PORTD=0; //清输出 i2_cinit(); i2_cstart(); SSPBUF=0X29; //发送从机地址选通 while (STAT_BF==1); while (ACKSTAT); //等待从机应答 while (SSPIF==0); SSPIF=0; RCEN=1; while(SSPIF==0); ACKDT=0; ACKEN=1; PORTB=SSPBUF; // ......
>>返回讨论的主题
|