CMOS字节信息(仅列出比较常用的字节)
偏移值 | 描述 |
---|---|
0 | 当前秒数 |
2 | 当前分钟 |
4 | 当前小时 |
6 | 星期几 |
7 | 一个月中的第几天 |
8 | 几月 |
9 | 年(仅表示后两位,如2021年,存放的数据为21) |
读取CMOS时间步骤:
- 先向地址端口(0x70)发送偏移信息,告诉它要读的分,时还是秒
- 从数据端口(0x71)读出一个字节数据。
比如要读取当前月份:
outb(0x70, 0x4);
month = inb(0x71);
BCD码转十进制数字
但是要注意读出的数据都是BCD码,要转为正常的十进制。
unsigned char bcd2dec(unsigned char bcd)
{
return ((bcd & 0xf) + ((bcd>>4)*10));
}
其实原理很简单:
比如BCD码表示15这个数字,表示方式是:0001 1001(前四位表示1,后四位表示5)
BCD码是用四位来表示一个数的。
前四位对应十位,需要乘10,再加上个位(后四位)就是对应的十进制数字了。