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