完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
unsigned char Read_Ds1302 ( unsigned char address )
{ unsigned char i,temp=0x00; RST=0; _nop_(); _nop_(); SCK=0; _nop_(); _nop_(); RST=1; _nop_(); _nop_(); Write_Ds1302_Byte(address); for (i=0;i<8;i++) { if(SDA) temp|=0x80; SCK=0; temp>>=1; _nop_(); _nop_(); _nop_(); SCK=1; } RST=0; _nop_(); _nop_(); RST=0; SCK=0; _nop_(); _nop_(); _nop_(); _nop_(); SCK=1; _nop_(); _nop_(); SDA=0; _nop_(); _nop_(); SDA=1; _nop_(); _nop_(); return (temp); 上面的程序是 ds1302时钟芯片的读数据函数,SDA对应ds1302的IO口,这段程序中 if(SDA) temp|=0x80; 是什么意思?8次for循环中为什么每次都有 if(SDA) temp|=0x80; 这句程序? |
|
相关推荐
3个回答
|
|
判断IO的状态,因为它是串行数据,所以要读一字节就要读做8次;ps:对着手册就清楚了
|
|
|
|
这是逐位对TEMP 赋值的过程, 时钟芯片传来的这一位 SDA 是1,就把TEMP这一位置1, 然后temp>>=1;TEMP会右移准备接受下一位数据! 直到接受88个位,一字节接受完毕! 不过你这时序看着这么乱呢!有点奇怪!
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9057 浏览 16 评论
4086 浏览 18 评论
1175浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:14 , Processed in 1.210538 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号