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

📄 hex.asm

📁 这是基于单片机的专用定时器的设计。使用汇编语言来编写
💻 ASM
📖 第 1 页 / 共 3 页
字号:
 	 ANL A,R2
	 ADD A,#30H
	 MOV 3AH,A
	 MOV A,R2
	 SWAP   A
	 ANL A,#0FH
	 ADD A,#30H
	 MOV 39H,A
         MOV  3BH,#03H  ;分
         MOV  R2,S2S
         MOV A,#0FH
	 ANL A,R2
	 ADD A,#30H
	 MOV 3DH,A
	 MOV A,R2
	 SWAP   A
	 ANL A,#0FH
	 ADD A,#30H
	 MOV 3CH,A
         MOV  3EH,#04H
         MOV  3FH,#05H
         MOV  R1,#37H
DS2:     MOV  A,@R1
         LCALL  DISPABLE
         INC  R1
         CJNE  R1,#40H,DS2
         RET
KK3:	 MOV  C,PAND
   	 ANL C,KG3     ;PAND、KG3 同时为1定时器2才工作
   	 JC  KK33
   	 LJMP  OUT33
KK33:	 MOV  A,S3S
	 JB  SN3,SH3       ;SN3为1说明了定时器3时间到,顺序显示超时时间
    	 CJNE  A,#00H,NET3
         CJNE  A,S3M,NET33
	 CLR  SPEAK             ;开蜂鸣器
	 CLR  LED3  	; LED3亮表示定时器3定时时间到
	 SETB  SN3    ;定时器3定时时间到,SN3置1
         LJMP  OUT33
SH3:	 MOV  A,S3S
	 ADD  A,#01H     ;顺序显示超时时间
	 DA  A
	 MOV  S3S,A
	 CJNE  A,#60H,OUT33
	 MOV  S3S,#00H
   	 LJMP  OUT33
NET3:	 ANL A,#0FH     ;倒计时显示定时器3剩余时间数据处理
	 CJNE A,#00H,BD3
	 MOV  A,S3S
	 ADD  A,#09H
	 SWAP  A
	 DEC  A
	 SWAP  A
	 MOV  S3S,A
	 SJMP  OUT33
NET33:	 MOV  S3S,#59H
	 MOV  A,S3M
	 ANL A,#0FH
	 CJNE A,#00H,BD33
	 MOV  A,S3M
	 ADD  A,#09H
	 SWAP  A
	 DEC  A
	 SWAP  A
	 MOV  S3M,A
	 SJMP  OUT33
BD33:	 DEC  S3M
	 SJMP  OUT33
BD3:	 DEC  S3S 
OUT33:   RET
DISP3:     ;显示定时器3时间子程序
         MOV  A,#0C0H      ;从0C0H地址开始显示
         LCALL  ENABLE
         MOV  41H,#33H
         JB  KG3,K3
         MOV  42H,#07H   ;关,表示定时器3不工作   
         JMP  G3
K3:  	 MOV  42H,#06H   ;开,表示定时器3工作 
G3:      MOV  R2,S3M
         MOV A,#0FH
 	 ANL A,R2
	 ADD A,#30H
	 MOV 44H,A
	 MOV A,R2
	 SWAP   A
	 ANL A,#0FH
	 ADD A,#30H
 	 MOV 43H,A
         MOV  45H,#03H   ;分
         MOV  R2,S3S
         MOV A,#0FH
	 ANL A,R2
	 ADD A,#30H
 	 MOV 47H,A
	 MOV A,R2
	 SWAP   A
	 ANL A,#0FH
	 ADD A,#30H
	 MOV 46H,A
         MOV  48H,#04H  ;秒
         MOV  49H,#05H
         MOV  R1,#41H
DS3:     MOV  A,@R1
         LCALL  DISPABLE
         INC  R1
         CJNE  R1,#4AH,DS3
         RET
