完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
再ds1302时钟芯片里面有这么一个函数
void write_ds1302_byte(uchar dat) { uchar i; for(i=0;i<8;i++) { sck=0; io=dat&0x01; dat=dat>>1; sck=1; } } 就是将命令dat由低位到高位写入io中,也就是是命令写入函数 。 正确的理解是例如 dat=0x45即dat=0100 0101和0x01进行‘’“&”运算, i=0时,屏蔽掉前七位 即0100 0101&0000 0001=0000 0001,此时io 的最低位是1.dat右移一位 dat=0010 0010 i=1时,屏蔽掉前七位即0010 0010&0000 0001=0000 0000,此时io 的次低位时0.dat右移一位dat=0001 0001 . . .直到i=8,就将dat=0100 0101写入到io中。 但是我的理解是依据上面的函数 i=0; dat=0x45即dat=0100 0101时,io=dat&0x01 此时io=0000 0001;dat右移一位 dat=0010 0010; i=1; dat=0010 0010 此时 io=dat&0x01; 即io=0010 0010&0000 0001=0000 0000; dat右移一位dat=0001 0001 i=3; dat=0001 0001此时io=dat&0x01 即io=0001 0001&0000 0001 =0000 0001 直到i=7,最后的io值是0000 0000 并不等于dat 0x45啊 求大神我错在哪里了? |
|
相关推荐
4个回答
|
|
那个循环移位只是依次提取dat的各个bit的值,然后通过io写入ds1302。
你的io就一个引脚,数据带宽只有1个bit。想传大数据,只能依次按规定的时序写给ds1302. 就像你和你的小伙伴8个人,要通过只能容一个人通过的窄门。 8个人并排走,肯定过不去, 那么就排队依次通过这个门。而通过门的人,他并没有消失,已经在门外了。 就像你说前7次的数据,每次已经写进ds1302了,并没丢失 |
|
|
|
999 发表于 2016-7-11 23:05 你说的没错,io定义的是一个串行口。 我给你发开发板自带的程序吧。上面那个是我自己理解举得例子。 void Ds1302Write(uchar addr, uchar dat) { uchar n; RST = 0; _nop_(); 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; _nop_(); } for (n=0; n<8; n++)//写入8位数据 { DSIO = dat & 0x01; dat >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0; _nop_(); } RST = 0;//传送数据结束 _nop_(); } 我的疑惑就是如何通过8次循环将一个八位dat或者八位addr写入的?你的意思就是i通过一次循环只能写入一个0或者1, 8次以后就写入了八位数据? 可是当i=7时,diso=0或者1(我没算具体是几),那前七次循环计算的数据存储在哪里了?我的理解是diso都会把前一次计算的都覆盖了,只留i=7的计算结果,那不是就没有把数据写入吗? |
|
|
|
楼上解答的很详细了
|
|
|
|
999 发表于 2016-7-12 00:01 哎呀,这么一说我就明白了。真是论坛高手多呀,自己学起来身边每个能给指导的真的很费劲,谢谢你的答案 |
|
|
|
只有小组成员才能发言,加入小组>>
788 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2860 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1068浏览 3评论
193浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 12:41 , Processed in 1.178235 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号