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

📄 fil1256高频头程序.asm

📁 采用FIL1256一体化高频头制作的信号发生器
💻 ASM
📖 第 1 页 / 共 3 页
字号:
			ADD	A,#5
			MOV	DISSHI,A
			;INC	DISSHI   ;数据加10KHz
			;MOV	A,DISSHI
			CJNE 	A,#0AH,INC1_1
			MOV	DISSHI,#00H
INC_BAI:		
			INC 	DISBAI      ;数据加100KHz
			MOV 	A,DISBAI
			CJNE 	A,#0AH,INC1_1
			MOV 	DISBAI,#00H
INC_QIAN:		
			INC 	DISQIAN    	;数据加1MHz
			MOV 	A,DISQIAN
			CJNE 	A,#0AH,INC1_1
			MOV 	DISQIAN,#00H
INC_WAN:		
			INC 	DISWAN  	;数据加10MHz
			MOV 	A,DISWAN
			CJNE 	A,#0AH,INC1_1
			MOV 	DISWAN,#00H
INC_SHIWAN:		
			INC 	DISSHIWAN	;数据加100MHz
			MOV 	A,DISSHIWAN
			CJNE 	A,#0AH,INC1_1
			MOV 	DISSHIWAN,#00H
INC1_1:					
			MOV 	A,DISSHI
			ANL 	A,#0FH
			MOV 	DISSHI,A
			AJMP	DEC1_1
;--------------------------------
DEC1: 
			CJNE 	A,#02H,CODER_END
			MOV 	BUF0,BUF1
			MOV	A,STEP	;判断应该在那一位减一
			CJNE	A,#01H,DEC_2
			AJMP	DEC_SHIWAN
DEC_2:			
			CJNE	A,#02H,DEC_3
			AJMP	DEC_WAN
DEC_3:			
			CJNE	A,#03H,DEC_4
			AJMP	DEC_QIAN
DEC_4:			
			CJNE	A,#05H,DEC_5
			AJMP	DEC_BAI
DEC_5:			
			CJNE	A,#06H,DEC_6
			AJMP	DEC_SHI
DEC_6:			
			CJNE	A,#07H,DEC1_1
			AJMP	DEC_GE
;--------------------------------
DEC_GE:			
			DEC 	DISGE      ;向百有借位
			MOV 	A,DISGE
			CJNE 	A,#0FFH,DEC1_1
			MOV 	DISGE,#9  
DEC_SHI:		
			MOV A,DISSHI     ;百位减50K
			SUBB A,#5
			MOV DISSHI,A
			CJNE 	A,#0FBH,DEC1_1
			MOV 	DISSHI,#5
			;DEC 	DISSHI      ;向百有借位
			;MOV 	A,DISSHI
			;CJNE 	A,#0FFH,DEC1_1
			;MOV 	DISSHI,#9  
DEC_BAI:		
			DEC 	DISBAI      ;向百有借位
			MOV 	A,DISBAI
			CJNE 	A,#0FFH,DEC1_1
			MOV 	DISBAI,#09H
DEC_QIAN:		
			DEC 	DISQIAN    ;向千有借位
			MOV 	A,DISQIAN
			CJNE 	A,#0FFH,DEC1_1
			MOV 	DISQIAN,#09H
DEC_WAN:		
			DEC 	DISWAN  	;向万有借位
			MOV 	A,DISWAN
			CJNE 	A,#0FFH,DEC1_1
			MOV 	DISWAN,#09H
DEC_SHIWAN:		
			DEC 	DISSHIWAN	;向十万有借位
			MOV 	A,DISSHIWAN
			CJNE 	A,#0FFH,INC1_1
			MOV 	DISSHIWAN,#09H
DEC1_1:
			LCALL	DISLCD1 ;显示
			ACALL	SEND_PLL ;数据送入高频头
			LCALL W24C16  ;显示后将数据写入
			AJMP	L1	

CODER_END:		MOV 	BUF0,BUF1  ;数据不是2,或者3 跳回开始
			AJMP 	L1
;***************************************
/*
KEYWAIT:		ACALL	KEYDELAY	;按键等待释放
KW:			MOV	KEYBOARD,#11110000B
			MOV	A,KEYBOARD
			CJNE	A,#11110000B,KW
			RET */
;**************************************
KEYDELAY:	                        ;按键延迟,并且发出声音
			PUSH	00H
			PUSH	01H
			MOV	R0,#80
LOOP1:			MOV	R1,#255
LOOP2:			;CPL	BBB
			DJNZ	R1,LOOP2
			DJNZ	R0,LOOP1
			POP	01H
			POP	00H
			RET

