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

📄 fil1256高频头程序.asm

📁 采用FIL1256一体化高频头制作的信号发生器
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;作者:BG7TBL
;email:bg7tbl@126.com
;日期:2007-11-07
;编译环境KEIL C7.10
;FI1256MK2资料:
;    |------------------------------------------------------|
; ---|							   |
;|   |							   |
; ---|							   |
;    |							   |
;    |	                 FI1256MK2			   |
;    |							   |
;    |                        				   |
;    |------------------------------------------------------|
;           |   |   |   |   |          |   |   |   |   |
;          11  12  13  14  15         21  22  23  24  25
;          Vt   |  SCL SDL AS         空 6.5M AV   |  AF
;               |                                  |
;              调谐电压+5V                         中频电压+5V            
;
;
;频率范围:49.75---863.25(接收)
;采用芯片:混频:TDA5736,频率合成:TSA5523,中放:TDA9800
;带AFC状态输出,
;输入采用三个场MOS管调谐放大,一个IC负责本振和混频,频率切换由PLL
;控制,PLL步进:31.5K,50K,62.5K,内部含控制DC-DC信号输出,
;中频38.9M,图象34.47M,声音1 32.4M 声音2 32.16M
;采用高中频:低频段 49.75---170.00M
;	    中频段 170.00---450.00M
;	    高频段 450.00---863.25M
;ADC字节读出状态(AFC输出的频率偏差,用于自动搜索)
;            输入电压范围       偏差        读出数字
;            0.0--0.15V         -125K       00
;            0.15--0.3V         -62.5K      01
;            0.3--0.45V         0           02
;            0.45--0.6V         +62.5K      03
;            0.6--1.0V          +125K       04
;
;写模式
;		7(MSB)	6	5	4	3	2	1	0(LSB)	ACK
;地址		1	1	0	0	0	MA1	MA0	0	ACK
;分频器1	0	n14	n13	n12	n11	n10	n9	n8	ACK	
;分频器2	n7	n6	n5	n4	n3	n2	n1	n0	ACK
;控制1		1	CP	T2	T1	T0	RSA	RSB	OS	ACK
;控制2  	P7	P6	P5	P4	P3	P2	P1	P0	ACK

;MA0,MA1地址选择,PLL供电电压Vs=+5V
;	MA1	MA2	地址	PIN15(AS)电压
;	0	0	C0	0--0.1Vs
;	0	1	C2	0.2--0.3Vs
;	1	0	C4	0.4--0.6Vs
;	1	1	C6	0.9--1Vs
;如果AS空,自动选择C2

;n14--n0:内部可编程分频器

;控制字节
;CP:泵电源选择 1 快速调谐(泵电流250uA) 0 慢速调谐(泵电流50uA)  
;T1=T2=0,T0=1:正常模式
;OS泵电源输出控制  0 正常模式 1 输出为高阻,同时升压停止,无调谐电压,可外部调节
;RSA,RSB步进频率选择
;	RSA	RSB	步进	
;	X	0	50K
;	0	1	31.25K(慢速扫描)
;	1	1	62.5k(正常扫描)

;波段切换
;       P7 P6 P5 P4 P3 P2 P1 P0 
;低频段  1  0  1  0  X  0  0  0   0XA0 
;中频段  1  0  0  1  X  0  0  0   0X90
;高频段  0  0  1  1  X  0  0  0   0X30	

;写入的次序(写模式):
;1,开始--地址--ACK--分频器1--ACK--分频器2--ACK--控制1--ACK--控制2--ACK--停止
;2,开始--地址--ACK--控制1--ACK--控制2--ACK--分频器1--ACK--分频器2--ACK--停止
;3,开始--地址--ACK--分频器1--ACK--分频器2--ACK--控制1--ACK--停止
;4,开始--地址--ACK--分频器1--ACK--分频器2--ACK--停止

;建议写入次序:
;输入频率高与当前频率:采用1
;输入频率低于当前频率:采用2

;读模式
;	7(MSB)	6	5	4	3	2	1	0	ACK
;地址	1	1	0	0	0	MA1	MA0	1	ACK	
;状态	POR	FL	I2	I1	I0	A2	A1	A0	ACK

;POR=POWER ON RESET 当供电电压低于3V时=1;最后一个数据输入PLL后为0
;FL   =1 锁定,至少需要8个监相周期才能锁定   =0 失锁
;I2--I0  对应于P2--P0口的状态
;A2--A0  AFC状态

;建议读模式:
;1,开始--地址--ACK--状态--ACK--状态--    --


;24c16资料,2K字节 E2PROM
;                     **********   **********
;                     *         ***         *
;      NC         A0 **  1                8 ** VCC        +5V
;                     *                     *
;      NC         A1 **  2                7 ** WP        悬空或接地,正常读写
;                     *                     *
;      NC         A2 **  3                6 ** SCL       SCL
;                     *                     *
;     GND        VSS **  4                5 ** SDA       SDA
;                     *         24C16       *
;                     ***********************
;器件寻址:1 0 1 0 A10 A9 A8 R/W(LSB)

;MAX813资料,看门狗
;                     **********   **********
;                     *         ***         *
;      接WDO      MR **  1                8 ** WDO      接MR
;                     *                     *
;      +5V       VCC **  2                7 ** RST      接2051 RESET 
;                     *                     *
;      GND       GND **  3                6 ** WDI      喂狗
;                     *                     *
;      GND       PFI **  4                5 ** PFO      NC
;                     *       MAX813        *
;                     ***********************
;

;LM358资料,双运放
;                     **********   **********
;                     *         ***         *
;              A-OUT **  1                8 ** VCC
;                     *                     *
;              A-IN- **  2                7 ** B-OUT
;                     *                     *
;              A-IN+ **  3                6 ** B-IN-
;                     *                     *
;      GND       VEE **  4                5 ** B-IN+   
;                     *        LM358        *
;                     ***********************
;

;AT89C2051,2K FLASH ROM
;                          **********   **********
;                          *         ***         *
;  MAX813-WDI     RST/VPP **  1               20 ** VCC         +5V
;                          *                     *
;               (RXD)P3.0 **  2               19 ** P1.7        SCL
;                          *                     *
;  LCD_E        (TXD)P3.1 **  3               18 ** P1.6        SDA
;                          *                     *
;  11.0592MHZ       XTAL2 **  4               17 ** P1.5        LCD_DB7
;                          *                     *
;                   XTAL1 **  5               16 ** P1.4        LCD_DB6
;                          *                     *
;  KEY_STEP   (/INT0)P3.2 **  6               15 ** P1.3        LCD_DB5
;                          *                     *
;             (/INT1)P3.3 **  7               14 ** P1.2        LCD_DB4
;                          *                     *
;  CODERA        (T0)P3.4 **  8               13 ** P1.1(AIN1)  WDT
;                          *                     *
;  CODERB        (T1)P3.5 **  9               12 ** P1.0(AIN0)  LCD_RW
;                          *                     *
;                     GND **  10              11 ** P3.7        LCD_RS
;                          *      AT89C2051      *
;                          ***********************


  
;LCD资料
; ---------------------------------     1 = GND
; |                               |     2 = VCC
; |                               |     3 = V0
; |    LM054 8-Char LCD-Module    |     4 = D/C
; |                               |     5 = R/W
; |   14............1             |     6 = ENA
; ---------------------------------     7-14 = D0-D7

; V0: VCC-4.5V, D0..D3 not used in 4-bit mode
;+++++++++++++++++++++++++++++++++++++++
			DEBUG EQU 1
			BEICHUH		DATA	20H
			BEICHUM		DATA	21H
			BEICHUL		DATA	22H
;--------------------------------------
			CHUSHUH		DATA	23H
			CHUSHUL		DATA	24H
;----------------------------------------
			SHANGH		DATA	28H
			SHANGM		DATA	29H
			SHANGL		DATA	2AH
;--------------------------------------
			YUSHUH		DATA	2BH
			YUSHUL		DATA	2CH 
			BUF0 		DATA 	2DH
			BUF1		DATA	2EH
			BUF2		DATA 	2FH
;+++++++++++++++++++++++++++++++++++++++
;六位BCD码转三字节二进制码子程序用
			GEWEI		DATA	30H     ;1
			SHIWEI		DATA	31H     ;10
			BAIWEI		DATA	32H     ;100
			QIANWEI		DATA	33H     ;1000
			WANWEI		DATA	34H     ;10000
			SHIWAN		DATA	35H     ;100000
			OUTPUTL		DATA	36H     ;输出VL
			OUTPUTM		DATA	37H     ;输出VM
			OUTPUTH		DATA	38H     ;输出UHF
