正文

51单片机 0~99S 正倒计时秒表(汇编)2013-12-20 20:38:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/enc999/54366.html

分享到:

;0~99S正倒计时。倒计时初始可99S内任设 ;时间到,蜂鸣3S。 ;E:\DPJ\0~99S倒计时\0~99可设定正倒计时\0~99可设定正倒计时.ASM STRT EQU P2.2 P_S  EQU P2.3 CLRR EQU P2.4 CDWN EQU   P2.5 ADJH EQU P2.6 ADJL EQU P2.7   ORG 00H AJMP MAIN ORG 0BH AJMP T0INT     ORG 30H MAIN:  MOV SP,#60H MOV DPTR,#TAB MOV TMOD,#01H ;T0定时方式1 SETB EA SETB ET0 MOV TH0,#3CH ;50ms定时常数 MOV TL0,#0B0H MOV   R0,#20  ;20x50mS=1S   MAIN1: ACALL ALARM  ;调用报警子程序 k1:     ;按键检测子程序开始键 LCALL DISP  JB STRT,K2 ACALL DISP JNB STRT,$-2 AJMP START k2:     ;暂停键 JB P_S,K3 LCALL DISP JNB P_S,$-3 AJMP PAUSE K3:     ;清零键  JB CLRR,K4 LCALL DISP JNB CLRR,$-3  AJMP CLEAR K4:     ;倒计时键  JB CDWN,K5 ACALL DISP JNB CDWN,$-2 AJMP CDOWN K5:     ;倒计时设定十位 JB 7EH,K51 AJMP MAIN1 K51: JB ADJH,K6 ACALL DISP JNB ADJH,$-2 AJMP SHINC K6:     ;倒计时设定个位 JB 7EH,K61 AJMP  MAIN1 K61: JB ADJL,MAIN1 ACALL DISP JNB ADJL,$-2 AJMP SLINC START:  SETB TR0 CLR 7DH       ;开始后此标志清0 ,跳过显示子程序的设定部分 MOV R3,#3   ;蜂鸣3S AJMP K1   PAUSE:  CLR TR0 AJMP K2 CLEAR:  CLR     TR0 MOV R4,#0 AJMP K3 CDOWN: SETB 7EH   ;倒计标志,作倒计减1计数用 SETB 7DH   ;倒计标志,作倒计设定显示用 AJMP K4 SHINC: INC 23H   ;23H为设定值十位缓存 MOV A,23H CJNE A,#10,K5 MOV 23H,#0 AJMP K5 SLINC: INC 22H   ;22H为设定值个位缓存 MOV A,22H CJNE A,#10,K6 MOV 22H,#0 AJMP K5 ALARM: JB 7FH,ALARM0     ;7FH为时间到标志,RAM内存2FH的D7位 AJMP ALARMRT     ;时间未到,跳出报警 ALARM0: CPL P1.0 ACALL DISP   ;利用显示子程序延时约2ms求反,产生250H的方波。 AJMP ALARM ALARMRT: RET T0INT:  MOV TH0,#03CH; ;定时中断子程序。重装定时常数 MOV TL0,#0B0H; DJNZ R0,T0INTR ;50msX20=1S,未满20次,跳出中断子程序 MOV R0,#20 JNB 7FH,T0INT00 ;时间未到转T0INT00 DJNZ R3,T0INTR   ;未到3 S 跳出中断子程序 CLR 7FH                ;3 S时间到,清计时时间到标志 CLR TR0    ;关定时器 AJMP T0INTR          ;跳出中断 T0INT00: JNB 7EH,T0INT0   ;7EH为倒计时标志,1为倒计时 DEC R4     ;=1,R4-1 CJNE    R4,#0,T0INTR  CLR 7EH                SETB 7FH     ;时间到标志 AJMP T0INTR T0INT0: INC R4 CJNE R4,#99,T0INTR SETB 7FH   ;时间到标志 T0INTR: RETI   DISP:  JNB 7DH,DISP1 MOV 20H,22H  ;22H存设定个位 MOV 21H,23H ;23H存设定十位 MOV A,23H   MOV B,#10 MUL AB ADD A,22H MOV R4,A DISP1: MOV  A,R4 MOV  B,#10 DIV  AB         ;当前值除以10 MOV  20H,A      ;得出的商送给十位 MOV  21H,B      ;得出的余数送给个位        MOV  A,20H      ;十位显示 MOVC A,@A+DPTR MOV  P0,A SETB P2.1 LCALL DELAY CLR  P2.1   MOV  A,21H      ;个位显示 MOVC A,@A+DPTR MOV  P0,A SETB P2.0 LCALL DELAY CLR P2.0 RET DELAY:   ;误差 0us MOV R6,#10 DL0: MOV R5,#50 DJNZ R5,$ DJNZ R6,DL0 RET TAB:   DB  0C0H,0F9H,0A4H,0B0H,99H      ;共阳极0-9显示代码 DB  92H,82H,0F8H,80H,90H      END

阅读(3930) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册