完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
unsigned char Ds1302Read(unsigned char addr)
{ unsigned char n,dat,dat1; SCLK=0;//先将SCLK置低电平。 _nop_(); RST=1;//然后将RST(CE)置高电平。 _nop_(); for(n=0;n<8;n++)//开始传送八位地址命令 { DSIO=addr&0x01;//数据从低位开始传送 addr>>=1; SCLK=1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK=0;//DS1302下降沿时,放置数据 _nop_(); } _nop_(); for(n=0;n<8;n++)//读取8位数据 { dat1=DSIO;//从最低位开始接收 dat=(dat>>1)|(dat1<<7); SCLK =1; _nop_(); SCLK=0;//DS1302下降沿时,放置数据 _nop_(); } RST=0; _nop_();//以下为DS1302复位的稳定时间,必须的。 SCLK=1; _nop_(); DSIO=0; _nop_(); DSIO=1; _nop_(); return dat; } DSIO = addr& 0x01 ;//数据从低位开始传送 这句话为什么要加&0x01,不加有什么后果,举例说明下 dat = (dat>>1) | (dat1<<7); 这语句不懂,举例说明下,谢谢了 |
|
相关推荐
6个回答
|
|
1.DSIO=addr&0x01;//数据从低位开始传送
addr>>=1; 这两句需要一起看,而且还需要清楚他们是在一个8次for循环中。说明:将addr的每一位都赋值给DSIO一次,起到通信的作用,若各没有&x01,DSIO输出就乱了也没有意义了。 2.dat = (dat>>1) | (dat1<<7);这句话,仍需要结合dat1=DSIO;和清楚起处在8次for循环中。 可以理解为:你需要读取8位数据,每次读取一位,但是单片机的变量是8位的,所以每次读的数据都处在中间变量dat1 8位中的最低位,所以当处理中间变量dat1时先把最低位的数据(就是读出来的数)先向左以7位让它处于最高位然后给到向右移一位的dat,经过8次,dat就是所读8位数据(从低位开始)可以拆分如下 dat1 = dat1 << 7; dat = dat >> 1; dat = dat1 | dat; 仍有问题可以微信交流(头像是我的二维码):WM13804014772 都是电子爱好者,真心希望能帮到你
最佳答案
|
|
|
|
DSIO = addr& 0x01 ;//数据从低位开始传送
因为你的DSIO是一位的数据,,你需要发送的数据addr是八位的数据,八位数据不能直接发送,所以需要把它拆开成八个一位的数据发送 dat = (dat>>1) | (dat1<<7); 这个就是把dat中原数据右移后将新数据填补到空缺位,八次后得到的数据就是你接收到的数据 |
|
|
|
例如你的dat是1011 1101,接收到的数据是1,那经过移动后就是0101 1110在与上dat1左移七位就是1101 1110,这样七次后就能将接收到的八位数替换到dat中
|
|
|
|
移位的时候要用到的数据
|
|
|
|
MENGXIN91 发表于 2017-1-12 13:33 你有QQ吗? |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码
634 浏览 0 评论
【瑞萨RA2L1入门学习】+ MacOS安装e2studio
362 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作
660 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示
519 浏览 0 评论
653 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12214 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-25 01:53 , Processed in 0.441161 second(s), Total 50, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号