📄 fil1256高频头程序.asm
字号:
;作者: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 + -