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

📄 电子时钟。3.asm

📁 电子时钟实例,但是还不够完美
💻 ASM
字号:
;选择定时器T0,方式一,定时一秒,50MS中断一次
;PA口送位码,PB口送段码
        SEC1 	  EQU 	30H       ; 秒存储器(个位)
        SEC10 	  EQU 	31H       ; 秒存储器(十位)
        MIN1 	  EQU 	32H       ; 分存储器(个位)
        MIN10 	  EQU 	33H       ; 分存储器(十位)
        HOU1 	  EQU 	34H       ; 时存储器(个位)
        HOU10 	  EQU 	35H       ; 时存储器(十位)
        SEC       EQU   41H       ; 秒计数器
        MIN  	  EQU 	42H       ; 分计数器
        HOU   	  EQU 	43H       ; 时计数器
        ORG 	  0000H
        LJMP 	  START
        ORG       0003H
        LJMP      INT0
        ORG 	  000BH
        LJMP 	  INT_T0
        ORG       0100H

START:
        MOV	  SP,#60H        ; 调整指针
        MOV	  R2,#20
        MOV	  SEC,#00H       ; 时间初始化为zz零
        MOV	  MIN,#00H
        MOV 	  HOU,#00H
        MOV       DPTR,#7F00H    ;赋初值选命令/状态寄存器
        MOV       A,#03H
        MOVX      @DPTR,A        ;定义PA,PB口为输出口

        ;MOV       DPTR,#7F02H
        ;MOV       A,#0FFH
        ;MOVX      @DPTR,A        ;关闭显示

        MOV   	  TMOD,#01H      ; 选择方式1
        MOV	  TH0,#3CH       ; 设置定时常数
        MOV	  TL0,#0B0H
        MOV       IE,#83H        ; 开中断
        SETB      IT0
        SETB	  ET0
        SETB	  TR0

MAIN:                            ; 读数据程序
        MOV 	  A,SEC          ; 读取秒数据,并把计数器的内容分为个位和十位
        MOV 	  B,#0AH
        DIV	  AB
        MOV 	  SEC10,A
        MOV 	  SEC1,B

        MOV 	  A,MIN          ; 读取分数据
        MOV 	  B,#0AH
        DIV 	  AB
        MOV 	  MIN10,A
        MOV 	  MIN1,B

        MOV  	  A,HOU          ; 读取小时数据
        MOV 	  B,#0AH
        DIV 	  AB
        MOV 	  HOU10,A
        MOV   	  HOU1,B

        ACALL 	  DISPLAY        ; 调用显示子程序
        LJMP 	  MAIN

DISPLAY:                         ; 显示子程序
        MOV 	  R0,#SEC1       ; 指向数据首址
        MOV   	  R3,#00000001B  ; 位码

DISP1:
        MOV       A,R3
        MOV       DPTR,#7F02H
        MOVX      @DPTR,A        ;送位码给PA口

        MOV       A,@R0
        MOV       DPTR,#TABLE
        MOVC      A,@A+DPTR
        MOV       DPTR,#7F01H
        MOVX      @DPTR,A        ;送段码给PB口

        ACALL     DELAY
        MOV       A,R3
        JB        ACC.5,EXIT2     ;判断六个数码管是否全部显示
        RL        A
        MOV       R3,A
        INC       R0
        AJMP      DISP1
EXIT2:
        RET

INT_T0:                           ;中断主程序
        PUSH 	  ACC
        PUSH      PSW
        MOV	  TH0,#3CH        ; 重装定时常数
        MOV       TL0,#0B0H
        DJNZ 	  R2,EXIT1        ; 判断1秒循环次数

        MOV       R2,#20
        INC 	  SEC             ; 秒值加1
        MOV 	  A,SEC
        CJNE	  A,#60,EXIT1     ; 判断60秒

        MOV	  SEC,#00H        ; 秒值清0
        INC 	  MIN             ; 分值加1
        MOV 	  A,MIN
        CJNE 	  A,#60,EXIT1     ; 判断60分

        MOV 	  MIN,#00H        ; 分值清0
        INC 	  HOU             ; 小时值加1
        MOV 	  A,HOU
        CJNE 	  A,#24,EXIT1     ; 判断24小时
        MOV   	  HOU,#00H

EXIT1:
        POP       PSW
        POP 	  ACC
        RETI

INT0:                            ;外部中断子程序
        PUSH 	  ACC
        PUSH      PSW
        MOV	  SEC,#16H       ; 时间初始化为222222
        MOV	  MIN,#16H
        MOV 	  HOU,#16H
        POP       PSW
        POP 	  ACC
        RETI


DELAY:                            ;2毫秒的廷时子程序
        MOV 	  R7,#10
DELAY1:
        MOV	  R6,#100
        DJNZ 	  R6,$
        DJNZ      R7,DELAY1
        RET

TABLE:  DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;位码0-9 共阳极
;TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H, 7FH,6FH    ;位码0-9 共阴极
;接线:8155      8031
;      12-19-----A0-A7
;      21-28-----a-h
;      29-34-----Y0-Y7
;          4-----RET
;          7-----A14
;          8-----A15
;          9-----RD
;         10-----WR
;         11-----ALE
;         20-----GND
;         40-----5V



⌨️ 快捷键说明

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