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

📄 clock.asm

📁 在u vision下对51单片机编程
💻 ASM
字号:
#include <def.inc>
      ORG  0000H	    
           LJMP   START
       
      ORG  000BH                 ;1mS中断,动态扫描       
           JMP    INT_T0

      ORG  001BH
           JMP    INT_T1         ;10mS  中断,完成时钟计时

      ORG  0030H
START:   
;---------  重置堆栈  -------------  
           MOV   SP,         #60H    

;----------  端口初始化  -----------
	   MOV   P1,      #0FFH
	   MOV   P3,      #0FFH 
  
;---------  定时器设置  ------------
           MOV   TMOD,    #11h            ;设置C/T0 和 C/T1 工作在方式 1(16bit 定时)
           MOV   TL0,     #DATA_TL0       ;初值
           MOV   TH0,     #DATA_TH0   
           MOV   TL1,     #DATA_TL1      
           MOV   TH1,     #DATA_TH1
           SETB  TR0                      ;启动
           SETB  TR1

;---------  中断设置  -------------
           MOV   IP,    #00001000B     ; 计时的C/T1 优先级为“高”
           MOV   IE,    #10001010B     ; 开放C/T0、C/T1中断 


;---------  变量初始化  ------------
           MOV   TIME_10mS,   #100       ;计时变量
           MOV   TIME_1S,     #0
           MOV   TIME_10S,    #0 
           MOV   TIME_1Min,   #0
           MOV   TIME_10Min,  #0 
           MOV   TIME_1H,     #0
           MOV   TIME_10H,    #0

           MOV   CUR_DISP,    #0         ;显示位
	   MOV   SPACE,       #10        ;显示空格“-”的值

MAINLOOP:  JMP   MAINLOOP                ;主循环


;--------  10mS中断,计时  ----------
INT_T1:    PUSH  PSW                      ;保护现场
           PUSH  ACC

           MOV   TL1,    #DATA_TL1        ;重置初值
           MOV   TH1,    #DATA_TH1  
      
           DJNZ  TIME_10mS,  EXIT_T1  

           MOV   TIME_10mS,   #100        ;每1S
           INC   TIME_1S
           MOV   A,   TIME_1S
           CJNE  A,   #10,   EXIT_T1

           MOV   TIME_1S,   #0            ;每10S
           INC   TIME_10S
           MOV   A,     TIME_10S
           CJNE  A,    #6,   EXIT_T1
          
           MOV   TIME_10S, #0              ;每1Min
           INC   TIME_1Min
           MOV   A,   TIME_1Min
           CJNE  A,   #10,   EXIT_T1
            
           MOV   TIME_1Min,  #0            ;每10Min
           INC   TIME_10Min
           MOV   A,   TIME_10Min
           CJNE  A,   #6,    EXIT_T1
          
           MOV   TIME_10Min, #0            ;每1H
           INC   TIME_1H
           MOV   A,   TIME_1H
           CJNE  A,   #10,   EXIT_T1

           MOV   TIME_1H,    #0            ;每10H
           INC   TIME_10H

EXIT_T1:   POP   ACC                       ;恢复现场
           POP   PSW
           RETI

;--------  1mS中断,动态扫描  ----------                     
INT_T0:    PUSH  PSW                    ; 保护现场
           PUSH  ACC  
           PUSH  DPH
	   PUSH  DPL
           SETB  RS0                    ; 选择工作寄存器1 

           MOV   TL0,   #DATA_TL0       ; 重置 T0 初值
           MOV   TH0,   #DATA_TH0
 
	   MOV_BIT  POS_CONTL1,   CUR_DISP.0        ;输出位选     
           MOV_BIT  POS_CONTL2,   CUR_DISP.1
	   MOV_BIT  POS_CONTL3,   CUR_DISP.2

           MOV    A,     CUR_DISP         ;输出段选
           MOV    DPTR,  #TAB_DIS         ;计算段显示内容的地址 
           MOVC   A,     @A+DPTR          ; A= 在该位上要显示内容的地址

           MOV    R0,    A
           MOV    A,     @R0              ; A= 在该位要显示内容的值

	   MOV    DPTR,  #TAB_CODE  
           MOVC   A,     @A+DPTR          ; A= 要显示内容的段码
           MOV    SEG_OUT,    A           ;段显输出

           INC    CUR_DISP                ;计算下次(1mS后)要显示的位 
           MOV    A,     CUR_DISP
	   CJNE   A,    #N_DISP,  EXIT_T0
	   MOV    CUR_DISP,  #0

EXIT_T0:   POP    DPL
           POP    DPH
           POP    ACC
           POP    PSW            ;恢复现场
           RETI

TAB_CODE:
DB      0C0H    ;0   0   0
DB      0F9H    ;1   1   1
DB      0A4H    ;2   2   2
DB      0B0H    ;3   3   3
DB      099H    ;4   4   4
DB      092H    ;5   5   5
DB      082H    ;6   6   6
DB      0F8H    ;7   7   7
DB      080H    ;8   8   8
DB      098H    ;9   9   9
DB      0BFH    ;-   10       

TAB_DIS:
DB      DIS0   
DB      DIS1 
DB      DIS2   
DB      DIS3    
DB      DIS4   
DB      DIS5   
DB      DIS6     
DB      DIS7   
  
            END

⌨️ 快捷键说明

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