完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
各位前辈,本人现在学习到I2C协议,写出的历程怎么都不能正确运行,用别人成功运行过的历程加上自己的主函数也不行。现将源程序附上,请大家指导,在此谢过了!
#include #include void delaynop() //5us延时 { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } #define uchar unsigned char #define uint unsigned int uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; ***it SDA = P3^7; ***it SCL = P3^6; uchar r,f,count=0; uchar l ,m=0x00; // // // // void delay() // {;;} void delay1ms(uint c) { uint e; for(c;c>0;c--) for(e=300;e>0;e--); } /* void init() { SCL=1; delay(); SDA=1; delay(); } void start() { SDA=1; SCL=1; delay(); SDA=0; delay(); SCL=0; return; } void stop() { SDA=0; SCL=1; delay(); SDA=1; delay(); SCL=0; return; } void respons() { uchar i; SCL=1; delay(); while((SDA==1)&&(i<250)) i++; SCL=0; delay(); } void unrespons() { uchar i; delay(); while((SDA==0)&&(i<250)) i++; SCL=0; delay(); } void write_byte(uchar date) { uchar i, temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; SCL=0; delay(); SDA=CY; delay(); SCL=1; delay(); } SCL=0; delay(); SDA=1; delay(); } uchar read_byte() { uchar i,k; SCL=0; delay(); SDA=1; for(i=0;i<8;i++) { SCL=1; delay(); k=k<<1; k=k|SDA; SCL=0; delay(); } delay(); r++; return k; } void write_add(uchar address,uchar date) { start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop(); f++; } uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); unrespons(); stop(); return date; } */ //以上是自己写的 /*****************************************************************/ /* */ /* 初始化函数 */ /* */ /*****************************************************************/ void init() { SCL=1; delaynop(); SDA=1; delaynop(); } /*****************************************************************/ /* */ /* 开始信号 */ /* */ /*****************************************************************/ void start() { SDA=1; delaynop(); SCL=1; delaynop(); SDA=0; delaynop(); SCL=0; } /*****************************************************************/ /* */ /* 停止信号 */ /* */ /*****************************************************************/ void stop() { SDA=0; delaynop(); SCL=1; delaynop(); SDA=1; delaynop(); SDA=0; } /*****************************************************************/ /* */ /* 应答信号 */ /* */ /*****************************************************************/ uchar reponse() { bit ack_bit; SDA=1; delaynop(); SCL=1; delaynop(); ack_bit=SDA; SCL=0; return ack_bit; } /*****************************************************************/ /* */ /* 写一个字节 */ /* */ /*****************************************************************/ void write_byte(uchar date) { uchar i; SCL=0; for(i=0;i<8;i++) { SDA=(bit)(date&0x80); _nop_(); SCL=1; delaynop(); SCL=0; date<<=1; } } /*****************************************************************/ /* */ /* 读一个字节 */ /* */ /*****************************************************************/ uchar read_byte() { uchar i,date; for(i=0;i<8;i++) { SCL=1; date<<=1; date=SDA|date; delaynop(); SCL=0; delaynop(); } return date; } /*****************************************************************/ /* */ /* 指定地址写数据 */ /* */ /*****************************************************************/ void write_add(uchar address,uchar date) { start(); write_byte(0xa0); reponse(); write_byte(address); reponse(); write_byte(date); reponse(); stop(); } /*****************************************************************/ /* */ /* 指定地址读数据 */ /* */ /*****************************************************************/ uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0); reponse(); write_byte(address); reponse(); start(); write_byte(0xa1); reponse(); date=read_byte(); stop(); return date; } //这些别人写的,还用成功了,但是用在我的主函数就不行 void main() { init(); l=read_add(2); while(1) { l=read_add(2); P2=0; P0=table[l]; delay1ms(100); delay1ms(100); delay1ms(100); write_add(2,m); m=m+1; count++; if(count>10) { count=0; m=0; } } }
|
|
相关推荐
1个回答
|
|
|
首先谢谢您的指导,但是还是有点不懂,写数据的时间延长一些,是指写数据函数的delay函数时间长一些?在初始化里面写一次是什么意思呢?不是很懂, |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
234 浏览 0 评论
514 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
826 浏览 0 评论
1366 浏览 2 评论
814 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16911 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 02:57 , Processed in 0.615131 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1645