完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好,有问题想请教大家,在使用80C51单片机IO口模拟I2C总线与调制芯片MC44BS373CA的I2C总线口通信时,出现了问题,单片机接受不到MC44BS373CA的应答信号,下面是调试使用的程序,不知道哪里出现了问题,请大家帮帮忙啊,看看是不是程序出现了错误,不甚感激哦!
#include #include"intrins.h" #define false 0 #define ture 1 ***it sda=P1^2; //数据 ***it scl=P1^3; //时钟 bit ack; //应答信号 //************************************************************************// // 延时子程序 // //**********************************************************************// void delay(int x,int y) { int i,j; for(i=0;i for(j=0;j } //************************************************************************// // i2c开始信号 // //**********************************************************************// void i2c_start() { sda=1; scl=1; delay(2,2); sda=0; delay(2,2); //i2c初始化 scl=0; _nop_(); //准备发送数据 } //********************************************************************// // i2c结束信号 // //******************************************************************// void i2c_stop() { scl=0; sda=0; delay(2,2); scl=1 delay(2,2); sda=1; delay(2,2); } //********************************************************************// // i2c接收应答信号 // //******************************************************************// bit i2c_ack() { unsigned char error=255; sda=1; delay(2,2); scl=1; delay(2,2); while(sda) { error=error-1; if(error<=0) { i2c_stop(); return(false); } } scl=0; _nop_(); return (ture); } //********************************************************************// // i2c发送8字节 // //******************************************************************// void i2c_sendbyte(unsigned char x) { unsigned char i; for(i=0;i<8;i++) { scl=0; if((x< else sda=0; _nop_(); _nop_(); scl=1; delay(2,2); } scl=0; } //*********************************************************************// // i2c发送单个字节 // //*******************************************************************// unsigned char i2c_send(unsigned char add,c1,c0,fm,fl) { i2c_start(); i2c_sendbyte(add); //发送x ack=i2c_ack(); if(ack) {i2c_sendbyte(c1); ack=i2c_ack(); if(ack){i2c_sendbyte(c0); ack=i2c_ack(); if(ack){i2c_sendbyte(fm); ack=i2c_ack(); if(ack){i2c_sendbyte(fl); ack=i2c_ack(); if(ack){i2c_stop();return (1); } else return(0); } else return(0); } else return(0); } else return(0); } else return(0); } //********************************************************************// // 主函数 // //******************************************************************// void main() { unsigned char result=1; result=i2c_send(0xCA,0x80,0x18,fm,fl); if(result==0) { result=i2c_send(0xCA,0x80,0x18,fm,fl); } } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
3974 浏览 0 评论
8518 浏览 0 评论
5943 浏览 0 评论
4089 浏览 1 评论
5180 浏览 0 评论
请问一下qspi mtsr引脚传输一次32bit后引脚不拉低怎么解决?
408浏览 2评论
646浏览 2评论
4746浏览 2评论
最近UJA1023开发遇到问题了,各位大神有谁知道可以替代这颗芯片的
582浏览 1评论
806浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 09:05 , Processed in 0.837127 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号