?? pll.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 + -