📄 1611.asm
字号:
;锁相环程序
#include ht46r47.inc
data .section 'data' ;数据节区
count1 db ? ;定义计数3变量,时间延时用
count2 db ? ;定义计数3变量,时间延时用
count3 db ? ;定义计数3变量,时间延时用
FREQ_NL db ? ;频道N值,调节此值可改变频率
FREQ_NH db ? ;频道N值,调节此值可改变频率
count4 db ? ;定义计数3变量,pll移位用 bit=2
count5 db ? ;定义计数4变量,pll移位用 bit=8
; PLLdatal db ?
;PLLdatam db ?
;PLLdatah db ?
;--------------------------------------------------
PLLdatal EQU [063H]
PLLdatam EQU [064H]
PLLdatah EQU [065H]
;-----------------------------------------------
code .section at 0 'code'
PLL_DATA EQU pa.5 ; PB.3
PLL_DATA_C EQU pac.5 ; PBC.3
PLL_LD EQU PB.1
PLL_LD_C EQU PBC.1
PLL_CLK EQU pa.4 ; PA.0
PLL_CLK_C EQU pac.4 ; PAC.0
PLL_LE EQU pa.6 ; PB.2
PLL_LE_C EQU pac.6 ; PBC.2
org 00h
jmp star
org 04h
jmp zz
org 08h
jmp zz
org 0ch
jmp zz
star:
clr intc
clr tmrc
clr tmr
clr pac ;将PA口设为输出,防止输入悬空
clr pbc ;将PB口设为输出,防止输入悬空
clr pdc ;将PD口设为输出,防止输入悬空
clr pa ;将PA口设为L,
clr pb ;将PB口设为L
clr pd ;将PD口设为L
; clr wdt
clr intc
; mov a,38h ;列:FREQ=745MHZ, 在phase=100khz时,N=7450=1D1A=0001 1101 0001 1010, FREQ_NH=1D FREQ_NL=1A
;mov FREQ_NH,a ;频率高字节赋值
;mov a,21h ;745MHZ
; mov FREQ_NL,a ;频率低字节赋值
MOV A,1CH
CPLA FREQ_NL
MOV A,84H
CPLA FREQ_NH
call pll
;------------------------------------------------------
pll: ;lmx1601 osc=4mhz phase detetor=100khz "+" "low"
clr PLL_CLK_C ;设pll的CLK脚为输出
CLR PLL_DATA_C ;设pll的DATA脚为输出
set PLL_LD_C ;设pll的LD脚为输输入
clr PLL_LE_C ;设pll的LE脚为输出
CLR PLL_CLK ;CLK置低
CLR pLL_DATA ;DATA置低
SET PLL_LE ;LE置高
Aux_R: ;00 0001 0100 0000 1100(0-----17bit)
mov a,00h ;00 ;CTL register
mov PLLDATAL,a
mov a,14h ;0001 0100 ;aux R Counter R=40,OSC=4MHZ
mov PLLDATAM,a
mov a,0Ch ;0000 1100 ;FoLD设置 ;Main LD /Crystal Mode
mov PLLDATAH,a
call shiftbit
Aux_N: ;可以不用加载,因为PLL的辅路不用
;10 0000 1011 1110 0000 (0-----17bit)
mov a,02h ;10 ;CTL register
mov PLLDATAL,a
mov a,0Bh ;0000 1011
mov PLLDATAM,a
mov a,0E0h ;1110 0000
mov PLLDATAH,a
call shiftbit
Main_R: ;01 0001 0100 0000 1100 (0-----17bit)
mov a,01h ;01 ;CTL register
mov PLLDATAL,a
mov a,14h ;0001 0100
mov PLLDATAM,a
mov a,0Ch ;0000 1100
mov PLLDATAH,a
call shiftbit
Main_N: ;11 0101 1000 1011 1000 (0-----17bit)
mov a,03h ;11 ;CTL register
mov PLLDATAL,a
mov a,FREQ_NL ;列:FREQ=745MHZ, 在phase=100khz时,N=7450=1D1A=0001 1101 0001 1010=1D1A, FREQ_NH=1D FREQ_NL=1A
mov PLLDATAM,a
mov a,FREQ_NH ;改变FREQ_NH 和 FREQ_NL的值即可改变频率
mov PLLDATAH,a
call shiftbit
pllwaitlock: ;等待锁相环锁住,返回
; clr wdt
call delay1s
sNz pll_ld ;判断LD是否为高,为H,退出PLL;为低,再发送PLL指令
ret
jmp pll
shiftbit:
CLR PLL_CLK
clr pll_le
NOP
NOP
mov a,8 ;移八位数据
mov count5,a
loop1:
CLR PLL_CLK ; set pll_clk
sz PLLDATAH.0
jmp loop11
clr pll_data
jmp loop12
loop11: set pll_data
nop
nop
loop12: SET PLL_CLK ;CLR pLL_CLK
rRc PLLDATAH
sdz count5
jmp loop1
mov a,8 ;移八位数据
mov count5,a
loop2:
CLR PLL_CLK ; set pll_clk
sz PLLDATAM.0 ;
jmp loop21
clr pll_data
jmp loop22
loop21: set pll_data
nop
nop
loop22: SET PLL_CLK ;clr pll_clk
rRc PLLDATAM
sdz count5
jmp loop2
mov a,2 ;移两位数据
mov count4,a
loop3:
CLR PLL_CLK ; set pll_clk
sz PLLDATAL.0 ;因为只有2位数,只检查.1即可
jmp loop31
clr pll_data
jmp loop32
loop31: set pll_data
nop
nop
loop32: SET PLL_CLK ;clr pll_clk
rRc PLLDATAL
sdz count4
jmp loop3
CLR PLL_CLK
CLR PLL_DATA
NOP
NOP
set pll_le
ret
;-----------------------------------------------------------------------
;pllwait:
; clr pa.5
; clr pa.6
; set pa.4
; call delay1s
; call pll
zz:
clr pa
delay1s : ;延时 43x43x43 + 43x43 + 43=81339us,加上其它语句约1秒钟
mov a,43
mov count1,a ;时间计数1 , 赋值
d3:
; mov a,43 ;可单独赋值,时间更细
mov count2,a ;时间计数2 , 赋值 ,重新赋值
d2:
; mov a,43 ;可单独赋值,时间更细
mov count3,a ;时间计数3 , 赋值 ,重新赋值
d1:
sdz count3
jmp d1
sdz count2
jmp d2
sdz count1
jmp d3
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -