单片机常用芯片总结(二) |
您所在的位置:网站首页 › ram芯片为什么要设置片选引脚 › 单片机常用芯片总结(二) |
目录
一、芯片介绍二、芯片引脚定义三、寄存器定义四、命令字五、时序图与数据读写5.1 单字节写步骤(Write)5.2 单字节读步骤(Read)
六、BCD码6.1 问题描述6.2 问题原因6.3 解决方案
一、芯片介绍
DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。 RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片。 DS1302电路图如下: 相关寄存器如下: 命令字如下: 举个例子,对时钟操作、秒地址操作、读: 10000001(0x81) 对时钟操作、秒地址操作、写: 10000000(0x80) 这与上方第三章寄存器中的读地址和写地址是对应的。 五、时序图与数据读写时序图: 规定:在时钟的上升沿,I/O口的数据将会被写入,在时钟的下降沿,时钟芯片的数据将会被读出。 5.1 单字节写步骤(Write)Step1:将CE置1; Step2:命令字(I/O)发两个字节:第一个字节是命令字(先发最低位R/W),第二个字节是数据;【一位一位依次发送】 Step3:SCLK给上升沿,将命令字最低位写入单片机; Step4:将SCLK置回0; Step5:SCLK给上升沿,将命令字次低位写入单片机; Step6:将SCLK置回0; …(依次循环8次) Step7:SCLK给上升沿,将数据最低位写入单片机; Step8:将SCLK置回0; Step9:SCLK给上升沿,将数据次低位写入单片机; Step10:将SCLK置回0; …(依次循环8次) Step11:将CE置0; (每个上升沿写入数据) 代码示例: //单字节写,Command为命令字(地址),Data为要写入的数据 void DS1302_WriteByte(unsigned char Command,Data){ unsigned char i; DS1302_CE=1; for(i=0;i DS1302_IO=Data&(0x01 DS1302_IO=Command&(0x01Data=Data|(0x01…——>8——>9——>16——>17——>…)这里要引入BCD码的概念。 DS1302寄存器数据不是以二进制进行存储的,而是以BCD码进行存储的。 BCD码(Binary Coded Decimal),用4位二进制数来表示1位十进制数。 例:0001 0011表示13,1000 0101表示85,0001 1010不合法(因为1010无法表示十进制数) 在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法 6.2 问题原因现象的原因:在BCD码中,0000 1001表示数字9,而0001 0000表示数字10,而0001 0000转为十进制数字为16,因此才会在这里造成突变。 再回过头来看一下寄存器,0-3位存的是秒,4-6位存的是10秒。 DS1302写数据时需要将十进制数据转为BCD码的形式,读数据时需要将BCD码转为十进制数据形式。 BCD码转十进制:DEC=BCD/16*10+BCD%16; (2位BCD) 十进制转BCD码:BCD=DEC/10*16+DEC%10; (2位BCD) 解释:BCD/16表示将数据的高四位取出(作为十位),BCD%16表示将低四位取出(作为个位)。 参考:以上相关图片和资源均参考自DS1302时钟芯片的数据手册,关于中英文相关数据手册可以参考资源:https://download.csdn.net/download/didi_ya/85170337 ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~ |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |