⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 定时器3.asm

📁 定时报警器汇编源程序
💻 ASM
字号:
Timecount    EQU 40H;记时一秒循环20次的记数标志
FLAG         EQU 41H;高低位片选的标志
SETFLAG      EQU 42H;设置键的标志
PreCious     EQU 43H;按键的缓冲内容
KEYFLAG      EQU 44H;按键去抖的参考变量
BUF1         EQU 45H;高位显示数字的偏移量
BUF0         EQU 46H;低位显示数字的偏移量

ORG 0000H
AJMP START;主程序

ORG 000BH
AJMP TIMEINTTF0;定时器0的中断服务子程序

ORG 001BH
LJMP TIMEINTTF1;定时器1的中断服务子程序

ORG 0050H

START:MOV BUF1,#09H
      MOV BUF0,#09H
      MOV FLAG,#00H
      MOV TIMECOUNT,#00H
      MOV SETFLAG,#00H
      MOV KEYFLAG,#0DH
      MOV PreCious,#0FFH
                            ;变量初始化
      MOV TMOD,#11H         ;选择定时器,工作模式
      MOV SP,#60H
      MOV IE,#00H
      MOV TL1,#0B0H
      MOV TH1,#3CH
      MOV TL0,#0EFH
      MOV TH0,#0CFH         ;定时器初值
      SETB EA
      SETB ET1
      SETB ET0
      SETB TR0
      SETB TR1               ;开中断
      SETB P2.6
LOOP:MOV DPTR,#BCD           ;主循环
     LCALL BCDDISPLAY        ;数码管显示
     MOV R7,PreCious
     LCALL KEYCHECK          ;键盘查询
SJMP LOOP


BCDDISPLAY:                  ;数码管动态显示子程序
           PUSH PSW
           MOV PSW,#18H
           MOV A,BUF0
           MOVC A,@A+DPTR
           MOV R0,A
           MOV A,BUF1
           MOVC A,@A+DPTR
           MOV R1,A
           MOV A,FLAG
           JZ C00
           MOV A,R0
           MOV P0,A
           SETB P2.5
           CLR P2.4
           SJMP C01          ;显示高位
       C00:MOV A,R1
           MOV P0,A
           SETB P2.4
           CLR P2.5          ;显示低位
       C01:POP PSW
           RET

KEYCHECK:                    ;键盘查询子程序
         CJNE R7,#0EH,C011   ;K1是否按下(暂停键)
         CPL TR1
	 MOV R7,#00H
         RET
    C011:MOV R7,PreCious
         CJNE R7,#0DH,C014   ;K2是否按下(设置键)
         INC SETFLAG
	 MOV PRECIOUS,#0FH
         MOV R1,#SETFLAG
         MOV A,@R1
         JZ C015
         CJNE @R1,#03H,C012  ;K2按3次,SETFLAG返回初值
         MOV SETFLAG,#00H
         SJMP C015
    C012:CJNE @R1,#01H,C013   ;高位显示内容
         MOV R1,#BUF1
         SJMP C014
    C013:CJNE @R1,#02H,C014   ;低位显示内容
         MOV R1,#BUF0
    C014:MOV A,SETFLAG
         JZ C015
         LCALL TIMESET        ;时间设置
         LCALL BcdDisplay     ;数码管显示
         SJMP C011
    C015:RET

TIMESET:                      ;时间设置子程序
        CJNE R7,#0BH,C031     ;K3是否按下(上)
        INC @R1               ;显示内容加1
        MOV PRECIOUS,#0FH
        MOV A,@R1
        CJNE A,#0AH,C032      ;加到9返回0
        MOV @R1,#00H
        SJMP C032
   C031:CJNE R7,#07H,C032     ;K4是否按下(下)
        DEC @R1               ;显示内容减1
        MOV PRECIOUS,#0FH
        MOV A,@R1
        CJNE A,#0FFH,C032     ;减到0返回9
        MOV @R1,#09H
   C032:SETB P2.6
        SETB TR1
        RET


TIMEINTTF1:PUSH PSW
          PUSH ACC
          MOV TL1,#0B0H
          MOV TH1,#3CH        ;重装初值
          INC TIMECOUNT
          MOV A,TIMECOUNT
          CJNE A,#14H,C045    ;计时20次,到达1秒钟
          MOV TIMECOUNT,#00H  ;置0,进行下次计时1秒
          MOV A,SETFLAG
          CJNE A,#00H,C045    ;判断是否在计时状态
          MOV A,BUF0
          JZ C043             ;低位减到0,转
          DEC BUF0            ;时间显示减1秒
          SJMP C045
     C043:MOV A,BUF1          
          JZ C044             ;高位也减到0,转
          DEC BUF1            ;高位减1
          MOV BUF0,#09H       ;低位变9
          SJMP C045
     C044:MOV BUF0,#00H
          MOV BUF1,#00H
          CLR P2.6            ;计时时间到,LED灯亮
	  CLR TR1             ;计时停止
     C045:POP ACC
          POP PSW
	  RETI

     
TIMEINTTF0:PUSH PSW
           PUSH ACC
           MOV PSW,#10H
	   MOV TL0,#0efH
           MOV TH0,#0cfH      ;重装初值
      C050:MOV A,FLAG
           CPL A
           MOV FLAG,A
           MOV A,P2
           ANL A,#0FH
           MOV R7,A
           DEC KEYFLAG
           MOV A,KEYFLAG
           JNZ C052
	   MOV KEYFLAG,#0DH    ;延时判断2次
           MOV A,P2
           ANL A,#0FH
           XRL A,R7
           JNZ C052
           MOV PreCious,R7     ;按键去抖动
      C052:POP ACC
           POP PSW
           RETI


BCD: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H    ;数码管显示代码
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -