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

📄 1611.asm

📁 ht46r47控制国半LMX1600锁相控制芯片的汇编源码。很有参考价值。
💻 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 + -