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

📄 freq.asm

📁 在C51下编写的频率计函数
💻 ASM
字号:
LEDBUF    EQU 40H ;31H到3aH存储区用来存放要显示的段码
C100US    EQU 42H ;存放10000的低字节
DISP      EQU 43H  
T100US	  EQU 156     ;100微秒的初值
TICK	  EQU 10000  ;溢出10000次
BIT_CNT    EQU    30H 
DELAY      EQU    31H 
;DECIMAL    EQU    32H 
SEND_BUF   EQU    32H 
REC_BUF    EQU    33H 
COUNT8	   EQU    44H
T_1        BIT     P1.6
CLR_1      BIT     P1.7
CS         BIT     P1.3 
CLK        BIT     P1.0
DIO        BIT     P1.1
KEY        BIT     P3.2
SECOND_EN  BIT     00H
     ORG 0000H
     LJMP MAIN
     ORG 001BH
     LJMP T1INT        ;定时器1的入口地址                   
     ORG 0030H
;主程序开始
MAIN:   
      MOV   sp,#70h
      MOV   TMOD,#20H	 ;定时器1工作于方式2
      MOV   TH1,#T100US		 ;载入初值
      MOV   TL1,#T100US
      MOV   C100US+1,#HIGH(TICK)
      MOV   C100US,#LOW(TICK)
      MOV   IE,#10001010B
      SETB  TR1
      CLR   T_1
      SETB  CLR_1
	
      SETB	SECOND_EN
GOON1:
LJMP  GOON1      ;不断重复该程序
;中断1处理子程序
T1INT:	
        PUSH PSW
	PUSH ACC  
        MOV A,C100US
	JNZ GOON2
	DEC C100US+1
GOON2:       
        DEC C100US
	MOV A,C100US+1
	ORL A,C100US
	JNZ EXIT
;	CPL T_1
        LCALL	CHANGET1
	MOV C100US+1,#HIGH(TICK)
	MOV C100US,#LOW(TICK)
	
;退出中断1
EXIT:	
        POP ACC
	POP PSW
	RETI
        
READ_DATA: 
	MOV   COUNT8,#8
	MOV   R0,#LEDBUF
        MOV   DPTR,#0B000H
AGAIN:	MOVX  A,@DPTR
        ANL   A,0FH
	MOV   @R0,A
	INC   DPTR
	DEC   R0
	DJNZ  COUNT8,AGAIN
        RET 
DISPLAY:

	MOV     COUNT8,#8
	MOV     R1,#LEDBUF
	MOV     DISP,#11001111B
JIXU:	MOV     SEND_BUF,DISP
	LCALL   SEND
	MOV     SEND_BUF,@R1
	LCALL   SEND
	SETB    CS
	DEC     DISP
	DEC     R1
	DJNZ    COUNT8,JIXU
        RET
;----------------------------------
;发送数据给7289显示
;----------------------------------		
SEND:
	MOV   BIT_CNT,#8                ; 8. 
	CLR   CLK
	CLR   CS 
	LCALL LONG_DELAY                 ; 50. 
SEND_LP: 	
	MOV   A,SEND_BUF 
	RLC   A 
	MOV   SEND_BUF,A 
	MOV   DIO,C
	NOP 
	NOP 
	SETB   CLK 
	LCALL  SHORT_DELAY             ; 10. 
	CLR    CLK 
	LCALL  SHORT_DELAY             ; 10. 
	DJNZ   BIT_CNT,SEND_LP 
	CLR    DIO 
	RET
;----------------------------------------------
;接受数据来自7289按键
;----------------------------------------------
RECEIVE:
	MOV   BIT_CNT,#8               ; 8. 
;	SETB   DAT 
	LCALL LONG_DELAY               ; 50. 
RECEIVE_LP:
	SETB  CLK 
	LCALL SHORT_DELAY              ; 10. 
	MOV   C,DIO                    ; REC_BUF. 
	MOV   A,REC_BUF 
	RLC   A 
	MOV   REC_BUF,A 
	CLR   CLK 
	LCALL SHORT_DELAY              ; 10. 
	DJNZ  BIT_CNT,RECEIVE_LP 
	CLR   DIO 
	RET 	
LONG_DELAY:
	MOV   DELAY,#25 
	DJNZ  DELAY,$ 
	RET 
SHORT_DELAY:
	MOV   DELAY,#4 
	DJNZ  DELAY,$ 
	RET
DELAY100MS:
	MOV R6,#0FFH
DL:	MOV R7,#0FFH
	DJNZ R6,DL
	RET
;-----------------------------------------
CHANGET1:
        JNB	SECOND_EN,END_CHANGE
	JB	T_1,CLRT_1
	SETB	T_1
	SETB	CLR_1
	AJMP	END_CHANGE
CLRT_1: CLR	SECOND_EN
	CLR	T_1
	LCALL	DELAY100MS
	LCALL 	READ_DATA	       
        LCALL 	DISPLAY
	SETB	SECOND_EN
	CLR	CLR_1
END_CHANGE:RET



	
END

⌨️ 快捷键说明

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