TIME0:         ;定时器/计数器0中断入口 
        MOV  TH0,#3CH    ;重赋初值
        MOV  TL0,#0AFH
	PUSH  ACC     ;入栈保护
	PUSH  PSW
        DJNZ   5CH,TIM    ;不够1秒,中断返回
        MOV  5CH,#10H     ;到1秒,执行相应程序
        MOV  C,SZSJ
        ANL C,KSZT
        MOV  PAND,C
        LCALL  KK1
        LCALL  KK2
        LCALL  KK3
TIM:    POP  PSW
        POP  ACC
        RETI
ROW1:  	MOV  P2,#7FH     ;开始/暂停切换键
        MOV  A,P2
        CJNE  A,#7FH,SW1
        JMP  OUT
SW1: 	CJNE A,#7EH,OUT
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#7FH,OUT 
     	MOV  A,#0CDH
     	LCALL   ENABLE
 	CPL  XUAN
	JB  XUAN,XUAN2   
     	MOV  A,#20H
     	LCALL  DISPABLE   	;开始清除地址0CDH的标志$
     	JMP  XUAN1
XUAN2:  MOV  A,#24H  		;暂停在地址0CDH显示的标志$
     	LCALL  DISPABLE
XUAN1:  CPL  KSZT
     	CPL  TR0
OUT:  	RET
ROW3: 	MOV  P2,#0DFH   	 ;设置定时器的开/关,K处于工作状态,G为不工作状态
        MOV  A,P2
       	CJNE  A,#0DFH,SW3
        JMP  OUT
SW3: 	CJNE A,#0DEH,OUT
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0DFH,OUT     
     	MOV  A,#0CDH
     	LCALL   ENABLE  
     	MOV  A,#0FBH     	;显示万字,表示处于设置定时器的开/关状态,
     	LCALL  DISPABLE
AN1: 	MOV  P2,#0DFH   		;设置定时器1
        MOV  A,P2
       	CJNE  A,#0DFH,AN11    
        JMP  AN2
AN11:	CJNE A,#0D7H,AN2
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0DFH,AN2
     	CPL  KG1     		;定时器1的开/关切换
     	CLR  SN1
	SETB  SPEAK             ;关蜂鸣器
	SETB  LED1		;关定时器1定时时间到指示灯
AN2:  	MOV  P2,#0DFH   	;设置定时器2
        MOV  A,P2
       	CJNE  A,#0DFH,AN22
        JMP  AN3
AN22:	CJNE A,#0DBH,AN3
     	LCALL  DELAY
     	MOV  A,P2
     	CJNE A,#0DFH,AN3
     	CPL  KG2    		;定时器2的开/关切换
    	CLR  SN2
	SETB  SPEAK             ;关蜂鸣器
	SETB  LED2              ;关定时器2定时时间到指示灯
AN3:	MOV  P2,#0DFH   	;设置定时器3
        MOV  A,P2
        CJNE  A,#0DFH,AN33
        JMP  AN4
AN33:	CJNE A,#0DDH,AN4
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0DFH,AN4
     	CPL  KG3     		;定时器3的开/关切换
     	CLR  SN3
	SETB  SPEAK             ;关蜂鸣器
	SETB  LED3		;关定时器3定时时间到指示灯
AN4:  	LCALL  DISP1
      	LCALL  DISP2       
      	LCALL  DISP3
      	MOV  P2,#0DFH
        MOV  A,P2
       	CJNE  A,#0DFH,SWWW
       	JMP AN1 
SWWW:   CJNE A,#0DEH,AN1  	;退出定时器开/关切换设置
       	LCALL  DELAY
        MOV  A,P2
        CJNE A,#0DFH,AN1
        MOV  A,#0CDH
        LCALL   ENABLE  
        MOV  A,#20H
        LCALL  DISPABLE       
SW4: 	RET
ROW2:   MOV  P2,#0BFH    	;键盘设置,用于定时器时间设置和日期时间设置
        MOV  A,P2
       	CJNE  A,#0BFH,SW22      
