DS1302 的一條指令一個(gè)字節(jié)共8位,其中第7位(即最高位)固定為1,這一位如果是0的話,那寫進(jìn)去也是無效的。第6位是選擇 RAM 還是 CLOCK 的,我前邊說過,我們這里主要講 CLOCK 時(shí)鐘的使用,它的 RAM 功能我們不用,所以如果選擇 CLOCK 功能,第6位是0,如果要用 RAM,那第6位就是1。從第5到第1位,決定了寄存器的5位地址,而第0位是讀寫位,如果要寫,這一位就是0,如果要讀,這一位就是1。指令字節(jié)直觀位分配如圖15-9所示。
圖15-9 DS1302 命令字節(jié)
DS1302 時(shí)鐘的寄存器,其中8個(gè)和時(shí)鐘有關(guān)的,5位地址分別是 0b00000~0b00111,還有一個(gè)寄存器的地址是 01000,這是涓流充電所用的寄存器,我們這里不講。在 DS1302 的數(shù)據(jù)手冊(cè)里的地址,直接把第7位、第6位和第0位值給出來了,所以指令就成了 0x80、0x81 那些了,最低位是1,那么表示讀,最低位是0表示寫,如圖15-10所示。
圖15-10 DS1302 的時(shí)鐘寄存器
寄存器0:最高位 CH 是一個(gè)時(shí)鐘停止標(biāo)志位。如果時(shí)鐘電路有備用電源,上電后,我們要先檢測(cè)一下這一位,如果這一位是0,那說明時(shí)鐘芯片在系統(tǒng)掉電后,由于備用電源的供給,時(shí)鐘是持續(xù)正常運(yùn)行的;如果這一位是1,那么說明時(shí)鐘芯片在系統(tǒng)掉電后,時(shí)鐘部分不工作了。如果 Vcc1 懸空或者是電池沒電了,當(dāng)我們下次重新上電時(shí),讀取這一位,那這一位就是1,我們可以通過這一位判斷時(shí)鐘在單片機(jī)系統(tǒng)掉電后是否還正常運(yùn)行。剩下的7位高3位是秒的十位,低4位是秒的個(gè)位,這里再提請(qǐng)注意一次,DS1302 內(nèi)部是 BCD 碼,而秒的十位最大是5,所以3個(gè)二進(jìn)制位就夠了。
寄存器1:最高位未使用,剩下的7位中高3位是分鐘的十位,低4位是分鐘的個(gè)位。
寄存器2:bit7 是1的話代表是12小時(shí)制,0代表是24小時(shí)制;bit6 固定是0,bit5 在12小時(shí)制下 0代表的是上午,1代表的是下午,在24小時(shí)制下和 bit4 一起代表了小時(shí)的十位,低4位代表的是小時(shí)的個(gè)位。
寄存器3:高2位固定是0,bit5 和 bit4 是日期的十位,低4位是日期的個(gè)位。
寄存器4:高3位固定是0,bit4 是月的十位,低4位是月的個(gè)位。
寄存器5:高5位固定是0,低3位代表了星期。
寄存器6:高4位代表了年的十位,低4位代表了年的個(gè)位。請(qǐng)?zhí)貏e注意,這里的00~99指的是2000年~2099年。
寄存器7:最高位一個(gè)寫保護(hù)位,如果這一位是1,那么是禁止給任何其它寄存器或者那31個(gè)字節(jié)的 RAM 寫數(shù)據(jù)的。因此在寫數(shù)據(jù)之前,這一位必須先寫成0。