DS1302為什么老是讀出00H?是寫沒寫進去?還是讀沒讀出來?哈哈,如果寫不進去會讀出一串FFH,如果讀出問題的話,也不會是00H,昨夜編好實驗,無果,甚怒!關(guān)機寬衣,忽覺大事不好,莫非我的循環(huán)太大了?那會導致一直在寫00H,一直在讀00H正好與實驗結(jié)果吻合,無奈舍友下寢,時間太晚,不好開機打擾,意覺明日復戰(zhàn),遂罷!早至工地,連工示之至東門待人!吾遂往,無事!思昨夜程序,應如是!至響歸,開機,改小循環(huán),波特率9600寫入,果如是!大喜!遂作此篇!曰:事實勝于雄辯!
;美國達拉斯的實時時鐘DS1302
ORG 0000H
CE EQU P3.5
IO EQU P3.3
SCLK EQU P3.4
AJMP MAIN
ORG 0030H
MAIN:
LCALL WRITE1302
ppp: LCALL READ1302 ;注意,這里是第一遍寫入,循環(huán)不能調(diào)到main,否則,一直在寫你永遠讀不出時鐘哈哈哈,終于成功了!
MOV P0,A
SJMP ppp
WRITE1302:MOV R1,#8
CLR CE
CLR SCLK
SETB CE
NOP
NOP
NOP
NOP ;復位1302
MOV A,#80H ;寫控制指令
LCALL WRITE
MOV A,#00H
MOV R1,#8
LCALL WRITE
RET
WRITE: RRC A
MOV IO,C
NOP
NOP
SETB SCLK
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R1,WRITE
RET
READ1302:MOV R1,#8
CLR CE
CLR SCLK
SETB CE
NOP
NOP
NOP
NOP
MOV A,#81H
LCALL WRITE
LCALL READ
RET
READ: MOV R1,#8
SETB SCLK
NOP
NOP
NOP
RED: CLR SCLK
NOP
MOV C,IO
RRC A
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R1,RED
RET
END
|