完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近一直在看DA/AD之类的问题,后来遇到了PCF8591这样的芯片,须要用I2C总线的一些知识。看到这样一段程序,有些地方不太明白,在此求助,望高手出手相助。程序如下:
发送一个字节 ------------------------------------------------*/ void Send(unsigned char Data) { unsigned char BitCounter=8; unsigned char temp; do { temp=Data; Scl=0; _nop_();_nop_();_nop_();_nop_();_nop_(); if((temp&0x80)==0x80) ///我想此处应该是屏蔽低七位,然后根据最高位的值来决定数据总线上的值,可是为什么要这么做 ///呢? Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0; } /*------------------------------------------------ 读入一个字节并返回 ------------------------------------------------*/ unsigned char Read(void) { unsigned char temp=0; unsigned char temp1=0; unsigned char BitCounter=8; Sda=1; do { Scl=0; _nop_();_nop_();_nop_();_nop_();_nop_(); Scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); if(Sda) ////此处及以下程序做何解释,为何要这么做呢? temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); } |
|
相关推荐
6个回答
|
|
|
|
|
|
|
|
都是用来作为读取数据用的
|
|
|
|
|
|
人家是一位一位传送的,需要一位一位的判断,然后直接给sda,也可以别的做法!
|
|
|
|
楼上几位的解释 正解。。。。但是说实话,这段代码写的不咋的。。个人觉得,楼主需要注意这几个方面,
1、要熟悉这种学习过程。一般而言,要用到iic或者spi 之类的,又要用到io端口模拟通信, 需要先了解这些通信协议,然后再尝试自己写,可以参考别人的代码,最后再测试,这样子才能进步, 要是一开始就看别人的代码,效果估计不是很好, 主要是 c语言太灵活了,先不论别人写的代码质量如何,光是那些时序就有多种实现方法,不然下次别人换中表示方法,就要迷糊......还有就是读别人代码,本来就比自己写代码费事..... 2、此外,建议楼主熟悉一下c语言的基本语法。 楼主的那两处疑惑都是关于位操作的。。。特定位 置1 或者清0, 这个不难,熟悉一下就好...很快上手 3、就以上代码段而言, 第一处,按照 先高位,再低位发送的顺序,肯定每次判断是最高有效位,所以需要屏蔽掉其他位,第二处,判断此时io的电平高低,来确定此时收到的位是 1还是 0, 那么置对应的位....... |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12012 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 01:19 , Processed in 0.668698 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号