关于DS1302的BCD码,又糊涂了
资料上说,BCD是用二进制码表示10进制数如果当前是23点,从时寄存器,读出来的数应该是多少呢,我认为是0x23,二进制表示:0b0010 0011,表示十位是2,个位是3
这样理解对不对呢? 本帖最后由 huxiangming 于 2019-9-20 14:36 编辑
24小时模式下这么理解是对的,12小时模式下就是 1011 0001 第5位代表下午,第7位代表12小时模式。
当然,0x23就代表了24小时模式,因为最高位是0. 沒錯
十進制 0~9 等於 BCD碼 0000 ~ 1001
進位 9+1 = 10, BCD碼 = 0001 0000 谢谢各位指点
0x23这个数,到底是算多少进制的呢?
那么,如果我要把这个数取出来,+1进行调时操作,a=0x23
应该怎么做呢,网上有人是先由16进制转为10进制,+1后,再由10进制转为16进制,再写回去,还是糊涂
(a>>4)*10+(a&0x0f),得到的,是不是十进制数字23? 本帖最后由 w6955 于 2019-9-20 15:41 编辑
bios 发表于 2019-9-20 15:22
谢谢各位指点
0x23这个数,到底是算多少进制的呢?
那么,如果我要把这个数取出来,+1进行调时操作,a= ...
0x23当然是16进制的数。0x---就是16进制的意思。 0X23+1=0X24,a+1就是了,“a+=1;” 0x23,也不是完全按16进制在走 bios 发表于 2019-9-20 15:39
0x23,也不是完全按16进制在走
那是因為你用的是 BCD碼
如果你把它當作 ASCII碼, 那就是 # 號了
而如果當成十六進制的數字, 那就是 十進制的 35
0x23 就只是一個數字, 你要把它當作甚麼東西, 完全取決於你自己
bios 发表于 2019-9-20 15:39
0x23,也不是完全按16进制在走
如果你寫 RS232 傳輸程式, 就會發現傳的資料都是 0x00~0xFF
那要怎麼分辨是數字還是文字?
這些都是取決於寫程式的人
你要把它當文字, 那他就是文字, 你要把它當數字, 那他就是數字 谢谢各位提醒,是这么个理
那么,我要把0x23当成十进制的23,应该怎么做呢 bios 发表于 2019-9-20 16:17
谢谢各位提醒,是这么个理
那么,我要把0x23当成十进制的23,应该怎么做呢
就是你在 5樓的寫法啊 DS1302是个什么东西? 夏国特 发表于 2019-9-20 16:46
DS1302是个什么东西?
Real Time Clock
即時時鐘晶片
本帖最后由 w6955 于 2019-9-20 18:04 编辑
bios 发表于 2019-9-20 16:17
谢谢各位提醒,是这么个理
那么,我要把0x23当成十进制的23,应该怎么做呢
明明是十六进制的23 就是十进制35 非要当十进制的 23 那叫指鹿为马!非如此就得 0X23-12 于是OK,BCD 你就忘了那些,每四个二进制是一个数!只有0-9 没有其他。 怪我上面没说清楚
我是想把“小时”的值取出来,进行+1操作
但是+1是有个范围的,不能大于24,因此,必须取出来,换算成十进制才行。
页:
[1]
2