LJMP MAIN;跳到主程序MAIN
ORG 000BH;外部中斷INT0程序的地址,此為規定的
LJMP INTT0;跳到外部中斷INTT0程序
ORG 001BH;外部中斷INT1程序的地址,此也為規定的
LJMP INTT1;跳到外部中斷INTT1程序
ORG 0100H;主程序MAIN地址
MAIN: MOV SP,#60H;給堆棧指針SP附內部數據存儲器地址60H
MOV 31H,#0;給31H地址內清零即(31H)=0
MOV 20H,#0FEH ;(20H)=11111110B
MOV 21H,#0FFH;(21H)=11111111B
MOV P1,20H;P1=11111110B
LCALL SHEZHI1;調用程序段SHEZHI1
MOV 20H,#0FDH;(20H)=11111101B
MOV P1,20H;P1=11111101B
MOV 40H,#10;(40H)=0AH
SETB EA;開總中斷
SETB ET0;開定時中斷T0
MOV TMOD,#11H;設置T0工作於定時方式1
MOV TH0,#3CH;定時初值設置高位
MOV TL0,#0B0H;定時初值設置低位
SETB TR0;允許T0中斷
LL: LCALL KEY;調用KEY
LCALL KEYC;調用KEYC
SJMP LL;循環調用回LL
INTT0: PUSH ACC;將ACC值壓棧
PUSH PSW;將PSW值繼續壓棧
SETB RS1;RS1位置1
SETB RS0;RS0位置1,即選中內部數據存儲器組的3組
DJNZ 40H,DOWN;判斷十次結束否?且計數值自減壹,若沒有夠十次,則轉入程序DOWN , 否則順序執行
MOV 40H,#10;繼續在(40H)存入計數值十
MOV R0,#41H;(R0)=41H
MOV A,@R0 ; 判秒是否到60
ADD A,#1;A中值加壹
DA A;十進制調整
MOV @R0,A;再送回原單元
CLR C;清進位位
SUBB A,#60H;與60相減
JC DOWN;通過判斷進位位看是否到60了,沒到就去DOWN,到了就順序執行
MOV @R0,#0;41H單元清零
INC R0;地址自加壹
MOV A,@R0 ; 判分是否到60
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#60H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0 ; 判時是否到24
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#24H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0 ; 判日是否到指定天數
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
MOV R4,A ;月份送R4,本月天數送R5
JNB ACC.4,NEXT2
CLR C
SUBB A,#06H
NEXT2: MOV DPTR,#DAYTAB
DEC A
MOVC A,@A+DPTR
MOV R5,A
CJNE R4,#2,NEXT
JNB 08H,NEXT1
NEXT: INC R5
NEXT1: DEC R0
MOV A,R5
CLR C
SUBB A,@R0
JNC DOWN
MOV @R0,#1
INC R0
MOV A,@R0 ; 判月是否到13
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#13H
JC DOWN
MOV @R0,#1
INC R0
MOV A,@R0 ; 判年低位是否到00
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADDC A,#0
DA A
MOV @R0,A
DOWN: MOV A,#42H
CJNE A,4EH,DOWN2
MOV A,#43H
CJNE A,4FH,DOWN2
CLR 07H
DOWN2: JB 06H,DOWN4
DOWN4: CLR TR0
MOV A,#0B7H
ADD A,TL0
MOV TL0,A
MOV A,#3CH
ADDC A,TH0
MOV TH0,A
SETB TR0
POP PSW
POP ACC
RETI
DAYTAB: DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H