;+++++++++++++++++++++++++++++++++++++++
;定义键盘及显示用 
			DISGE		DATA	39H      ;显示个位
			DISSHI		DATA	3AH      ;显示十位
			DISBAI		DATA	3BH      ;显示百位
			DISQIAN		DATA	3CH      ;显示千位
			DISWAN		DATA	3DH      ;显示万位
			DISSHIWAN	DATA	3EH    ;显示十万位
			KEYBUFF		DATA	3FH        ;键值缓冲
			
;+++++++++++++++++++++++++++++++++++++++
			ADBW		DATA	40H  ;写入器件的地址
			ADBR		DATA	41H  ;读出器件的地址
			DB1		DATA	42H  ;数据1
			DB2		DATA	43H  ;数据2
			CB		DATA	44H
			PB		DATA	45H
			R_DATA		DATA 	46H
			PLL_FSTEP	DATA	47H   ;PLL步进
			LOCK_DELAY	DATA	48H   ;检测锁定延迟,低位
			LOCK_DELAY1	DATA	49H   ;高位
;+++++++++++++++++++++++++++++++++++++++
;以下为LCD应用程序的初始化程序,必须放在程序的开头
			RS	BIT	P3.7 
    
			RW	BIT	P1.0
			;E	BIT	P1.1
			;RW	BIT	P3.0
			E	BIT	P3.1

			BF	BIT	P1.5
			LCD_DB7	BIT	P1.5      
			LCD_DB6	BIT	P1.4			
			LCD_DB5	BIT	P1.3
			LCD_DB4	BIT	P1.2
			;LCD_DB3	BIT	P3.3
			;LCD_DB2	BIT	P3.2
			;LCD_DB1	BIT	P3.1
			;LCD_DB0	BIT	P3.0
			ZLING	DATA	4AH         ;指令
			SHUJU	DATA	4BH         ;数据
			STEP	DATA	4CH		;步进
;+++++++++++++++++++++++++++++++++++++++
			WDT		BIT	P1.1
			SCL		BIT 	P1.7
			SDA		BIT 	P1.6
			;PLOCK_LED	BIT	P0.7   ;LOCK LED
			;BBB		BIT	P0.6   ;VOICE OUT
			CODEA           BIT     P3.4	;接编码器A脚 
                        CODEB      	BIT 	P3.5	;接编码器B脚
			KEY_STEP	BIT	P3.2    ;步进按扭
			;KEYBOARD	DATA	P1		
/*;66h-71h
			TMP0		DATA	66H  ;临时寄存器
			TMP1		DATA	67H
			TMP2		DATA	68H
			TMP3		DATA	69H
			TMP4		DATA	6AH
			TMP5		DATA	6BH
			TMP6		DATA	6CH
			TMP7		DATA	6DH
			TMP8		DATA	6EH
			TMP9		DATA	6FH
			TMP10		DATA	70H
			TMP11		DATA	71H
*/
			TMP0		DATA	10H  ;临时寄存器
			TMP1		DATA	11H
			TMP2		DATA	12H
			TMP3		DATA	13H
			TMP4		DATA	14H
			TMP5		DATA	15H
			TMP6		DATA	16H
			TMP7		DATA	17H
			TMP8		DATA	18H
			TMP9		DATA	19H
			TMP10		DATA	1AH
			TMP11		DATA	1BH

;****************************************
;**************************************
			ORG 0000H
			AJMP STAR
			ORG 0003H
			RETI
			ORG 000BH
			RETI
			ORG 0013H
			RETI
			ORG 001BH
			RETI
			ORG 0023H
			RETI
			ORG 002BH
			RETI
			ORG 0030H
STAR:			;LCALL	DELAY_STAR
			LCALL CLRWDT
			CLR	EA
			CLR	EA
			CLR	EA	
			MOV	DISGE,#0   ;显示433.000MHz
			MOV	DISSHI,#0
			MOV	DISBAI,#0
			MOV	DISQIAN,#3
			MOV	DISWAN,#3
			MOV	DISSHIWAN,#4
			MOV	STEP,#06H;步进:1-100M,2=10M,3-1M,4-0.1M,5-10K,6-1K
			MOV	SP,#50H
			LCALL 	R24C16
;-------------------------------------
			MOV	LOCK_DELAY,#0
			MOV	LOCK_DELAY1,#0
