完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
下面两个程序都是关于I2C的写数据程序,为什么第二个程序就不行呢??
第一个程序:void Write_A_Byte(uchar b) //向 24C16 中写一字节数据 { uchar i; for(i=0;i<8;i++) { b<<=1; SDA=CY; _nop_(); SCL=1; NOP4(); SCL=0; } Read_ACK(); } 第二个程序:void Write_A_Byte(uchar dat) //写一个字节 { uchar i; uchar temp; temp=dat; SCL=0; //释放时钟信号 让数据总线变化 for(i=0;i<8;i++) { if(temp&0x80) SDA=1; else SDA=0; //SCL=1; temp<<=1; NOP4(); SCL=1; NOP4(); } SDA = 1; NOP4(); } |
|
相关推荐
7个回答
|
|
用第一段程序代替这段能成功吗,sda和slk引脚有接上拉电阻吗,现在这段程序应该可以了,另外在末尾有加Read_ACK();吗,加了的话,应该和第一段程序没什么区别了
最佳答案
|
|
|
|
第二个程序在发送完一位数据后,scl没置0,却置了1,手误吧。
|
|
|
|
void Write_A_Byte(uchar dat) //写一个字节 { uchar i; uchar temp; temp=dat; SCL=0; //释放时钟信号 让数据总线变化 for(i=0;i<8;i++) { if(temp&0x80) SDA=1; else SDA=0; SCL=1; temp<<=1; NOP4(); SCL=0; NOP4(); } } 是这样的,但是还是不行啊………… |
|
|
|
顶一个………………
|
|
|
|
if(temp&0x80)
SDA=1; else SDA=0; 在这加一个NOP4();试试 SCL=1; temp<<=1; NOP4(); SCL=0; NOP4(); 另外你如何判断写入是否成功呢 |
|
|
|
|
|
|
|
人中狼 发表于 2017-4-11 11:09 嗯嗯,谢谢指导,找到问题了,是没有加Read_ACK();谢谢。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】简介、环境搭建、工程测试
177 浏览 0 评论
312 浏览 0 评论
imx6ull裸机编程,使用宏定义无法驱动,使用指针就可以驱动
691 浏览 1 评论
《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
384 浏览 0 评论
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1284 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11619 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 00:22 , Processed in 0.701162 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号