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,再加上個位(後四位)就是對應的十進制數字了。