一線式時鐘芯片DS2417的原理與應用
DAT EQU P1.0
........
INIT:CLR EA
INI10:SETB DAT
MOV R2,#200
INT11:CLR DAT
DJNZ R2, INI11
;主機發(fā)復位脈沖持續(xù)3μs×200=600μs
SETB DAT ;主機釋放總線,口線改為輸入
MOV R2,#30
INI12:DJNZ R2,INI12
;DS2417;等待2μs×30=60μs
CLR C
ORL C,DAT
;DS2417;數(shù)據(jù)線變低(有存在脈沖)嗎?
JC INI10 ;DS2417未準備好,重新初始化
MOV R6,#80
INT13:ORL C,DAT
JC INI14;DS2417;數(shù)據(jù)線變高,初始化成功
DJNZ R6, INI13
;數(shù)據(jù)線低電平可持續(xù)3μs×80=240μs
SJMP INI10 ;初始化失敗,重來
INI14:MOV R2,#240
INI15:DJNZ R2,INI15
;DS2417;應答最少2μs×240=480μs
RET
;---------------
WRITE:CLR EA ;寫入的命令/數(shù)據(jù)字節(jié)在A中
MOV R3,#8 ;循環(huán)8次,寫一個字節(jié)
WR11:SETB DAT
MOV R4,#8
RRC A ;寫入位從A中移到CY
CLR DAT
WR12:DJNZ R4,WR12 ;等待16μs
MOV DAT,C;命令字按位依次送給DS2417
MOV R4, #20
WR13:DJNZ R4, WR13 ;保證寫過程持續(xù)60μs
DJNZ R3, WR11 ;未送完一個字節(jié)繼續(xù)
SETB DAT
RET
;----------------
READ:CLR EA
MOV R6,#8 ;循環(huán)8次,讀一個字節(jié)
RD11:CLR DAT
MOV R4,#4
NOP ;低電平持續(xù)2μs
SETB DAT ;口線設為輸入
RD12:DJNZ R4,RD12 ;等待8μs
MOV C,DAT ;主機按位依次讀入DS2417的數(shù)據(jù)
RRC A ;讀取的數(shù)據(jù)移入A
MOV R5,#30
RD13:DJNZ R5,RD13 ;保證讀過程持續(xù)60μs
DJNZ R6,RD11 ;讀完一個字節(jié)的數(shù)據(jù),存入A中
SETB DAT
RET
;----------------本文引用地址:http://www.ex-cimer.com/article/171912.htm
評論