NOP
NOP
AJMP STAR
NOP
NOP
;*******************************
;**********************************
;六位BCD码转三字节二进制码子程序
;入口:GEWEI、 SHIWEI、 BAIWEI、 QIANWEI、 WANWEI、 SHIWAN(个、十、百、千、万、十万位)
;出口:OUTPUTL、OUTPUTM、OUTPUTH 高、中、低八位
;占用资源A,B,GEWEI,SHIWEI,BAIWEI,QIANWEI,WANWEI,SHIWAN,66H,67H,68H,
;69H,6AH,6BH,6CH,6DH,6EH,3FH,70H,71H,OUTPUTH,OUTPUTM
;*****************************************  
KH:	 		MOV OUTPUTL,#0
			MOV OUTPUTM,#0
			MOV OUTPUTH,#0
			MOV TMP3,#0
			MOV TMP6,#0
			MOV TMP7,#0
;--------------------------------
			MOV A,SHIWEI  ;先转换个,十位
			SWAP A
			ORL A,GEWEI
			CALL BCDH
			MOV OUTPUTL,A
;--------------------------------	
			MOV A,QIANWEI  ;再转换百千位
			SWAP A
			ORL A,BAIWEI
			CALL BCDH
			MOV TMP3,A
			MOV TMP6,#0  ;*100
			MOV TMP7,#64H
			CALL MULD
			MOV A,TMP7        ; 	    TMP3(MSB) TMP6 TMP7 
			ADD A,OUTPUTL    ;    + OUTPUTH OUTPUTM OUTPUTL 
			MOV OUTPUTL,A	; =OUTPUTH(MSB) OUTPUTM OUTPUTL
			MOV A,TMP6	
			ADDC A,OUTPUTM
			MOV OUTPUTM,A
			MOV A,TMP3	
			ADDC A,OUTPUTH
			MOV OUTPUTH,A
;--------------------------------
			MOV A,SHIWAN  ;最后转换万,十万位
			SWAP A
			ORL A,WANWEI
			CALL BCDH
			MOV TMP3,A
			MOV TMP6,#27H   ;*10000=2710H
			MOV TMP7,#10H
			CALL MULD
;--------------------------------
			MOV A,TMP7        ; 	    TMP3(MSB) TMP6 TMP7 
			ADD A,OUTPUTL    ;    + OUTPUTH OUTPUTM OUTPUTL 
			MOV OUTPUTL,A	; =OUTPUTH(MSB) OUTPUTM OUTPUTL
			MOV A,TMP6	
			ADDC A,OUTPUTM
			MOV OUTPUTM,A
			MOV A,TMP3	
			ADDC A,OUTPUTH
			MOV OUTPUTH,A
;--------------------------------
			MOV OUTPUTH,OUTPUTL
			MOV OUTPUTL,A
			RET

NOP
NOP
AJMP STAR
NOP
NOP
;*****************************************
;三字节除双字节商为三字节除法子程序
;被除数:BEICHUL(被除数最低位)~BEICHUH
;(被除数最高位)
;除数:CHUSHUL(除数最低位),CHUSHUH(除数最高位)
;商:	 SHANGL(商最低位)~SHANGH(商最高位)
;余数:YUSHUL(余数低位)~YUSHUH(余数高位)
;额外占用资源:	R1,R2,R7
;------------------------------
CHUFA:		MOV	R7,#18H
			MOV	SHANGH,#0
			MOV	SHANGM,#0
			MOV	SHANGL,#0
			MOV	YUSHUH,#0
			MOV	YUSHUL,#0		
SH_32DIV:		CLR	C
;----------------------------
		MOV	A,BEICHUL
		RLC	A
		MOV	BEICHUL,A
;----------------------------
		MOV	A,BEICHUM
		RLC	A
		MOV	BEICHUM,A
;----------------------------
		MOV	A,BEICHUH
		RLC	A
		MOV	BEICHUH,A
;----------------------------
		MOV	A,YUSHUL
		RLC	A
		MOV	YUSHUL,A
;----------------------------
		MOV	A,YUSHUH
		RLC	A
		MOV	YUSHUH,A
;----------------------------
		MOV	A,SHANGL
		RLC	A
		MOV	SHANGL,A
;----------------------------
		MOV	A,SHANGM
		RLC	A
		MOV	SHANGM,A
;----------------------------
		MOV	A,SHANGH
		RLC	A
		MOV	SHANGH,A
;+++++++++++++++++++++++++++++
		CLR	C
		MOV	A,YUSHUL
		SUBB	A,CHUSHUL
		MOV	R1,A
;-----------------------------
		MOV	A,YUSHUH
		SUBB	A,CHUSHUH
		MOV	R2,A
;+++++++++++++++++++++++++++++
		JC	TO_LOOP1
		INC	SHANGL
		MOV	A,R1
		MOV	YUSHUL,A
		MOV	A,R2
		MOV	YUSHUH,A
TO_LOOP1:	DJNZ	R7,SH_32DIV
;++++++++++++++++++++++++++++++++++
  		RET

NOP
NOP
AJMP STAR
NOP
NOP
;******************************************
SEND_PLL:	MOV	LOCK_DELAY,#0    ;将锁定检测清零
		MOV	LOCK_DELAY1,#0
		MOV	GEWEI,DISGE		;将显示BCD值送到二进制合成程序
		MOV	SHIWEI,DISSHI
		MOV	BAIWEI,DISBAI
		MOV	QIANWEI,DISQIAN
		MOV	WANWEI,DISWAN
		MOV	SHIWAN,DISSHIWAN
		LCALL	KH
;-------------------------------------------------
;----------------------------------------
		MOV	BEICHUH,OUTPUTL
		MOV	BEICHUM,OUTPUTM
		MOV	BEICHUL,OUTPUTH
;--------------------------------------
;---------------------------------------
;38000KHZ对应二进制数为:9470H	
ADDIF:		;CLR	C
		;	MOV	A,BEICHUL
		;	 ADD	A,#70H
		;	MOV	BEICHUL,A
		;	MOV	A,BEICHUM
		;	ADDC	  A,#94H
		;	MOV	BEICHUM,A
		;	MOV	A,BEICHUH
		;	ADDC	A,#0

		;	MOV	BEICHUH,A
;-------------------------------------
;-------------------------------------
		CLR	C
		MOV	A,BEICHUL
		SUBB	A,#0C8H
		MOV	A,BEICHUM
		SUBB	A,#20H
		MOV	A,BEICHUH
		SUBB	A,#03H
		JC	SETUP_LHF  
;---------------------------------------
		MOV	A,BEICHUL
		SUBB	A,#98H
		MOV	A,BEICHUM
		SUBB	A,#8DH
		MOV	A,BEICHUH
		SUBB	A,#07H
		JC	SETUP_VHF
;---------------------------------------
SETUP_UHF:	MOV	PB,#01111111B 
		AJMP	CHUFSTEP
SETUP_VHF:	MOV	PB,#10011111B
		AJMP	CHUFSTEP
SETUP_LHF:	MOV	PB,#10101111B
		AJMP	CHUFSTEP    
;----------------------------------------
;将合成的二进制加中频38MHZ后除以步进频率50(khz)

CHUFSTEP:	MOV	CHUSHUH,#0		
		MOV	CHUSHUL,#50
		LCALL	CHUFA
;----------------------------------------
		MOV	DB2,SHANGL
		MOV	DB1,SHANGM
		MOV	ADBW,#11000010B
		MOV	CB,#10001000B
;		ACALL	DISLCD3
SEND_TURNER:		
		ACALL	WRITE_TURN
		;LCALL  W24C16
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;*************************************
;*************************************
DISLCD1:	MOV	ZLING,#0C4H;#86H    #0c6(16*2	;显示键盘输入频率值
		ACALL	WRTC
;-------------------------------------		
		MOV R0,#(DISSHIWAN+1)

DISLCD1_4:		
		DEC R0
		MOV	A,@R0	;显示100M位
		MOV	DPTR,#ADDR_LCD
		MOVC	A,@A+DPTR
		MOV	SHUJU,A
		ACALL	WRTS
		MOV A,R0
		CJNE A,#(DISQIAN),DISLCD1_3
		MOV	SHUJU,#00101110B  ;显示小数点
		ACALL	WRTS
DISLCD1_3:
		CJNE A,#DISGE,DISLCD1_4
;--------------------------------
		MOV SHUJU,#00110000B;显示0
		ACALL	WRTS
		MOV SHUJU,#00110000B;显示0
		ACALL	WRTS
		;RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-------------------------------------
		MOV	SHUJU,#01001101B 	;显示M
		ACALL	WRTS
;--------------------------------------
		MOV	SHUJU,#01001000B	;显示H
		ACALL	WRTS		
;--------------------------------------
		MOV	SHUJU,#01111010B	;显示z
		ACALL	WRTS

;---------------------------------------
		LCALL 	DIV_8
