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

📄 2.txt

📁 定时器程序
💻 TXT
字号:
;电脑时钟   文件名:clockBCD.ASM
;!开始执行程序前在监控状态,把时钟初值输入到时钟计数单元
;输入BCD码不要超过合理的时间范围!
;以下六个单元为显示缓冲单元
SECDISL   EQU    30H  ;秒的个位
SECDISH   EQU    31H  ;秒的十位

;以下四个单元为实时时钟计数单元
MSCONU    EQU    36H  ;毫秒计数单元
SECCONU   EQU    37H  ;秒计数单元

          ORG    0000H
          AJMP   MAIN
          ORG    000BH
          AJMP   T0INT
DISTAB:   DB     0C0H,0F9H,0A4H,0B0H; 字型代码表
          DB     99H,92H,82H,0F8H
          DB     80H,90H,88H,83H
          DB     0C6H,0A1H,86H,8EH
          ORG    0030H
MAIN:SETB IT0
  MOV MSCONU,#00H ;毫秒计数单元
MOV P1,#0F0H
MOV SECCONU,#10
MOV R5,#01H
MOV    SP,#5FH    ;主程序
          MOV    TMOD,#01H  ;T0方式1,定时100毫秒
          MOV    TH0,#3CH
          MOV    TL0,#0B0H
          SETB   TR0
          SETB   ET0
          SETB EX0
          SETB   EA
M1:       ACALL  DISRDY    
 ;显示准备,把计数单元的值转换为显示缓冲器的值
          ACALL  DISPLAY  
  ;刷新显示,把显示缓冲单元的值送到LED显示器上
          SJMP   M1
;T0定时100毫秒中断服务子程序
          MOV    TH0,#3CH       ;TO方式1,重新输入初值
T0INT:    PUSH   ACC
          MOV    TL0,#0B0H
          MOV    A,MSCONU
          CJNE   A,#10,T01    ;100毫秒计数到十次否?
          MOV    MSCONU,#00H  ;到十次,毫秒计数单元清零
          DEC    SECCONU
          MOV A,SECCONU
          MOV B,#0AH
          DIV  AB
          SWAP A
          ANL A,#0F0H
          MOV @R0 ,A
          MOV A,B
          ANL A,#0FH
          ORL A,@R0
          MOV @R1,A 

          MOV A,SECCONU
      
          CJNE   A,#00H,T05   ;秒计数到0否?
          MOV A,R5
L1:       CJNE A,#04H,L2
          MOV SECCONU,#10
          MOV P1,#0F0H
          MOV P3,#0FFH
          MOV R5,#01H
          SJMP T05                                                  
L2:     MOV A,R5
          CJNE A,#01H,L3
          MOV SECCONU,#3
          MOV P1,#0F5H
          MOV P3,#0FEH
          MOV R5,#02H
          SJMP T05
L3:      MOV A,R5
          CJNE A,#02H,L4
          MOV SECCONU,#15
          MOV P1,#0FH
          MOV P3,#0FFH
          MOV R5,#03H
          SJMP T05
L4:      MOV SECCONU,#5
          MOV P1,#0AFH
          MOV P3,#0FDH
          MOV R5,#04H
          SJMP T05

                              ;如有日期、星期在此处给相应的单元加1
T01:      INC    MSCONU       ;100毫秒计数未到十次,相应单元加1
          SJMP   T05

T05:    
          POP    ACC
          RETI
;把计数单元的值分解为两BCD码,同时计数数据送入显示缓冲区,
DISRDY:   
          MOV    R0,#SECDISL
          MOV    R2,#3
DR1:      MOV    A,@R1
          ANL    A,#0FH
          MOV    @R0,A
          INC    R0
          MOV    A,@R1
          ANL    A,#0F0H
          SWAP   A
          MOV    @R0,A
          INC    R0
          INC    R1
          RET
;显示缓冲区的内容送到数码显示器上显示,执行时间约6毫秒
DISPLAY:MOV    R0,#SECDISL
          MOV    R1,#0DCH   ;0DCH:字形口地址,ODDH:字位口地址
          MOV    R2,#2      ;共2个字节
          MOV    R4,#01H    ;先显示低位,即字位初始码
          MOV    DPTR,#DISTAB;字形表首地址
DPY1:     MOV    A,@R0
          INC    R0
          MOVC   A,@A+DPTR
          MOVX   @R1,A      ;送显示字形码
          INC    R1         ;修正地址,指向字位口地址
          MOV    A,R4       ;R4中是字位码
          MOVX   @R1,A      ;送字位码
          DEC    R1         ;地址改回到字形口地址
          RL     A          ;准备显示下一位
          MOV    R4,A
          ACALL  DELAY      ;延时子程序
          DJNZ   R2,DPY1          
          RET
;延时自程序,约2毫秒
DELAY:    MOV    R6,#2      ;延时子程序,约2毫秒
DLY1:     DJNZ   R7,DLY1
          DJNZ   R6,DLY1
          RET
;LED上“8”循环显示程序
LED8:   MOV R0,#0DCH    ;指向字形口
        MOV A,#80H      ;确定字形代码
        MOVX @R0,A      ;输出字形代码
        MOV R1,#0DDH    ;指向字位口
        MOV A,#20H      ;从最高位开始
LEDO:   MOVX @R1,A      ;输出字位代码
        MOV R2,#20      ;确定延时常数
        ACALL DEYS      ;调延时子程序
        RL A            ;左移一位
        SJMP LEDO       ;循环演示
;========================
DEYS:   MOV  R7,#0FFH        ;延时子程序
DEY0:   DJNZ  R7,DEY0
        DJNZ R2,DEYS
        RET   
 N01:   PUSH ACC
       MOV SECCONU,#20    
       MOV A,SECCONU
       CJNE A, #00H,T06
T06:   MOV P1, #0F0H
       MOV P3,#0FFH
       MOV R5,#01H 
POP ACC
       CLR IE0
        RETI

          END

        

⌨️ 快捷键说明

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