OUTTT:	RET
SW22:   CJNE A,#0BEH,OUTTT
        LCALL  DELAY
      	MOV  A,P2
    	CJNE A,#0BFH,OUTTT
    	JB  DSSJ,SHJ    	; DSSJ为0,设置定时器的值,为1设置日期时间的值
DSH: 	JB  KSZT,OUTTT 	 	;  KSZT为0即暂停状态才能设置定时器的值
    	INC  SZ123  		; SZ123 为1,设置定时器1的值,为2设置定时器2的值,为3设置定时器3的值
SZZ1:  	MOV  A,SZ123    
SZ1:  	CJNE  A,#01H,SZ2    	;设置定时器1的值
    	MOV  XS,#01H
     	MOV  A,#0DH 		 ; 光标有闪烁
    	LCALL   ENABLE
    	MOV  A,#82H    
  	LCALL   ENABLE
   	LJMP  KEY1H
SZ2: 	CJNE  A,#02H,SZ3       ;设置定时器2的值
  	MOV  XS,#03H
  	MOV  A,#0DH  		; 光标有闪烁
    	LCALL   ENABLE
  	MOV  A,#89H
  	LCALL   ENABLE 
  	LJMP  KEY1H
SZ3:  	CJNE  A,#03H,SZ4  	;设置定时器3的值
   	MOV  XS,#07H
    	MOV  A,#0DH  		; 光标有闪烁
    	LCALL   ENABLE
    	MOV  A,#0C2H
    	LCALL   ENABLE  
    	LJMP  KEY1H
SZ4: 	MOV  SZ123,#01H   
     	LJMP  SZZ1           
SHJ: 	MOV  DS1302ADDR,#8EH      ;设置日期时间的值
       	MOV  DS1302DATA,#00H  	;关写保护,允许写DS1302
        LCALL WRITE
       	MOV  DS1302ADDR,#80H
       	MOV  DS1302DATA,#80H  	;DS1302停止振荡
       	LCALL  WRITE
       	MOV  XSSS,#01H
      	MOV  A,#8EH
     	LCALL   ENABLE  
     	MOV  A,#0F1H    	;在地址F1H显示千表示设置日期时间
     	LCALL  DISPABLE
    	MOV  A,#0DH 	 	; 光标有闪烁
    	LCALL   ENABLE
     	MOV  A,#82H  		; 光标在82H处开始显示
     	LCALL   ENABLE
     	LJMP  KEY1H
KEY1H:  MOV  P2,#7FH      	;数字7
        MOV  A,P2
       	CJNE  A,#7FH,DY7
        LJMP  KEY2H
DY7:  	CJNE A,#77H,DY8
     	LCALL  DELAY
      	MOV  A,P2
    	CJNE A,#7FH,DY8
     	MOV  52H,#70H   ;存放数的高位BCD码
     	MOV  53H,#37H   ;存放要显示的数的ASCII码
     	MOV  54H,#07H   ;存放数的低位BCD码
     	JB  DSSJ,DI7
      	LCALL   ZHLI   	;调用定时器定时时间处理子程序
      	JMP  KEY1H
DI7: 	LCALL   ZHLI2   ;调用日期时间处理子程序
      	LJMP KEY1H
DY8:  	CJNE A,#7BH,DY9     ;数字8
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#7FH,DY9
    	MOV  52H,#80H  ;存放数的高位BCD码 
    	MOV  53H,#38H  ;存放要显示的数的ASCII码
     	MOV  54H,#08H  ;存放数的低位BCD码
      	JB  DSSJ,DI8 
      	LCALL   ZHLI
      	JMP  KEY1H
DI8: 	LCALL   ZHLI2
      	LJMP KEY1H
DY9:  	CJNE A,#7DH,KEY1H    ;数字9
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#7FH,KEY1H
     	MOV  52H,#90H
     	MOV  53H,#39H
     	MOV  54H,#09H
      	JB  DSSJ,DI9
      	LCALL   ZHLI
      	JMP  KEY1H
DI9: 	LCALL   ZHLI2
      	LJMP KEY1H
KEY2H:  MOV  P2,#0BFH   
        MOV  A,P2
        CJNE  A,#0BFH,DY4
        LJMP  KEY3H