;*******************************
		LCALL 	INITLCD 			;初始化;LCD 28 08 01 06			
		MOV	ZLING,#28H	;28H:四位总线,2行显示,5x7点阵  
		ACALL	WRTC		;#111000B	;8位数据总线,2行显示,5x7点阵  
		MOV	ZLING,#1B		;清屏
		ACALL	WRTC		
		MOV	ZLING,#10B		;归位,AC=0
		ACALL	WRTC				
		MOV	ZLING,#1110B;开显示,开光标,光标不闪;#1100B	;开显示,关光标,光标不闪动
		ACALL	WRTC
		;MOV	ZLING,#110B		;光标不动,显示全部右移
		;ACALL	WRTC
;***********************************
;***********************************
M:		LCALL	SEND_PLL	;将数据发送到高频头
		LCALL	DISLCD1		;显示数据
;*************************************
;矩阵键盘扫描,键盘接在P1口
L1:			
			;MOV	KEYBOARD,#11110000B        ;高四位为输入线
			;MOV	A,KEYBOARD
			;CJNE	A,#11110000B,HAVE_KEY
			LCALL CLRWDT
			SETB 	KEY_STEP
			JB 	KEY_STEP,L1_3
			LCALL 	KEYDELAY
			JB 	KEY_STEP,L1_3
			LCALL 	DATA_STEP
			JNB	KEY_STEP,$
L1_3:			ACALL	PLL_PLOCKTEST

			MOV 	A,LOCK_DELAY1  ;判断延迟是否为0,为0不进行延迟
			ORL 	A,LOCK_DELAY
			JZ 	L1_1;如果A为0,不进行延迟计数

			INC 	LOCK_DELAY    ;延迟检测锁定标志
			MOV 	A,LOCK_DELAY  ;如果锁定,大概四秒检测一次
			JNZ 	L1_1
			INC 	LOCK_DELAY1
			MOV 	A,#0FH
			ANL 	A,LOCK_DELAY1   
			MOV 	LOCK_DELAY1,A
L1_1:			
			AJMP 	CODER		;跳到判断编码器正反转


;--------------------------------
;读高频头内部处理的数据
PLL_PLOCKTEST:		
			MOV A,LOCK_DELAY1  	;判断延迟是否为0,为0开始检测
			ORL A,LOCK_DELAY
			JNZ READ_DELAY		;如果A为0,可以检测
;--------------------------------
			ACALL	READ_DELAY     	;用R0。R1,延迟
			ACALL	READ_TURN
			MOV	A,R_DATA
			MOV	C,ACC.6		;读锁定指示到PLOCK_LED
;--------------------------------
			MOV	ZLING,#0C0H	;#86H	;如果锁定显示L		
			ACALL	WRTC			;如果失锁显示UL
			MOV	A,R_DATA
			MOV	C,ACC.6		;读锁定指示到PLOCK_LED
			JC 	PLL_PLOCKTEST1
			MOV	SHUJU,#01010101B	;显示'U'
			ACALL	WRTS
;--------------------------------
			MOV LOCK_DELAY1,#0	;如果失锁,一直检测
			MOV LOCK_DELAY,#0
			AJMP 	PLL_PLOCKTEST2
PLL_PLOCKTEST1:		MOV	SHUJU,#10100000B	;显示' '
			ACALL	WRTS
			INC  LOCK_DELAY			
PLL_PLOCKTEST2:		MOV	SHUJU,#01001100B	;显示'L'
			ACALL	WRTS
			LCALL	STEP_DIS    ;显示步进光标
;----------------------------------
READ_DELAY:		PUSH	00H                     ;延迟
			PUSH	01H
			MOV	R0,#20
R_LOOP1:		MOV	R1,#20
R_LOOP2:		DJNZ	R1,R_LOOP2
			DJNZ	R0,R_LOOP1
			POP	01H
			POP	00H
			RET

