完善资料让更多小伙伴认识你,还能领取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); } } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
3884 浏览 0 评论
8193 浏览 0 评论
5876 浏览 0 评论
3974 浏览 1 评论
5101 浏览 0 评论
请问一下qspi mtsr引脚传输一次32bit后引脚不拉低怎么解决?
332浏览 2评论
449浏览 2评论
4528浏览 2评论
最近UJA1023开发遇到问题了,各位大神有谁知道可以替代这颗芯片的
514浏览 1评论
644浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-13 02:00 , Processed in 0.602003 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191