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

📄 电子.asm

📁 电子时钟实例,但是还不够完美
💻 ASM
字号:
        HOUR    EQU  30H ;赋显示小时的单元地址值(用户区)
        MINUTE  EQU  31H ;赋显示分钟的单元地址值
        SECOND  EQU  32H ;赋显示秒钟的单元地址值
        BUF     EQU  40H ;显示缓冲区

        ORG     0000H
        AJMP    MAIN
        ORG     000BH ;定时器T0的入口
        AJMP    INT_T0
        ORG     0100H


MAIN:
         MOV    SP,       #60H
         MOV    TMOD,     #01H
         MOV    TH0,      #3CH
         MOV    TL0,      #0B0H
         SETB   TR0
         SETB   EA
         SETB   ET0

         MOV     DPTR,   #7F00H
         MOV     A,      #03H
         MOVX    @DPTR,  A

         MOV     HOUR,      #00
         MOV     MINUTE,    #00
         MOV     SECOND,    #00

         MOV  R1,#15             ;循环次数

;存储缓冲区值

DIP:
         MOV 	 A,	HOUR
         MOV  	 B,	#10
         DIV  	 AB
         MOV 	 BUF,	A
         MOV 	 BUF+1,	B      ;将小时分成两个数,放到BUF和BUF+1


         MOV	  A,	MINUTE
         MOV	  B,	#10
         DIV	  AB
         MOV	  BUF+2,A
         MOV	  BUF+3,B      ;将分钟分成两个数,放到BUF+2和BUF+3


         MOV	  A,	SECOND
         MOV	  B,	#10
         DIV	  AB
         MOV	  BUF+4,A
         MOV	  BUF+5,B     ;将秒数分成两个数,放到BUF+4和BUF+5

;循环显示缓冲值

         MOV        R5,     #00100000B   ;位码给R5
         MOV        R0,     #BUF         ;缓冲区地址值给R0


LOOP:                                       ;循环累加
         MOV        A,      R5
         MOV        DPTR,   #7F02H
 	 MOVX       @DPTR,  A            ;送位码给PB口
	 MOV        DPTR,   #TABLE
	 MOV        A,      @R0          ;将缓冲值送给PA
	 MOVC       A,      @A+DPTR      ;查表
         MOV        DPTR,   #7F01H
         MOVX       @DPTR,  A            ;送段码
         ACALL      DELAY_2MS
         MOV        A,       R5
         JB         ACC.0,   DIP         ;判断第一位是否为0,是则执行下面程序,否则跳到DIP
         RR         A                    ;右移位码
         MOV        R5,      A
         INC        R0                   ;缓冲值加1,指向下一个地址
         AJMP LOOP

;廷时程序
DELAY_2MS:
       MOV R6,#0F0H    ;少于20ms
DELAY0:
        DJNZ R6,DELAY0
        RET

;段码表(0~9)
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H                ;共阳数码

;中断口
INT_T0:
         PUSH 	ACC
         PUSH 	PSW
         MOV 	TH0,#3CH
         MOV 	TL0,#0B0H       ;重新赋值定时值
         DJNZ   R1,INTI         ;若R0减到0则跳到INTI,否则执行下面程序
         INC    SECOND          ;区小事
         MOV    A,SECOND
         CJNE   A,#60,DONE      ;若秒数满60则执行下面程序,否则跳到DONE
         MOV    SECOND,#0       ;将秒数清0
         INC    MINUTE          ;分钟加一
         MOV    A,MINUTE
         CJNE   A,#60,DONE      ;若分钟满60则执行下面程序,否则跳到DONE
         MOV    MINUTE,#0       ;将分钟清0
         INC    HOUR            ;小时加一
         MOV    A,HOUR
         CJNE   A,#24,DONE      ;若小时满24则执行下面程序,否则跳到DONE
         MOV    HOUR,#0         ;小时清0

DONE:

         MOV    R1,#15        ;重新赋值循环次数

INTI:
         POP   PSW
         POP   ACC
         RETI                  ;返回
         END






⌨️ 快捷键说明

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