谁有时间帮我加个注释啊 呵呵 看了很久 看不太懂<br />ORG 0000H <br /><br />AJMP MAIN <br /><br />ORG 000BH <br /><br />LJMP CONT <br /><br />ORG 0100H <br /><br />SECBIT EQU 08H <br /><br />MINBIT EQU 09H <br /><br /> HOURBIT EQU 0AH <br /><br /> ASECBIT EQU 0BH <br /><br />AMINBIT EQU 0CH <br /><br />AHOURBIT EQU 0DH <br /><br />DISP0 EQU 30H <br /><br />DISP1 EQU 31H <br /><br />DISP2 EQU 32H <br /><br />DISP3 EQU 33H <br /><br />DISP4 EQU 34H <br /><br />DISP5 EQU 35H <br /><br />TDATA EQU 36H <br /><br />ATDATA EQU 37H <br /><br />HOUR EQU 3CH <br /><br />MIN EQU 3DH <br /><br />SEC EQU 3EH <br /><br />MSEC EQU 3FH <br /><br />AHOUR EQU 40H <br /><br /> AMIN EQU 41H <br /><br /> ASEC EQU 42H <br /><br /> F1 BIT PSW.1 <br /><br /> MAIN:MOV SP,#60H ;主程序初始化 <br /><br /> MOV P3,#0FFH <br /><br /> MOV R7,#13H <br /><br /> MOV R0,#30H <br /><br /> CLR A <br /><br /> LOOP:MOV @R0,A <br /><br /> INC R0 <br /><br /> DJNZ R7,LOOP <br /><br /> MOV 21H,#00H <br /><br /> CLR F1 <br /><br /> MOV TMOD,#01H <br /><br /> MOV TL0,#0B0H <br /><br /> MOV TH0,#3CH <br /><br /> SETB TR0 <br /><br /> SETB EA <br /><br /> SETB ET0 <br /><br /> MOV B,#HOUR <br /><br /> BEGIN:LCALL KS <br /><br /> JNZ RTEST <br /><br /> LCALL DISPLAY <br /><br /> JNB F1,BEGIN <br /><br /> LCALL ALARM <br /><br /> AJMP BEGIN <br /><br /> RTEST:LCALL DISPLAY <br /><br /> LCALL KS <br /><br /> JZ BEGIN <br /><br /> LCALL SERCH <br /><br /> CJNE A,#00H,N1 ;五个功能键,第一个是设置时钟 <br /><br /> LCALL PR0 <br /><br /> AJMP BEGIN <br /><br /> N1:CJNE A,#01H,N2 ;是设置闹钟键 <br /><br /> LCALL PR1 <br /><br /> AJMP BEGIN <br /><br /> N2:CJNE A,#02H,N3 ;是加一功能键 <br /><br /> LCALL PR2 <br /><br /> AJMP BEGIN <br /><br /> N3:CJNE A,#03H,N4 ;是确定按钮吗? <br /><br /> LCALL PR3 <br /><br /> AJMP BEGIN <br /><br /> N4:CJNE A,#04H,N5 ;是清闹钟到时的二极管 <br /><br /> LCALL PR4 <br /><br /> N5:SJMP BEGIN <br /><br /> <br /><br /><br />--------------------------------------------------------------------------------<br /><br /> DISPLAY:PUSH PSW ;显示子程序 <br /><br /> PUSH ACC <br /><br /> SETB RS0 <br /><br /> MOV R0,#DISP0 <br /><br /> MOV R7,#03H <br /> MOV R1,B <br /> SEPA1:MOV A,@R1 ; 拆字子程序<br /> LCALL SEPA <br />INC R1 <br />DJNZ R7,SEPA1<br /> MOV R0,#DISP0<br /> MOV R7,#06H <br />MOV R6,#20H <br />MOV R5,#00H <br />DISP:MOV DPTR,#TAB<br /> MOV A,@R0 <br />MOVC A,@A+DPTR<br /> MOV P0,A <br />MOV A,R6 <br />MOV P2,A <br />SETB P2.7<br /> HERE:DJNZ R5,HERE <br />HERE1:DJNZ R5,HERE1<br /> RR A<br /> MOV R6,A <br />INC R0<br /> DJNZ R7,DISP <br />CLR RS0<br /> POP ACC<br /> POP PSW<br /> RET <br />SEPA:MOV 44H,A <br />ANL A,#0F0H <br />SWAP A <br />MOV @R0,A <br />INC R0 <br />MOV A,44H <br />ANL A,#0FH <br />MOV @R0,A<br /> INC R0<br /> RET<br /><br />--------------------------------------------------------------------------------<br /><br /> TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H <br /><br />--------------------------------------------------------------------------------<br /><br />ALARM:MOV A,ASEC ;闹钟判别程序 <br />CJNE A,SEC,DONT<br /> MOV A,AMIN<br /> CJNE A,MIN,DONT<br /> MOV A,AHOUR<br /> CJNE A,HOUR,DONT<br /> CLR P1.0 <br />CLR F1 <br />DONT:RET<br /><br />--------------------------------------------------------------------------------<br /><br /> KS:MOV A,P3 ;键盘测试程序<br /> CPL A <br />ANL A,#1FH <br />RET<br /><br />--------------------------------------------------------------------------------<br /><br /> SERCH:JNB ACC.0,L1 ;寻找键值<br /> MOV A,#00H<br /> AJMP NEXT <br />L1:JNB ACC.1,L2<br /> MOV A,#01H<br /> AJMP NEXT <br />L2:JNB ACC.2,L3<br /> MOV A,#02H<br /> AJMP NEXT<br /> L3:JNB ACC.3,L4 <br />MOV A,#03H <br />AJMP NEXT<br /> L4:JNB ACC.4,BACK<br /> MOV A,#04H<br /> NEXT:PUSH ACC<br /> LK:LCALL KS <br />ACALL DISPLAY <br />JNZ LK<br /> LCALL KS <br />JNZ LK<br /> POP ACC <br />RET<br /><br />--------------------------------------------------------------------------------<br /><br /> BACK:AJMP BEGIN <br />PR0: CLR TR0 ;功能子程序 <br />CLR ASECBIT <br />CLR AMINBIT <br />CLR AHOURBIT<br /> MOV B,#HOUR <br />MOV ATDATA,#00H<br /> SETB SECBIT<br /> RET<br /><br />--------------------------------------------------------------------------------<br /><br /> PR1: CLR SECBIT <br />CLR MINBIT<br /> CLR HOURBIT<br /> MOV B,#AHOUR <br />MOV TDATA,#00H<br /> SETB ASECBIT<br /> RET<br /><br />--------------------------------------------------------------------------------<br /><br /> PR2: JNB SECBIT,CUM0 <br />MOV A,SEC <br />ADD A,#01H <br />DA A <br />MOV SEC,A<br /> CJNE A,#60H,CUMEND <br />MOV SEC,#00H<br /> LJMP CUMEND <br />CUM0:JNB MINBIT,CUM1 <br />MOV A,MIN <br />ADD A,#01H<br /> DA A <br />MOV MIN,A<br /> CJNE A,#60H,CUMEND<br /> MOV MIN,#00H<br /> LJMP CUMEND <br />CUM1:JNB HOURBIT,CUM2<br /> MOV A,HOUR <br />ADD A,#01H<br /> DA A <br />MOV HOUR,A<br /> CJNE A,#24H,CUMEND<br /> MOV HOUR,#00H<br /> LJMP CUMEND <br />CUM2:JNB ASECBIT,CUM3<br /> MOV A,ASEC <br />ADD A,#01H <br />DA A<br /> MOV ASEC,A<br /> CJNE A,#60H,CUMEND<br /> MOV ASEC,#00H <br />LJMP CUMEND<br /> CUM3:JNB AMINBIT,CUM4<br /> MOV A,AMIN <br />ADD A,#01H <br />DA A<br /> MOV AMIN,A <br />CJNE A,#60H,CUMEND<br /> MOV AMIN,#00H<br /> LJMP CUMEND <br />CUM4:JNB AHOURBIT,CUMEND<br /> MOV A,AHOUR<br /> ADD A,#01H<br /> DA A<br /> MOV AHOUR,A<br /> CJNE A,#24H,CUMEND<br /> MOV AHOUR,#00H<br /> LJMP CUMEND <br />CUMEND:RET<br /><br />--------------------------------------------------------------------------------<br /><br /> PR3:JB TR0,PPR3<br /> INC TDATA<br /> MOV A,TDATA <br />CJNE A,#01H,TWO1<br /> CLR SECBIT<br /> SETB MINBIT <br />LJMP BK0<br /> TWO1:CJNE A,#02H,BK1<br /> CLR MINBIT <br />SETB HOURBIT<br /> LJMP BK0 <br />BK1:MOV TDATA,#00H<br /> CLR HOURBIT<br /> SETB TR0 <br />LJMP BK0 <br />PPR3:INC ATDATA<br /> MOV A,ATDATA<br /> CJNE A,#01H,TWO2<br /> CLR ASECBIT<br /> SETB AMINBIT<br /> LJMP BK0<br /> TWO2:CJNE A,#02H,BK2 <br />CLR AMINBIT<br /> SETB AHOURBIT<br /> LJMP BK0 <br />BK2:MOV ATDATA,#00H <br />CLR AHOURBIT <br />SETB F1 MOV B,#HOUR<br /> BK0:RET <br /><br />--------------------------------------------------------------------------------<br /><br />PR4:SETB P1.0 <br />CLR F1<br /> RET<br /><br />--------------------------------------------------------------------------------<br /><br /> CONT:MOV TL0,#0B7H ;中断服务程序,即秒修改程序<br /> MOV TH0,#3CH <br />PUSH PSW <br />PUSH ACC <br />INC MSEC <br />MOV A,MSEC <br />CJNE A,#13H,DONE<br /> MOV MSEC,#00H <br />MOV A,SEC <br />ADD A,#01H <br />DA A<br /> MOV SEC,A <br />CJNE A,#60H,DONE<br /> MOV SEC,#00H<br /> MOV A,MIN <br />ADD A,#01H<br /> DA A <br />MOV MIN,A<br /> CJNE A,#60H,DONE<br /> MOV MIN,#00H<br /> MOV A,HOUR<br /> ADD A,#01H<br /> DA A<br /> MOV HOUR,A <br />CJNE A,#24H,DONE<br /> MOV HOUR,#00H <br />DONE:POP ACC <br />POP PSW <br />RETI<br /> END<br /> |
|