DY4:  	CJNE A,#0B7H,DY5  ;数字4
     	LCALL  DELAY
        MOV  A,P2
     	CJNE A,#0BFH,DY5
     	MOV  52H,#40H
     	MOV  53H,#34H
     	MOV  54H,#04H
    	JB  DSSJ,DI4
      	LCALL   ZHLI
      	JMP  KEY2H
DI4 : 	LCALL   ZHLI2
      	JMP KEY2H
DY5:  	CJNE A,#0BBH,DY6  ;数字5
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0BFH,DY6
     	MOV  52H,#50H
     	MOV  53H,#35H
     	MOV  54H,#05H
        JB  DSSJ,DI5
      	LCALL   ZHLI
      	JMP  KEY2H
DI5: 	LCALL   ZHLI2
      	JMP KEY2H
DY6:	CJNE A,#0BDH,TUICH   ;数字6
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0BFH,TUICH
     	MOV  52H,#60H
     	MOV  53H,#36H
     	MOV  54H,#06H
        JB  DSSJ,DI6
      	LCALL   ZHLI
      	JMP  KEY2H
DI6: 	LCALL   ZHLI2
      	JMP KEY2H
TUICH:  CJNE A,#0BEH,KEY3H   ;判断是否退出设置
      	LCALL  DELAY
       	MOV  A,P2
       	CJNE A,#0BFH,KEY3H
     	MOV  A,#0CH         ; 光标无闪烁
     	LCALL   ENABLE 
     	JNB  DSSJ, DDSH      
     	MOV  A,#8EH
     	LCALL   ENABLE     ;退出后清除设置标志
     	MOV  A,#20H
     	LCALL  DISPABLE  
     	MOV    DS1302ADDR,#80H
    	MOV    DS1302DATA,SEC ;DS1302晶振开始振荡
     	LCALL  WRITE
       	MOV    DS1302ADDR,#8EH
   	MOV    DS1302DATA,#80H ;打开写保护,禁止写入DS1302
   	LCALL  WRITE
DDSH:  	RET
FANHUI:	JMP  KEY3H
KEY3H:  MOV  P2,#0DFH   
        MOV  A,P2
       	CJNE  A,#0DFH,DY1
        JMP  KEY4H
DY1: 	CJNE A,#0D7H,DY2  ;数字1
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0DFH,DY2
     	MOV  52H,#10H
     	MOV  53H,#31H
     	MOV  54H,#01H
      	JB  DSSJ,DI1
      	LCALL   ZHLI
     	JMP  KEY3H
DI1 : 	LCALL   ZHLI2
      	JMP KEY3H  
DY2:	CJNE A,#0DBH,DY3   ;数字2
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0DFH,DY3
     	MOV  52H,#20H
     	MOV  53H,#32H
     	MOV  54H,#02H
     	JB  DSSJ,DI2
      	LCALL   ZHLI
      	JMP  KEY3H
DI2 : 	LCALL   ZHLI2
       	JMP KEY3H
DY3:	CJNE A,#0DDH,KEY4H   ;数字3
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0DFH,KEY4H
     	MOV  52H,#30H
     	MOV  53H,#33H
     	MOV  54H,#03H
     	JB  DSSJ,DI3
      	LCALL   ZHLI
      	JMP  KEY3H
DI3: 	LCALL   ZHLI2
      	JMP KEY3H    
KEY4H: 	MOV  P2,#0EFH   
        MOV  A,P2
       	CJNE  A,#0EFH,DY0
        JMP  KEY1H
DY0:	CJNE A,#0E7H,ZHUAN ;数字0
     	LCALL  DELAY
      	MOV  A,P2
     	CJNE A,#0EFH,ZHUAN
     	MOV  52H,#00H
     	MOV  53H,#30H
     	MOV  54H,#00H
      	JB  DSSJ,DI0
      	LCALL   ZHLI
      	JMP  KEY4H
DI0: 	LCALL   ZHLI2
      	JMP  KEY4H
