📄 ad9851测试.asm
字号:
MOV R6,#00H
MOV R5,#75H ;30000K(30M) 直接用频率转换成16进制即可(单位KHz)
MOV R4,#30H ;频率设定低位
ACALL JSPL ;频率字计算子程序(频率值放在R7~R4中单位K)
MOV R0,#FTW1 ;频率数据,最高字节
MOV R1,#04H ;F1起始地址(04H~09H)
MOV R2,#6 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
;*******扫频频率步进*********************************************************
MOV R7,#00H ;频率设定高位
MOV R6,#00H
MOV R5,#00H ;100K 直接用频率转换成16进制即可(单位KHz)
MOV R4,#64H ;频率设定低位
ACALL JSPL ;频率字计算子程序(频率值放在R7~R4中单位K)
MOV R0,#FTW1 ;步进频率数据,最高字节
MOV R1,#10H ;步进频率起始地址(10H~15H)
MOV R2,#6 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
;*******扫频驻留时间************************************************************************
;驻留时间=(N+1)*系统时钟周期 计算方法:N=驻留时间(us)*系统频率(MHz)-1 (N<=20位)
mov ftw1,#00H ;00 75 30 (100uS\300M)
mov ftw2,#75h ;
mov ftw3,#30h ;驻留时间数据 100us
MOV R0,#FTW1 ;驻留时间数据,最高字节
MOV R1,#1AH ;驻留时间起始地址(1AH~1CH)
MOV R2,#3 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
;*******扫频时周期性产生外部更新时钟****************************************************
MOV address,#1FH ;模式控制
acall w_address
MOV FTW,#86H ;模式由D4D3D2位决定、D7位ACC1=1扫频模式时由更新脉冲使其周期进行
acall w_ftw ;D0位=0外部时钟更新、D0位=1内部时钟更新
MS4A: mov p0,#04h ;端口状态,并行编程模式
setb con_clk
setb UPDCLK ;外部时钟更新脉冲
clr UPDCLK
clr con_clk
MOV TIMER5,#26 ;延时=TIMER5*1MS 26ms
acall D1MS ;(延时/驻留时间)*频率步长=扫描带宽
;ACALL D2_5MS
ajmp MS4A
MS5: CJNE A,#05H,MS5 ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
MOV address,#1FH ;模式控制
acall w_address
MOV FTW,#24H ;模式由D4D3D2位决定、D7位ACC1=1扫频模式时由更新脉冲使其周期进行
acall w_ftw ;D0位=0外部时钟更新、D0位=1内部时钟更新
mov address,#21h ;幅度字高字节地址
acall w_address
mov ftw,#0ffh ;幅度字高字节
acall w_ftw
mov address,#22h ;幅度字低字节地址
acall w_address
mov ftw,#0ffh ;幅度字低字节
acall w_ftw
;*******起始频率*********************************************************
MOV R7,#00H ;频率设定高位
MOV R6,#00H
MOV R5,#75H ;30000K(30M)
MOV R4,#30H ;频率设定低位
ACALL JSPL ;频率字计算子程序(频率值放在R7~R4中单位K)
MOV R0,#FTW1 ;频率数据,最高字节
MOV R1,#04H ;F1起始地址(04H~09H)
MOV R2,#6 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
;*******终止频率***********************************************************
MOV R7,#00H ;频率设定高位
MOV R6,#00H
MOV R5,#79H ;31000K(31M)
MOV R4,#18H ;频率设定低位
ACALL JSPL ;频率字计算子程序(频率值放在R7~R4中单位K)
MOV R0,#FTW1 ;频率数据,最高字节
MOV R1,#04H ;F1起始地址(04H~09H)
MOV R2,#6 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
;*******频率步进*********************************************************
MOV R7,#00H ;频率设定高位
MOV R6,#00H
MOV R5,#00H ;25K
MOV R4,#19H ;频率设定低位
ACALL JSPL ;频率字计算子程序(频率值放在R7~R4中单位K)
MOV R0,#FTW1 ;步进频率数据,最高字节
MOV R1,#10H ;步进频率起始地址(10H~15H)
MOV R2,#6 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
;*******驻留时间***************************************************************
;驻留时间=(N+1)*系统时钟周期 计算方法:N=驻留时间(us)*系统频率(MHz) (N<=20位)
mov ftw1,#04H ;04 93 E0 (1MS\300M)
mov ftw2,#93h
mov ftw3,#0E0h ;驻留时间数据
MOV R0,#FTW1 ;驻留时间数据,最高字节
MOV R1,#1AH ;驻留时间起始地址(1AH~1CH)
MOV R2,#3 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
AJMP $
FDQZY: MOV A,#255 ;放大器增益
clr EN
CLR SCLK
CLR SDATA
MOV R3,#8
CLR C
FDQZY1: RLC A
MOV SDATA,C
SETB SCLK
NOP
CLR SCLK
DJNZ R3,FDQZY1
SETB EN
RET
;*******写地址及数据***********************************
SEND: INC R0
INC R1
MOV address,R1
acall w_address
MOV A,@R0
MOV ftw,A
acall w_ftw
DJNZ R2,SEND
RET
;*******写地址子程序*********************************
w_address:mov P0,address
setb addr_clk
clr addr_clk
mov p0,#04h ;端口状态,并行编程模式
setb con_clk
setb wr
clr wr
setb UPDCLK ;外部时钟更新脉冲产生
clr UPDCLK
clr con_clk
ret
;*******数据字锁存子程序***************************************
w_ftw: MOV A,FTW ;数据格式旋转180 板子上U2的接法问题
MOV 20H,#00H ;由D7 D6 D5 D4 D3 D2 D1 D0
RRC A ; D0 D1 D2 D3 D4 D5 D6 D7
MOV 20H.7,C
RRC A
MOV 20H.6,C
RRC A
MOV 20H.5,C
RRC A
MOV 20H.4,C
RRC A
MOV 20H.3,C
RRC A
MOV 20H.2,C
RRC A
MOV 20H.1,C
RRC A
MOV 20H.0,C
mov p0,20H
setb ftw_clk
clr ftw_clk ;数据字锁存到外部寄存器
Ret
;***************************************************************************
MOV R7,#00H ;输出30M
MOV R6,#00H
MOV R5,#75H
MOV R4,#30H
mov TIMER5,#2
D100MS: MOV TIMER6,#200 ;100ms
D100MS1:MOV TIMER7,#248
DJNZ TIMER7,$
DJNZ TIMER6,D100MS1
DJNZ TIMER5,D100MS
ret
mov TIMER5,#2
D50MS: MOV TIMER6,#100 ;50ms
D50MS1: MOV TIMER7,#248
DJNZ TIMER7,$
DJNZ TIMER6,D50MS1
DJNZ TIMER5,D50MS
ret
mov TIMER5,#1
D10MS: MOV TIMER6,#20 ;10ms
D10MS1: MOV TIMER7,#248
DJNZ TIMER7,$
DJNZ TIMER6,D10MS1
DJNZ TIMER5,D10MS
ret
mov TIMER5,#1
D1MS: MOV TIMER6,#2 ;1ms
D1MS1: MOV TIMER7,#248
DJNZ TIMER7,$
DJNZ TIMER6,D1MS1
DJNZ TIMER5,D1MS
ret
D2_5MS: MOV TIMER6,#10 ;2.5ms
D2_5MS1:MOV TIMER7,#128
DJNZ TIMER7,$
DJNZ TIMER6,D2_5MS1
RET
D125US: MOV TIMER7,#61
DJNZ TIMER7,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -