一、硬件電路:
硬件電路原理圖如下,這是我15年前設(shè)計的一個LED數(shù)碼管電子表,它是由一片51單片機,3片ULN2803,一個7805集成穩(wěn)壓器、SD2001A時鐘模塊及8只9014npn三極管和8只8550pnp三極管,紅外線接收頭組成,51單片機完成讀寫時鐘,接收紅外遙控指令,驅(qū)動數(shù)碼管顯示等任務(wù)。由于要驅(qū)動2.3寸的數(shù)碼管,單片機的驅(qū)動能力不足,采用了NPN,PNP三極管組成的位驅(qū)動,用ULN2803組成段驅(qū)動,可以驅(qū)動24個數(shù)碼管,可以顯示日、月、年、星期、安全生產(chǎn)天數(shù)等。 二、51匯編程序
;電子表程序(源文件dzbc512.asm)
YEAR EQU 20H ;年
MONTH EQU 21H ;月
DAY EQU 22H ;日
WEEK EQU 23H ;星期
HOUR EQU 24H ;小時3031
MINUTE EQU 25H ;分鐘3233
SECOND EQU 26H ;秒3435
FLAG EQU 27H ;通用標(biāo)志寄存器
;BIT0=1, ACK ERR
;BIT0=0,ACK OK
;BIT1=1,TEST MODE
;BIT1=0,NORMAL MODE
TIMETEMP EQU 28H ;時間數(shù)據(jù)緩存器
TIMETX EQU 52H ;時間數(shù)據(jù)發(fā)送寄存器
TIMERX EQU 51H ;時間數(shù)據(jù)接收寄存器
SDA EQU 0b1h ;IIC的SDA口線
SCL EQU 0b0h ;IIC的SCL口線
ORG 0000
AJMP L0
ORG 000BH
AJMP CT
ORG 001BH
RETI
ORG 0023H
AJMP SI
ORG 0030H
L0: ;初始化程序
MOV SP,#60H ;定義堆棧
CLR A ;開始初始化各寄存器
MOV IE,A ;關(guān)中斷
MOV P1,A
MOV P2,A ;PORT1,PORT2置0
MOV TMOD,#91H ;定時器0為16位定時器,
MOV 8CH, #3CH
MOV 8AH, #0B0H
CLR FLAG
LCALL LONGDELAY ;延時300ms
LCALL LONGDELAY ;延時300ms
LCALL TIMESTATUS_INT12 ;24小時制
;-----------------------------------------------------------------
GET_TIME:
CLR ET0 ;關(guān)閉AT89C51的TIME0中斷
LCALL READ_TIME ;讀SD2000內(nèi)的實時時鐘數(shù)據(jù)
JNB SECOND.7,NO_TESTMODE
LCALL TIME_TESTMODE ;測試模式結(jié)束
; CLR SECOND.7 ;秒的最高位屏蔽為0
NO_TESTMODE:
MOV R2,#3 ;讀預(yù)置數(shù)據(jù)時分秒到30-35H內(nèi)存單元
MOV R0, #30H
MOV R1,#24H
L1: MOV A,@R1
SWAP A
ANL A,#0FH
MOV @R0,A
INC R0
MOV A,@R1
ANL A,#0FH
MOV @R0,A
INC R1
INC R0
DJNZ R2,L1
MOV A,WEEK ;星期數(shù)據(jù)
ANL A,#0FH
MOV 37H,A
MOV R2,#3 ;讀預(yù)置數(shù)據(jù)年月日20H,21H,22H--42,43,44,45,46,47
MOV R0, #42H
MOV R1,#20H
L2: MOV A,@R1
SWAP A
ANL A,#0FH
MOV @R0,A
INC R0
MOV A,@R1
ANL A,#0FH
MOV @R0,A
INC R1
INC R0
DJNZ R2,L2
MOV A,#2 ;2003年表示成0003所以把2加上
MOV 40H,A
MOV R3, #30H
CLRA
MOV R7,A
MOV 29H, A
MOV 2AH,A
MOV 2BH,A
MOV 2CH, A
MOV 2DH, A
MOV 2EH, A
MOV 2FH,A
MOV 50H,#01H
SETB EA ;開AT89C51中斷
SETB ET0 ;允許AT89C51的TIME0中斷
SETB TR0 ;T0開始計數(shù)
DIS:MOV DPTR,#0700H ;顯示子程序
MOV R2, #01H
MOV R1, #30H
DIS1:MOV A, @R1
MOVC A,@A+DPTR
; CPL A MOV B,A
MOV P0,A
MOV A, R1
MOV R4, A
MOV A, #08H
ADD A, R1
MOV R1, A
MOV A, @R1
MOVC A, @A+DPTR
; CPL A MOV B,A
MOV P2,A
MOV A, #08H
ADD A, R1
MOV R1, A
MOV A, @R1
MOVC A, @A+DPTR
; CPL A MOV B,A
MOV P3,A
MOV A, R4
MOV R1, A
MOV A, R2
MOV P1, A
ACALL DELAY
AJMP JPCL
AN: MOV A, #01H;置閃動標(biāo)志
MOV R7, A
MOV A,2CH ;
XRL A,#0AH ;鍵值=“A”顯示地址加1
JZ JIA
MOV A, 2CH
XRL A, #0BH;鍵值=“B”顯示地址減1
JZ JIAN1
MOV A, 2CH
XRL A, #0CH;鍵值=“C”復(fù)位
JNZ BJ
AJMP L0
BJ:MOV A, 2CH
AJMP J5
SS: MOV A, R3
MOV R0, A
MOV A, b;2CH
MOV @R0, A
CLR A
MOV R7, A
AJMP J6;SHAN
JIA:MOV A, R3
XRL A, #47H
JZ QCHU
; MOV A,#01H ;置閃動標(biāo)志
; MOV R7, A
MOV A,50H
JNZ SHAN
ACALL JIA1
INC R3
MOV 50H,#01H
QCHU: MOV A, R3
MOV R0, A
MOV 2CH, @R0
AJMP SHAN
JIAN1:MOV A, R3
XRL A, #30H
JZ QCHU1
; MOV A, #01H
; MOV R7, A
MOV A,50H
JNZ SHAN
ACALL JIAN
DEC R3
MOV 50H,#01H
QCHU1:MOV A, R3
MOV R0, A
MOV 2CH, @R0
SHAN: MOV A,R7 ;字符閃動用R7識別
SETB TR0
JNZ G
AJMP J5
G: MOV A, 2FH
CJNE A, #05H, J4
MOV A, R3
MOV R0, A
MOV A,#11H ;熄滅顯示
MOV @R0, A
AJMP J5
J4: MOV A, R3
MOV R0, A
MOV A, 2CH
MOV @R0,A ;顯示字符
J5: MOV A,R2 ;移位
RL A
MOV R2, A
INC R1
MOV A, R2
JB 0E0H, J6
AJMP DIS1
J6: AJMP DIS
ORG0200H ;定時器子程序
CT: MOV 8CH, #3CH
MOV 8AH, #0BEH
PUSH 0D0H
PUSH 0E0H
PUSH 82H
PUSH 83H
MOV A, 2FH
INC A
MOV 2FH, A
CJNE A, #0AH, DONE;1/10
MOV 2FH, #00H
MOV A,36H ;1秒
CPL A
MOV 36H,A
MOV A,35H ;1秒
INC A
MOV 35H, A
CJNE A, #0AH, DONE
MOV 35H, #00H
MOV A,34H ;10秒
INC A
MOV 34H, A
CJNE A, #06H, done
MOV 34H, #00H
MOV A,33H ;分
INC A
MOV 33H, A
CJNE A, #0AH,DONE
MOV 33H, #00H
MOV A,32H ;十分
INC A
MOV 32H, A
CJNE A, #06H, DONE
MOV 32H, #00H
MOV R0, #31H;時
ACALL GIA1
MOV R0, #30H;10時
MOV A, @R0
INC R0
SWAP A
ADD A, @R0
MOV 2DH, A
CJNE A, #24H, DONE
CLR A
MOV 30H, A
MOV 31H, A
QC:; CLR P3.0
DONE: NOP
POP 83H
POP 82H
POP 0E0H
POP 0D0H
RETI
X: MOV R0, #3BH
ACALL GIA1
MOV R0, #3FH
ACALL GIA1
MOV R0,#37H ;天
MOV A, @R0
INC A
MOV @R0, A
CJNE A, #09H, XQ
MOV A, #01H
MOV @R0, A
XQ: CJNE A, #07H, XQ1
INC A
MOV @R0, A
XQ1: nop
RHB:MOV R0, #47H
ACALL GIA1
MOV R0, #46H
MOV A, @R0
INC R0
SWAP A
ADD A, @R0
MOV 2BH, A
YHB:MOV R0, #44H
MOV A, @R0
INC R0
SWAP A
ADD A, @R0
MOV 2AH, A
CJNE A, #02H, XY
NHB:MOV R0,#42H
MOV A, @R0
INC R0
SWAP A
ADD A, @R0
MOV 0F0H, #04H
DIV AB
MOV A, 0F0H
JNZ PY
MOV A, 2BH
CJNE A, #30H, FH
AJMP QLFH
XY: MOV A, 2AH
CJNE A, #04H, XY1
AJMP 01E4H
XY1:CJNE A, #06H, XY2
AJMP XY4
XY2:CJNE A, #09H, XY3
AJMP XY4
XY3:CJNE A, #11H, DY
XY4:MOV A, 2BH
CJNE A, #31H, FH
AJMP QLFH
DY: MOV A, 2BH
CJNE A, #32H, FH
AJMP QLFH
PY: MOV A, 2BH
CJNE A, #29H, FH
QLFH:LJMP R
NOP
NOP
NOP
FH: LJMP SXI
JIAN: MOV A,R3
DEC R3
AJMP FHJ
JIAN2: MOV A,R3
XRL A,#44H
JNZ FHJ
DEC R3
DEC R3
DEC R3
DEC R3
FHJ: RET
JIA1: MOV A,R3
INC R3
AJMP JIA3
JIA2: MOV A,R3
XRL A,#3FH
JNZ JIA3
INC R3
INC R3
INC R3
INC R3
JIA3: RET
ORG 0330H
R: MOV A, #01H
MOV 47H, A
MOV A, #00H
MOV 46H, A
MOV R0, #45H
ACALL GIA1
MOV A, 2AH
CJNE A, #12H, FH1
MOV A, #01H
MOV 45H, A
MOV A, #00H
MOV 44H, A
NJ1:MOV A, 2AH
CJNE A, #12H, FH1
MOV A, 2BH
CJNE A, #32H, FH1
MOV R0, #43H
ACALL GIA1
FH1:LJMP DONE
ORG 0360H
SXI:MOV R0, #47H
MOV A, 2BH
MOV R4, A
ANL A, #0FH
MOV @R0, A
DEC R0
MOV A, R4
SWAP A
ANL A, #0FH
MOV @R0, A
LJMP DONE
ORG 0380H
DL: MOV R0, #30H
MOV A, @R0
INC R0
SWAP A
ADD A, @R0
MOV 2DH, A
MOV R0, #32H
MOV A, @R0
INC R0
SWAP A
ADD A, @R0
MOV 29H, A
MOV R4, #1BH
MOV DPTR, #0500H
MOV A, #00H
DL1:MOVC A, @A+DPTR
CJNE A, 2DH, DL2
INC DPTR
MOV A,#00H
MOVC A, @A+DPTR
CJNE A, 29H, DL3
AJMP DL4
DL2:INC DPTR
DL3:INC DPTR
MOV A, #00H
DJNZ R4, DL1
AJMP DL5
DL4:SETB P2.0
ACALL DELAY
DL5:RET
; 鍵盤掃描處理子程序
ORG0400H
JPCL: ORL P3,#08H ;因P3口復(fù)用,既作數(shù)碼管的段選,又作遙控接收,
JP: JNB P3.3,YS2 ;為檢測紅外線接收頭有無信號,必須使P3.3=1.
clr p3.3
AJMP J0 ;無信號輸入轉(zhuǎn)移
YS2: ANL P1,#00H ;否則關(guān)顯示,位選信號為0
CLR A
MOV 48H, A
MOV R0,#48H ;遙控數(shù)據(jù)存儲指針
MOV R6, #1EH
S0: MOV 8DH,#00H ;定時器1時間常數(shù)
MOV 8BH, #00H
S1: JB 0B3H,JP ;若50微秒內(nèi)P3.3變高則返回,正常解碼信號持續(xù)低電平應(yīng)大于50微秒.
SETB TR1 ;是解碼信號,準(zhǔn)備啟動定時器1(為高時啟動),
S2: JNB 0B3H,S2 ;等待變高,如果是干擾信號,很快消失而變高.
S3: MOV A,TH1 ;如果高電平持續(xù)時間太長,則是干擾信號,超過FE,則返回.
XRL A,#0FEH
JZ J0
JB 0B3H,S3 ;等待再次變低.
CLR TR1 ;再次變低后,高脈沖寬度測量完畢,應(yīng)關(guān)閉定時器.
MOV A,8DH ;讀數(shù)據(jù)
JZ S4 ;譯碼
MOV A, #80H
ADD A, @R0
MOV @R0, A
S4: MOV A, @R0
RL A
MOV @R0, A
NOP
DJNZ R6, S0
MOV A, 48H
MOVC A, @A+DPTR
ANL A, #0FH
MOV 2CH, A
ACALL DELAY2
ACALL DELAY2
SETB TR0
SUBB A,#0AH
JNCS5 ;是功能鍵轉(zhuǎn)移
MOV A,R3 ;是數(shù)字鍵寫顯示
MOV R0, A
MOV A, 2CH
MOV @R0, A
MOVR7,#00H ;清閃動標(biāo)志
MOV 50H,#00H ;置確定標(biāo)志,
AJMP DIS
S5: LJMP AN
NOP
JJ6: JNB 0B1H, JJ6
ACALL DELAY2
MOV A, R3
MOV R0, A
MOVC A, @A+DPTR
XRL A, @R0
JNZ J7
AJMP G1
J7: INC @R0
G1: CLR A
MOV R7, A
AJMP J00
J8: JNB 0B2H, J8
ACALL DELAY2
MOV A, R3
MOV R0, A
MOV A, @R0
XRL A, #00H
JNZ J9
AJMP G0
J9: DEC @R0
G0: CLR A
MOV R7, A
AJMP J00
J: JNB 0B4H, J
ACALL DELAY2
MOV A, #01H
MOV R7, A
MOV A, R3
XRL A, #48H
JNZ JJ4
MOV R3, #2FH
JJ4: INC R3
MOV A, R3
MOV R0, A
MOV 2CH, @R0
J00: ACALL DELAY2
J0: CLR TR1
SETB TR0
J01: LJMP SHAN
ORG0500H ;打鈴時間
DB06,30H,06,00,06,15H,07,15H,07,40H,07,45H,08,30H,08,40H,09,25H
DB09,50H,10H,35H,10H,45H,11H,30H,12H,30H,13H,30H
DB13H,40H,13H,45H,14H,30H,14H,40H,15H,25H,16H,30H,17H,00H
DB18H,00,18H,45H,20H,20H,21H,00,21H,10H
ORG 0550H
DB00,08,05,04,00,00,00,04;p2
DB00,00,00,01,00,00,00,01;p0
DB01,09,09,08,00,07,01,06;p3
ORG 0600H
SIO: MOVA,#20H
MOV R0,#20H
MOV 89H,A
MOV 8DH,#0F3H
SETB 0BCH
SETB 0AFH
CLR 0ABH
SETB 8EH
SETB 0ACH
MOV A,#50H
MOV 98H,A
RET
SI: MOV DPTR,#0700H
CLR 98H
MOV A,99H
MOVC A,@A+DPTR
MOV R2,A
MOV A,R7
XRL A,#01H
JZ SI1
MOV A,R2
MOV @R0,A
MOV R7,#01H
AJMP SI2
SI1: MOVA,@R0
SWAP A
ADD A,R2
MOV @R0,A
INC R0
MOV R7,#00H
SI2: RETI
SO: CLR 99H
MOV A,99H
MOV @R0,A
RETI
ORG 0700H;數(shù)碼管段編碼
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH
DB 8EH,0CEH,00
ORG 0712H
DELAY: MOV R5, #88H
DEL: NOP
DJNZ R5, DEL
RET
DELAY1: MOV R6, #10H
DELA: ACALL DELAY
DJNZ R6, DELA
RET
DELAY2: MOV R6, #0FFH
DE: ACALL DELAY
DJNZ R6,DE
RET
ORG 0730H
DB00,01,02,03,04,05,06,07,08,09,09,09,09,09,09,09,02,0AH,0BH,0CH,0DH,0EH,0FH,09
ORG 0748H
GIA1: MOV R1, #04H
GIA2: MOV A, @R0
GIA: INC A
MOV @R0, A
CJNE A, #0AH, GIA3
CLR A
MOV @R0, A
DEC R0
DJNZ R1, GIA2
GIA3: RET
ORG 0761H
DB02H,00H, 00H,00H, 06H,0EH,00H, 0AH,04H,00H,0DH,00H,08H,00H,00H,00H
DB01H,00H, 09H,0BH,05H,00H,00H,00H,03H,00H,0CH,00H,07H,0FH
ORG 07A0H
DB0AH,03H,00H,07H,09H,01H,0CH,05H,04H,0BH,08H,00H,02H,00H,06H,0DH
ORG 07B0H
DB00H,07H,0AH,03H,0CH,05H,09H,01H,08H,00H,04H,0BH,06H,0DH,02H,00H
ORG 07C0h
DD: MOV R2,#0FEH
MOV R1,#0FEH
CC: MOV A,R1
MOV P1,A
MOV P0,A
MOV P3,A
MOV A,R2
MOV P2,A
MOV R6,#50H
BB: MOV R5,#0FFH
AA:NOP
DJNZ R5,AA
DJNZ R6,BB
MOV A,R1
RL A
MOV R1,A
JB 0E0H,CC
MOV A,R2
RL A
MOV R2,A
JNB 0E0H,CC
RET
;讀實時時鐘實時數(shù)據(jù)寄存器子程序
;功能:從實時時鐘讀入當(dāng)前時間數(shù)據(jù) |
;入口:NONE
;出口:接收數(shù)據(jù)放在年、月、日、星期、時、分、秒各寄存器
;影響資源:A,R0,R3,TIMETX,TIMERX,YEAR,MONTH,DAY,WEEK,HOUR,MINUTE,SECOND |
READ_TIME:
RDTIME_LOOP:
LCALL IICSTART
JB FLAG.1,ERR_IICSTOP ;如SDA線被箝位為低電平則退出
MOV TIMETX,#65H ;發(fā)送讀時鐘數(shù)據(jù)命令
LCALL SENDH_L
JB FLAG.0,ERR_IICSTOP ;ACK信號不正常則退出.
MOV R0,#YEAR
MOV R3,#07H
RDTIME1:
LCALL RXL_H
MOV A,TIMERX
MOV @R0,A
INC R0
DJNZ R3,RDTIME2 ;讀完一個字節(jié)數(shù)據(jù)后確認數(shù)據(jù)傳輸
JMP RDTIME3 ;若為最后一個字節(jié)數(shù)據(jù)則為NOACK
RDTIME2:
CALL ACK
JMP RDTIME1
RDTIME3:
CALL NOACK
LCALL IICSTOP
CLR HOUR.7 ;小時的最高位在24小時制時沒有用,如果是12小時制請刪掉此行.
RDTIME_RET:
RET
ERR_IICSTOP:
LCALL IICSTOP
RET
ACK: CLR TIMETEMP.1
LCALL BITOUT
RET
NOACK: SETB TIMETEMP.1
LCALL BITOUT
RET
;保存錯誤代碼
;功能:保存MCU與IIC接口通信時的錯誤狀態(tài) |
;入口:TIMETEMP.0=ACK位縉? |
;出口:FLAG.0=錯誤代碼 |
ACK_ERR:
JNB TIMETEMP.0,ACK_ERR_RET ;檢查ACK信號是否正常
SETB FLAG.0 ;置ACK出錯標(biāo)志位
ACK_ERR_RET:
RET
;啟用IIC總線
;功能:開啟實時時鐘的IIC總線
;入口:NONE 出口:NONE
;影響資源:NONE
IICSTART:
CLR FLAG.1
SETB SDA
SETB SCL
LCALL DELAY3
JB SDA,IIC_SDAHI
SETB FLAG.1
IIC_SDAHI:
CLR SDA
LCALL DELAY3
CLR SCL
LCALL DELAY3
RET
;關(guān)閉IIC總線
;功能:關(guān)閉實時時鐘IIC總線
;入口:NONE 出口:NONE
;影響資源:NONE
IICSTOP:CLR SDA
SETB SCL
LCALL DELAY3
SETB SDA
LCALL DELAY3
RET
;短延時子程序
;功能:延時 入口:NONE 出口:NONE
;影響資源:R7,PSW
DELAY3: MOV R7,#05H ;此延時至少10us,
DELAY5: NOP
DJNZ R7,DELAY5
RET
LONGDELAY: ;DELAY 300MS
MOV R6,#240
LD0: MOV R7,#250 ;5*250*240
LD1: NOP
NOP
NOP
DJNZ R7,LD1
DJNZ R6,LD0
RET
;發(fā)送一個字節(jié),由高位到低位發(fā)送
;功能:從MCU發(fā)送一個字節(jié)給實時時鐘,由高位到低位發(fā)送
;入口:發(fā)送數(shù)據(jù)放在TIMETX 出口:NONE
;影響資源:A,R2,TIMETX
SENDH_L:MOV A,TIMETX
MOV R2,#08H
CLR FLAG.0
SENDH_L1:
MOV C,ACC.7
MOV TIMETEMP.1,C
LCALL BITOUT
RL A
DJNZ R2,SENDH_L1
LCALL BITIN
LCALL ACK_ERR
RET
;發(fā)送一個字節(jié),由低位到高位發(fā)送
;功能:從MCU發(fā)送一個字節(jié)給實時時鐘,由低位到高位發(fā)送
;入口:發(fā)送數(shù)據(jù)放在TIMETX 出口:NONE
;影響資源:A,R2,TIMETX
SENDL_H:MOV A,TIMETX
MOV R2,#08H
CLR FLAG.0
SENDL_H1:
MOV C,ACC.0
MOV TIMETEMP.1,C
LCALL BITOUT
RR A
DJNZ R2,SENDL_H1
LCALL BITIN
LCALL ACK_ERR
RET
;接收一個字節(jié)
;功能:MCU從IIC總線接收一個字節(jié),MSB在前,LSB在后
;入口:NONE 出口:接收數(shù)據(jù)放在RXBUF中
;影響資源:A,R2,TIMEBIT,RXBUF
RXH_L: MOV R2,#08H
RXH_L1:LCALL BITIN
MOV C,TIMETEMP.0
MOV ACC.7,C
RLC A
DJNZ R2,RXH_L1
MOV TIMERX,A
RET
;接收一個字節(jié)
;功能:MCU從IIC總線接收一個字節(jié),LSB在前,MSB在后
;入口:NONE 出口:接收數(shù)據(jù)放在RXBUF中
;影響資源:A,R2,TIMEBIT,RXBUF
RXL_H: MOV R2,#08H
RXL_H1:LCALL BITIN
MOV C,TIMETEMP.0
RRC A
DJNZ R2,RXL_H1
MOV TIMERX,A
RET
;送出一位數(shù)
;功能:從MCU發(fā)送一位數(shù)給實時時鐘
;入口:發(fā)送位數(shù)放在EEPREM.1 出口:NONE
;影響資源:A,TIMETEMP
BITOUT:
MOV C,TIMETEMP.1
MOV SDA,C
LCALL DELAY3
SETB SCL
LCALL DELAY3
CLR SCL
LCALL DELAY3
RET
;讀入一位數(shù)
;功能:MCU從實時時鐘接收一位數(shù)
;入口:NONE 出口:接收位數(shù)放在TIMETEMP.0
;影響資源:A,TIMETEMP
BITIN:
SETB SDA
SETB SCL
LCALL DELAY3
MOV C,SDA
MOV TIMETEMP.0,C
CLR SCL
CLR SDA
LCALL DELAY3
RET
ORG 0900H
;狀態(tài)異常處理程序
;功能:在干擾嚴重的情況下,時鐘進入異常狀態(tài)的處理
;入口:NONE 出口:NONE
;影響資源: A,TIMETX
TIME_TESTMODE:
TIME_TESTMODE_LOOP:
LCALL IICSTART
JNB FLAG.1,TIME_TESTMODE_1
LJMP ERR_IICSTOP ;SDA線被箝位為低電平則退出
TIME_TESTMODE_1:
MOV TIMETX,#6EH ;發(fā)送測試模式結(jié)束命令,#6EH
LCALL SENDH_L
LCALL IICSTOP ;
JB FLAG.0,TIME_TESTMODE_LOOP;ACK信號不正常則重寫.
;
RET
;寫狀態(tài)寄存器程序
;功能:讀/寫實時時鐘狀態(tài)寄存器,對其進行設(shè)置
;入口:NONE 出口:NONE
;影響資源: A,TIMETX
TIMESTATUS_INT12:
LCALL IICSTART
JNB FLAG.1,TIME_SETMODE_1
LJMP ERR_IICSTOP ;SDA線被箝位為低電平則退出
TIME_SETMODE_1:
MOV TIMETX,#62H ;發(fā)送寫時鐘狀態(tài)寄存器命令
LCALL SENDH_L
JNB FLAG.0,TIME_SETMODE_2
LJMP ERR_IICSTOP ;ACK信號不正常則退出?
TIME_SETMODE_2:
MOV TIMETX,#40H ;24小時進制,
LCALL SENDL_H ;關(guān)閉/INT1及/INT2腳的輸出
LCALL IICSTOP ;
RET
END
|