ZHUAN:	JMP  KEY1H
ZHLI:  	MOV  A,XS     ;设置定时器
XS1:  	CJNE  A,#01H,XS2     ;设置定时器1高位
  	MOV  XS,#02H
  	MOV  A,S1S
  	ANL  A,#0FH
  	ADD  A,52H     ;52H中存放的是设置的高位数值
  	MOV  S1S,A
  	MOV  A,53H          ;显示定时器高位的值
  	LCALL  DISPABLE
 	RET
XS2:  	CJNE  A,#02H,XS3        ;设置定时器1低位
  	MOV  XS,#01H
   	MOV  A,S1S
  	ANL  A,#0F0H
  	ADD  A,54H         ;54H中存放的是设置的低位数值
  	MOV  S1S,A 
  	MOV  A,53H    ;显示定时器低位的值
  	LCALL  DISPABLE
   	MOV  A,#82H    ;返回定时器1高位显示的地址
  	LCALL   ENABLE  
	RET
XS3:  	CJNE  A,#03H,XS4    ;设置定时器2分的高位
	MOV  XS,#04H
  	MOV  A,S2M
  	ANL  A,#0FH
  	ADD  A,52H
  	MOV  S2M,A
  	MOV  A,53H
  	LCALL  DISPABLE
   	RET
XS4:  	CJNE  A,#04H,XS5             ;设置定时器2分的低位
 	MOV  XS,#05H
   	MOV  A,S2M
  	ANL  A,#0F0H
  	ADD  A,54H
  	MOV  S2M,A
  	MOV  A,53H
  	LCALL  DISPABLE
 	MOV  A,#14H   ;光标右移1位
  	LCALL    ENABLE
   	RET
XS5:  	CJNE  A,#05H,XS6    ;设置定时器2秒的高位
	MOV  XS,#06H
  	MOV  A,S2S
  	ANL  A,#0FH
  	ADD  A,52H
  	MOV  S2S,A
  	MOV  A,53H
  	LCALL  DISPABLE
   	RET
XS6:  	CJNE  A,#06H,XS7    ;设置定时器2秒的低位
 	MOV  XS,#03H
   	MOV  A,S2S
  	ANL  A,#0F0H
  	ADD  A,54H
  	MOV  S2S,A
  	MOV  A,53H
  	LCALL  DISPABLE
   	MOV  A,#89H
   	LCALL   ENABLE
   	RET
XS7:  	CJNE  A,#07H,XS8   ;设置定时器3分的高位
   	MOV  XS,#08H
  	MOV  A,S3M
  	ANL  A,#0FH
  	ADD  A,52H
  	MOV  S3M,A
  	MOV  A,53H
  	LCALL  DISPABLE
   	RET
XS8:  	CJNE  A,#08H,XS9    ;设置定时器3分的低位
  	MOV  XS,#09H
   	MOV  A,S3M
  	ANL  A,#0F0H
  	ADD  A,54H
  	MOV  S3M,A
  	MOV  A,53H
 	LCALL  DISPABLE
   	MOV  A,#14H  ;光标右移1位
   	LCALL   ENABLE
   	RET
XS9: 	CJNE  A,#09H,XS10    ;设置定时器3秒的高位
 	MOV  XS,#0AH
  	MOV  A,S3S
  	ANL  A,#0FH
  	ADD  A,52H
  	MOV  S3S,A
   	MOV  A,#0C5H
   	LCALL   ENABLE
  	MOV  A,53H
  	LCALL  DISPABLE
   	RET
XS10:   CJNE  A,#0AH,XS11     ;设置定时器3秒的低位
XS11: 	MOV  XS,#07H  
    	MOV  A,S3S
  	ANL  A,#0F0H
  	ADD  A,54H
  	MOV  S3S,A
  	MOV  A,53H
  	LCALL  DISPABLE
  	MOV  A,#0C2H     ;返回定时器3分的高位地址
   	LCALL   ENABLE
        RET

⌨️ 快捷键说明

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