STEP_DIS:	MOV	A,STEP   ;显示步进位光标
		ADD	A,#83H+40H
		MOV	ZLING,A		
		ACALL	WRTC
		;MOV	SHUJU,#01111111B	;显示左箭头
		;ACALL	WRTS

		
		RET

NOP
NOP
AJMP STAR
NOP
NOP

;****************************************************		
ADDR_LCD:	DB	00110000B	;字符“0”的地址
		DB	00110001B	;字符“1”的地址
		DB	00110010B	;字符“2”的地址
		DB	00110011B	;字符“3”的地址
		DB	00110100B	;字符“4”的地址
		DB	00110101B	;字符“5”的地址
		DB	00110110B	;字符“6”的地址
		DB	00110111B	;字符“7”的地址
		DB	00111000B	;字符“8”的地址
		DB	00111001B	;字符“9”的地址
		DB	01000001B	;字符“A”的地址
		DB	01000010B	;字符“B”的地址
		DB	01000011B	;字符“C”的地址
		DB	01000100B	;字符“D”的地址
		DB	01000101B	;字符“E”的地址
		DB	01000110B	;字符“F”的地址
;---------------------------------------------
		DB	01001000B	;字符“H”的地址
		DB	01001011B	;字符“K”的地址
		DB	01111010B	;字符“z”的地址
		DB	00111101B	;字符“=”的地址
		DB	00101110B	;字符“·”的地址
		DB	01001101B	;字符“M”的地址
;*******************************************************
;********************************
;以下为LCD各个子程序程序应用部分
;********************************
;初始化LCD
;****************************************
INITLCD:	
		CLR	RS		;送数据30H到命令寄存器
		CLR	RW
		SETB	E		;LCD_DB=30H	
		CLR 	LCD_DB7    
		CLR 	LCD_DB6	
		SETB	LCD_DB5
		CLR	LCD_DB4
		LCALL 	DELAYLCD
		CLR 	E
		LCALL 	DELAY_STAR
		MOV	ZLING,#22H  	;设置位4位总线,
		ACALL	WRTC
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;****************************************
;忙标志检测子程序
READBF:		SETB	LCD_DB7	
		NOP		
		NOP
		CLR 	RS
		NOP
		SETB 	RW
WAITBF:		NOP
		SETB 	E
		NOP
		NOP
		NOP
		JB	BF,WAITBF
		CLR E
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;*********************************
;写指令代码子程序
WRTC:		ACALL	READBF  ;读忙标志
;--------------------------------
		CLR	RS
		CLR	RW
		NOP
;--------------------------------
		SETB	E
		MOV 	A,ZLING	;将高四位数据送出
		MOV 	C,ACC.7
		MOV 	LCD_DB7,C
		MOV 	C,ACC.6
		MOV 	LCD_DB6,C
		MOV 	C,ACC.5
		MOV 	LCD_DB5,C
		MOV 	C,ACC.4
		MOV 	LCD_DB4,C
		CLR	E
;--------------------------------
		NOP
		NOP
		NOP
		SETB	E
		MOV 	A,ZLING	;将底四位数据送出
		MOV 	C,ACC.3
		MOV 	LCD_DB7,C
		MOV 	C,ACC.2
		MOV 	LCD_DB6,C
		MOV 	C,ACC.1
		MOV 	LCD_DB5,C
		MOV 	C,ACC.0
		MOV 	LCD_DB4,C
		CLR	E
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;**********************************
DELAYLCD:MOV	R6,#5
LOP11:	MOV	R7,#5
LOP22:	DJNZ	R7,LOP22
LOP33:	DJNZ	R6,LOP11
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;**********************************
;写数据寄存器字节子程序
WRTS:		ACALL	READBF
;--------------------------------
		SETB	RS
		CLR	RW
;--------------------------------
		SETB	E
		MOV 	A,SHUJU;将高四位数据送出
		MOV 	C,ACC.7
		MOV 	LCD_DB7,C
		MOV 	C,ACC.6
		MOV 	LCD_DB6,C
		MOV 	C,ACC.5
		MOV 	LCD_DB5,C
		MOV 	C,ACC.4
		MOV 	LCD_DB4,C
		CLR	E
;--------------------------------
		NOP
		NOP
		NOP
		SETB	E
		MOV 	A,SHUJU;将底四位数据送出
		MOV 	C,ACC.3
		MOV 	LCD_DB7,C
		MOV 	C,ACC.2
		MOV 	LCD_DB6,C
		MOV 	C,ACC.1
		MOV 	LCD_DB5,C
		MOV 	C,ACC.0

⌨️ 快捷键说明

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