NOP
NOP
AJMP STAR
NOP
NOP
/*		
;--------------------------------
HAVE_KEY:		;MOV	P1,#11111110B
			;JNB	P1.6,K_SETF		;K0按下就转到数字设置
			;AJMP	L1
K_SETF:	;ACALL	KEYWAIT
			ACALL	K_SHUZI
			ACALL	SEND_PLL	;将数据发送到高频头
			AJMP	L1		
;-----------------------------------
;以下为输入数字的键盘扫描
;------------------------------------
K_SHUZI:	NOP
LINE1:	MOV	KEYBOARD,#11111110B
			JNB	KEYBOARD.6,K0
			JNB	KEYBOARD.5,K_ENTER
			JNB	KEYBOARD.4,K_ESC
;--------------------------------
LINE2:		MOV	KEYBOARD,#11111101B
			JNB	KEYBOARD.6,K3
			JNB	KEYBOARD.5,K6
			JNB	KEYBOARD.4,K9
;-------------------------------
LINE3:		MOV	KEYBOARD,#11111011B
			JNB	KEYBOARD.6,K2
			JNB	KEYBOARD.5,K5
			JNB	KEYBOARD.4,K8
;-------------------------------
LINE4:		MOV	KEYBOARD,#11110111B
			JNB	KEYBOARD.6,K1
			JNB	KEYBOARD.5,K4
			JNB	KEYBOARD.4,K7
;--------------------------------
			AJMP	LINE1
;-------------------------------
K0:			MOV	KEYBUFF,#0
			AJMP	YIWEI
K1:			MOV	KEYBUFF,#1
			AJMP	YIWEI
K2:			MOV	KEYBUFF,#2
			AJMP	YIWEI
K3:			MOV	KEYBUFF,#3
			AJMP	YIWEI
K4:			MOV	KEYBUFF,#4
			AJMP	YIWEI
K5:			MOV	KEYBUFF,#5
			AJMP	YIWEI
K6:			MOV	KEYBUFF,#6
			AJMP	YIWEI
K7:			MOV	KEYBUFF,#7
			AJMP	YIWEI
K8:			MOV	KEYBUFF,#8
			AJMP	YIWEI
K9:			MOV	KEYBUFF,#9
			AJMP	YIWEI
;---------------------------------------
K_ENTER:		LCALL	KEYWAIT

			RET
K_ESC:		LCALL	KEYWAIT
			LCALL	DATA_STEP
			RET
;----------------------------------------
YIWEI:		ACALL	KEYWAIT
			MOV	DISSHIWAN,DISWAN	;将数据移位
			MOV	DISWAN,DISQIAN
			MOV	DISQIAN,DISBAI
			MOV	DISBAI,DISSHI
			MOV	DISSHI,DISGE
			MOV	DISGE,KEYBUFF
			ACALL	DISLCD1
			AJMP	LINE1   ;按下数字键后一直在扫描键盘 */
;**************************************
;*************************************
DATA_STEP:			
			MOV 	A,STEP
			ANL 	A,#07H;
			DEC	A	;步进键的处理
			MOV 	STEP,A
			CJNE	A,#04H,DATA_STEP1 ;是否在小数点位,否则加一			
			MOV	STEP,#03H
DATA_STEP1:		
			CJNE	A,#00H,DATA_STEP2			
			MOV	STEP,#06H   ;最后一位不要	
DATA_STEP2:		
			LCALL	DISLCD1
			RET

NOP
NOP
AJMP STAR
NOP
NOP
;***************************************
CODER:				;判断编码器是正转还是反转		
			SETB 	CODEA
			SETB 	CODEB
			MOV 	A,#00H
			MOV 	C,CODEA   ;将数据读入ACC,P2.3,P2.4--*ACC.0,ACC.1
			CPL 	C
			MOV 	ACC.0,C
			MOV 	C,CODEB
			CPL 	C
			MOV 	ACC.1,C
			MOV 	BUF1,A    	;BUF1存放后来的数据
			JZ 	COM_CODE	;如果刚读入的数据为0,进行比较
			MOV 	BUF0,BUF1
			AJMP 	L1
COM_CODE: 
			MOV 	A,BUF0  	;BUF0存放原来的数据
;--------------------------------
			CJNE 	A,#03H,DEC1
INC1: 						;执行加一操作
  			MOV 	BUF0,BUF1
			MOV	A,STEP
			CJNE	A,#01H,INC_2   ;判断应该在那一位加一
			AJMP	INC_SHIWAN
INC_2:			
			CJNE	A,#02H,INC_3
			AJMP	INC_WAN
INC_3:			
			CJNE	A,#03H,INC_4
			AJMP	INC_QIAN
INC_4:			
			CJNE	A,#05H,INC_5
			AJMP	INC_BAI
INC_5:			
			CJNE	A,#06H,INC_6
			AJMP	INC_SHI
INC_6:			
			CJNE	A,#07H,INC1_1
			AJMP	INC_GE
;--------------------------------
INC_GE:			
			INC	DISGE   ;数据加1KHz
			MOV	A,DISGE
			CJNE 	A,#0AH,INC1_1
			MOV	DISGE,#00H
INC_SHI:		
			MOV	A,DISSHI;数据加50KHz

⌨️ 快捷键说明

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