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

📄 1.txt

📁 单片机定时程序
💻 TXT
字号:
;电脑时钟   文件名:clockBCD.ASM
;!开始执行程序前在监控状态,把时钟初值输入到时钟计数单元
;输入BCD码不要超过合理的时间范围!
;以下六个单元为显示缓冲单元
SECDISL   EQU    30H  ;秒的个位
SECDISH   EQU    31H  ;秒的十位
MINDISL   EQU    32H  ;分的个位
MINDISH   EQU    33H  ;分的十位
HOUDISL   EQU    34H  ;时的个位
HOUDISH   EQU    35H  ;时的十位
;以下四个单元为实时时钟计数单元
MSCONU    EQU    36H  ;毫秒计数单元
SECCONU   EQU    37H  ;秒计数单元
MINCONU   EQU    38H  ;分钟计数单元
HOUCONU   EQU    39H  ;小时计数单元
          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:     MOV    SP,#5FH    ;主程序
          MOV    TMOD,#01H  ;T0方式1,定时100毫秒
          MOV    TH0,#3CH
          MOV    TL0,#0B0H
          SETB   TR0
          SETB   ET0
          SETB   EA
M1:       ACALL  DISRDY     ;显示准备,把计数单元的值转换为显示缓冲器的值
          ACALL  DISPLAY    ;刷新显示,把显示缓冲单元的值送到LED显示器上
          SJMP   M1
;T0定时100毫秒中断服务子程序
T0INT:    PUSH   ACC
          MOV    TH0,#3CH       ;TO方式1,重新输入初值
          MOV    TL0,#0B0H
          MOV    A,MSCONU
          CJNE   A,#10,T01    ;100毫秒计数到十次否?
          MOV    MSCONU,#00H  ;到十次,毫秒计数单元清零
          MOV    A,#01H
          ADD    A,SECCONU    ;秒计数单元加1,BCD码加法
          DA     A
          MOV    SECCONU,A
          CJNE   A,#60H,T02   ;秒计数到60否?
          MOV    SECCONU,#00H ;到60秒,秒计数单元清零
          MOV    A,#01H
          ADD    A,MINCONU    ;分计数单元加1,BCD码加法
          DA     A
          MOV    MINCONU,A
          CJNE   A,#60H,T03   ;分计数到60否?
          MOV    MINCONU,#00H ;到60分,分计数单元清零
          MOV    A,#01H
          ADD    A,HOUCONU    ;时计数单元加1,BCD码加法
          DA     A
          MOV    HOUCONU,A
          CJNE   A,#24H,T04    ;时计数到24否?
          MOV    HOUCONU,#00H ;到24小时,时计数单元清零
          SJMP   T05
                              ;如有日期、星期在此处给相应的单元加1
T01:      INC    MSCONU       ;100毫秒计数未到十次,相应单元加1
          SJMP   T05
T02:      MOV    A,#01H
          ADD    A,SECCONU      ;秒计数未到60次,相应单元加1
          DA     A
          MOV    SECCONU,A
          SJMP   T05
T03:      MOV    A,#01H
          ADD    A,MINCONU      ;分计数未到60次,相应单元加1
          DA     A
          MOV    MINCONU,A
          SJMP   T05
T04:      MOV    A,#01H
          ADD    A,HOUCONU      ;时计数未到24次,相应单元加1
          DA     A
          MOV    HOUCONU,A
T05:      POP    ACC
          RETI
;把计数单元的值分解为两BCD码,同时计数数据送入显示缓冲区,
DISRDY:   MOV    R0,#SECDISL
          MOV    R1,#SECCONU
          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
          DJNZ   R2,DR1
          RET
;显示缓冲区的内容送到数码显示器上显示,执行时间约6毫秒
DISPLAY:  MOV    R0,#SECDISL
          MOV    R1,#0DCH   ;0DCH:字形口地址,ODDH:字位口地址
          MOV    R2,#6      ;共六个字节
          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,#15        ;延时子程序,约15毫秒
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             ;返回
          END


⌨️ 快捷键说明

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