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

📄 频率计.asm

📁 产生各种各样的频率
💻 ASM
字号:
	   VALUEH	EQU	20H			;暂存TH1的值
       VALUEL	EQU	21H			;暂存TL1的值
       DATE0	EQU	22H         ;暂存计数值的BCD码
       DATE1	EQU	23H
       DATE2	EQU	24H
       DATE3	EQU	25H
       DATE4	EQU	26H
	   DATE5    EQU 27H
	   DATE6    EQU 28H
       COUNT	EQU 30H
	   RS       EQU  P2.0
       RW       EQU  P2.1
       E        EQU  P3.7
;-----------------------------------------------------------------------------
		ORG    0000H
		SJMP   MAIN
	    ORG    000BH	  
		LJMP   INT_T0
		ORG	   001BH
		LJMP   INT_T1	   

MAIN:   
     	MOV SP,#60h
		MOV	20H,#00H	 	;存储空间初始化
		MOV	21H,#00H
		MOV	22H,#00h
		MOV	23H,#00H
		MOV	24H,#00H
		MOV	25H,#00H
		MOV	26H,#00H
		MOV	27H,#00H
		MOV 28H,#0AH
		MOV 29H,#0BH
		MOV	30H,#00H

        MOV TMOD,#15H	    ;定时器1工作在定时方式
					    	;定时器0工作在计数方式
     	MOV	TH1,#3CH
		MOV	TL1,#0B0H
		MOV	TH0,#00H
		MOV	TL0,#00H
		MOV	IE,#8AH
		LCALL LCD_INIT  	;对液晶写控制指令进行初始化
						   
        SETB	TR0          ;启动定时
		SETB	TR1 		 ;启动计数
	
	     AJMP  $
;------------------------------------------------------------------------
INT_T0:						 ;中断0作为计数器溢出
       						 ;溢出,R1加1
	    MOV   TH0,#00H
		MOV   TL0,#00H
     	INC   R1
		CLR   TF0
		RETI

INT_T1:	
        MOV    TH1,#0B7H
		MOV    TL1,#0ffH	 
		INC    COUNT
		MOV    A,COUNT
	    CJNE   A,#100,RETUNE	 ;是否计满1秒
        MOV    COUNT,#00H
		CLR    TR0               ;关闭定时器
		CLR    TR1               ;关闭计数器
		MOV    VALUEL,TL0	     ;存放计数值
		MOV    VALUEH,TH0 
        LCALL   HTOD
	
		LCALL LCD_DISPLAY
RETUNE:
         RETI

;--------------液晶写控制-----------------------------------------------------
LCD_INIT:
	 	LCALL   DELAY 	      ; DELAY 延时一段时间
        MOV     P0,#01H		  ; 写指令01H,清屏
        LCALL   ENABLE		  ; 读入使能信号使液晶正常工作
        MOV     P0,#38H		  ;	设置工作方式,写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口
        LCALL   ENABLE		  
        MOV     P0,#0FH		  ;	设置显示,光标,及闪烁开、关。显示开,光标开,闪烁开
        LCALL   ENABLE		  
        MOV     P0,#06H		  ;	设置光标,画面移动方式。数据读、写操作后,AC自动减一,画面平移
        LCALL   ENABLE
		RET		  
 
 ;--------------------液晶显示--------------------------------------------------
LCD_DISPLAY:
        SETB RS0
        MOV R4,#08H
		MOV R2,#80H
		MOV R0,#22H
	    MOV DPTR,#TABLE0
		 
DISPLAY_NUM:
    /* 	MOV   31H,@R0						  
     	JNB   31H,DISPLAY_RT	 					 */
	    MOV   P0,R2		      ; 设置DDRAM地址,第一行起始字符地址		
			
				 
        LCALL   ENABLE
		MOV     A,@R0
	    MOVC    A,@A+DPTR
		LCALL   DISP0
DISPLAY_RT:
		INC  R2
	    INC  R0
	    DJNZ R4,DISPLAY_NUM     
	    MOV  TH0,#0
		MOV  TL0,#0
		MOV   R1,#0
        SETB  TR0			  // 重新开启中断重新计数定时
		SETB  TR1
	    RET
;-------------------------------------------------------------------------------------
;这段程序将VALUEH/VALUEL中的16进制数转成10进制并且把5位数依次存入DATE0至DATE5
;-------------------------------------------------------------------------------------
HTOD:
    //  CLR   RS0
      MOV	R2,VALUEH
	  MOV	R3,VALUEL
	  CLR	A
	  MOV	R4,A
	  MOV	R5,A
	  MOV	R6,A
	  MOV	R7,#18H
LOOP1:
      CLR	C
	  MOV	A,R3
	  RLC	A
	  MOV	R3,A
	  MOV	A,R2
	  RLC	A
	  MOV	R2,A
	  MOV	A,R1
	  RLC	A
	  MOV	R1,A
	  
                
	  MOV	A,R6
      ADDC	A,R6
	  DA	A
	  MOV	R6,A
                
	  MOV	A,R5
      ADDC	A,R5
	  DA	A
	  MOV	R5,A
                
	  MOV	A,R4
      ADDC	A,R4
	  DA	A
	  MOV	R4,A
      DJNZ	R7,LOOP1

CZ:  
      MOV	R0,#DATE5
	  MOV	A,R6
	  ANL	A,#0FH
	  MOV	@R0,A
	  
	  DEC	R0
	  MOV	A,R6
	  SWAP	A
      ANL	A,#0FH
	  MOV	@R0,A

	  DEC	R0
	  MOV	A,R5
	  ANL	A,#0FH
	  MOV	@R0,A
	 
	  DEC	R0
	  MOV	A,R5
	  SWAP	A
      ANL	A,#0FH
	  MOV	@R0,A

	  DEC	R0
	  MOV	A,R4
	  ANL	A,#0FH
	  MOV	@R0,A

	  DEC	R0
	  MOV	A,R4
	  SWAP	A
	  ANL	A,#0FH
	  MOV	@R0,A
	  MOV   R1,#0


      RET 			   
;---------------------------------------------------------------

ENABLE:
       CLR     RS		; 写指令子程序
       CLR     RW			  
       CLR     E
       LCALL   DELAY
       SETB    E
       RET


DISP0:
MOV     P0,A		  ; 写1字节数据到显示端口 
SETB    RS			  ; 写数据时序
CLR     RW
CLR     E
LCALL   DELAY
SETB    E
RET

DELAY:				   ; 延时子程序
     MOV   R7,#255	 
D1:  MOV   R6,#255
D2: DJNZ   R6,D2
    DJNZ   R7,D1															       
	RET

TABLE0:  DB "0123456789Hz"
	END

⌨️ 快捷键说明

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