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

📄 timeasm.asm

📁 实时时钟
💻 ASM
字号:
;---------------------
;实时时钟:
;  两个按键:
;  第一个按键是控制时钟暂停或修改时间   ,在修改状态下,按一次表示修改下一位,第一次修改第一位
;  第2个按键是在暂停状态下,改变当前位的值,按一下加一
;---------------------
   ORG  0000H
   LJMP MAIN
   ORG  0003H
   LJMP INT0P
   ORG  000BH
   LJMP TIME0P
   ORG  0013H
   LJMP INT1P
   ORG  0100H
MAIN:MOV SP,#60H
     MOV TMOD,#01H	  ;定时器T0工作在方式1
     MOV 20H,#14H    ;中断次数	20
	 CLR A
	 MOV 40H,A
	 MOV 41H,A
	 MOV 42H,A
	 MOV R7,A   ;定时器控制标志	 ;正常/暂停/修改地址
	 CLR 00H    ;00H位作为修改时钟标志位;为0表示不修改,为1表示修改
	 SETB ET0	;允许计数器T0中断
	 SETB IT0	;外部中断0设置边沿触发	
	 SETB EX0	;允许 外部中断0
	 SETB IT1	;外部中断1设置边沿触发	
	 SETB EX1	;允许 外部中断1
	 SETB EA	;允许CPU中断
	 MOV  TH0,#3CH ;装入初值
	 MOV  TL0,#0B0H
	 SETB TR0	    ;启动T0
;------------
;数码管显示
;----------------
SHOW:MOV  R2,#03H	 ;显示三个部分:时、分、秒
     MOV  R3,#0FEH	 ;数码管选择字段
     MOV  R1,#40H	 ;数据区地址
	 MOV  DPTR,#LED  ;断码表地址  
 SH1:MOV  A,@R1
	 MOV  B,#10H
	 DIV  AB
	 ;MOV  44H,A
	 ;MOV  45H,B	 
	 MOV  P1,R3
	 ;CALL DELAY
	 MOVC A,@A+DPTR
	 MOV  P2,A
	 CALL DELAY
	 MOV  A,R3
	 RL   A
	 MOV  R3,A
	 MOV  P1,R3
	 ;CALL DELAY
	 MOV  A,B
	 MOVC A,@A+DPTR
	 MOV  P2,A
	 CALL DELAY
	 MOV  A,R3
	 RL   A
	 MOV  R3,A
	 INC  R1
	 DJNZ R2,SH1
     SJMP SHOW
;----------
;延时
;----------
DELAY:PUSH PSW	    
     MOV  R4,#05FH
	 DJNZ R4,$
	 POP  PSW
	 RET
;---------
;控制定时器的启动与停止
;---------
INT0P:PUSH PSW

	 CJNE R7,#00H,MODIFY	     ;R7为0进暂停
PAUSE:CLR TR0	     ;关计数器
	 INC  R7
	 SJMP DOWN
MODIFY:
     CJNE R7,#01H,BYTE      ;R7W为1暂停或修改第一位
	 JB   00H,BYTE         ;00H为1 现处于修改第一位	,否则是暂停
	 SETB  TR0		 ;开计数器 
	 MOV   R7,#00H
	 SJMP DOWN
BYTE:CJNE R7,#06H,NEXTR7     ;修改第几位,如到最后一位,就恢复定时
LAST:SETB TR0
     MOV R7,#00H
     CLR 00H
	 SJMP DOWN
NEXTR7:INC R7
      
DOWN:POP  PSW
     RETI

;-------------------
;在暂停状态下,第二按键可改变当前时间
;-------------------
INT1P:PUSH PSW
	  MOV  R0,#41H
      CJNE R7,#00H,MODIFY1     ;R7不为0,进入修改时间
	  SJMP DOWN1
MODIFY1:SETB 00H	 ;置修改状态
      CJNE R7,#01H,BYTE2        ;R7为1修改第一位
	  MOV  A,40H
	  ANL  A,#0F0H
	  CJNE A,#20H,ADD1
	  ANL  40H,#0FH
      SJMP DOWN1
ADD1:MOV A,#10H
     ADD A,40H
	 MOV 40H,A
	 SJMP DOWN1
BYTE2:CJNE R7,#02H,BYTE3         ;R7为2修改第二位
	  MOV  A,40H
	  ANL  A,#0F0H
	  CJNE A,#20H,ADD24
      MOV  A,#0FH
	  ANL  A,40H
	  CJNE A,#04H,AAA24
	  ANL  40H,#0F0H       ;24小时,清0为20
	  SJMP DOWN1
AAA24:INC  40H
      SJMP DOWN1
ADD24:MOV  A,#0FH		    ;到9清0
	  ANL  A,40H
	  CJNE A,#09H,AAA24
	  ANL  40H,#0F0H       ;24小时,清0为20
	  SJMP DOWN1

BYTE3:CJNE R7,#03H,BYTE4        ;R7为3修改第3位
BYTE35:MOV  A,@R0
	  ANL  A,#0F0H
	  CJNE A,#50H,ADD35
	  MOV  A,@R0
	  ANL  A,#0FH
	  MOV  @R0,A
	  SJMP DOWN1
ADD35:MOV  A,#10H
      ADD  A,@R0
	  MOV  @R0,A       
	  SJMP DOWN1
BYTE4:CJNE R7,#04H,BYTE5         ;R7为4修改第4位
BYTE46:MOV  A,@R0
	  ANL  A,#0FH
	  CJNE A,#09H,ADD49
	  MOV  A,@R0
	  ANL  A,#0F0H
	  MOV  @R0,A
	  SJMP DOWN1
ADD49:INC @R0
      SJMP DOWN1
BYTE5:CJNE R7,#05H,BYTE6
      MOV  R0,#42H
	  SJMP BYTE35
BYTE6:MOV  R0,#42H
      SJMP BYTE46
DOWN1:POP  PSW
      RETI

TIME0P:PUSH PSW
     PUSH ACC
	 MOV  A,TL0
	 ADD  A,#0B0H   ;初值,机器主频为12MHz
	 MOV  TL0,A
	 MOV  A,TH0  
	 ADDC A,#3CH
	 MOV  TH0,A
	 DJNZ 20H,RETURN
	 MOV  20H,#14H
	 MOV  A,#01H
	 ADD  A,42H
	 DA   A
	 MOV  42H,A
	 CJNE A,#60H,RETURN
	 MOV  42H,#00H
	 MOV A,#01H
	 ADD  A,41H
	 DA   A
	 MOV 41H,A
	 CJNE A,#60H,RETURN
	 MOV 41H,#00H
	 MOV A,01H
	 ADD A,40H
	 DA  A
	 MOV 40H,A
	 CJNE A,#24H,RETURN
	 MOV 40H,#00H
RETURN:POP ACC
     POP PSW
	 RETI
 LED:DB 3FH,06H,5BH,4FH,66H
     DB 6DH,7DH,07H,7FH,6FH
	 END

⌨️ 快捷键说明

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