📄 ad9851测试.asm
字号:
;**************************************************************************
;AD9852测试程序
;**************************************************************************
FTW_CLK BIT P1.1 ;高电平有效,选中数据锁存器,低电平锁存
ADDR_CLK BIT P1.2 ;高电平有效,选中地址锁存器,低电平锁存
CON_CLK BIT P1.3 ;高电平有效,选中外部控制端驱运器,低电平锁存
UPDCLK BIT P0.0 ;更新时钟,上升沿锁存数据到编程寄存器
MRESET BIT P0.1 ;主复位端,高电平有效复位
SPMODE BIT P0.2 ;串并编程模式选择 0:串行 1:并行
WR BIT P0.3 ;写端口数据 上升沿锁存数据
RD BIT P0.4 ;读端口数据 高电平读
F_B_H BIT P0.5 ;FSK的数据输入端
OSK BIT P0.6 ;
SDATA BIT P3.0 ;AD8320数据端口
SCLK BIT P3.1 ;AD8320时钟端口
EN BIT P3.2 ;AD8320使能端口
PD BIT P3.3 ;AD8320功耗控制(=1)
ADDRESS DATA 60H ;地址寄存器
ftw1 data 61h ;数据,最高字节
ftw2 data 62h
ftw3 data 63h
ftw4 data 64h
ftw5 data 65h
ftw6 data 66h ;数据,最低字节
ftw data 6Dh ;61H~6DH用于频率控制字计算
MS EQU 7BH ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
TIMER4 EQU 7CH
TIMER5 EQU 7DH
TIMER6 EQU 7EH
TIMER7 EQU 7FH
;**************************************************************************
ORG 0000H
AJMP START
;**************************************************************************
START: mov p0,#00H
clr ftw_clk
clr addr_clk
SETB con_clk
setb mreset ;初始化串行/并行编程总线
NOP
NOP
clr mreset
MOV MS,#04H ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
MS0: MOV A,MS ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
CJNE A,#00H,MS1
MOV address,#1FH ;模式控制
acall w_address
MOV FTW,#00H ;模式由D4D3D2位决定、D7位ACC1=1扫频模式时由更新脉冲使其周期进行
acall w_ftw ;D0位=0外部时钟更新、D0位=1内部时钟更新
acall w_ftw
;*******单频输出频率*******************************************************************
MOV R7,#00H ;频率设定高位
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 ;写地址及数据
AJMP $
MS1: CJNE A,#01H,MS2 ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
MOV address,#1FH ;模式控制
acall w_address
MOV FTW,#02H ;模式由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
;*******起始频率(F1)*****************************************************
MOV R7,#00H ;频率设定高位
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 ;写地址及数据
;*******终止频率(F2)*****************************************************
MOV R7,#00H ;频率设定高位
MOV R6,#00H
MOV R5,#7DH ;32000K(32M) 直接用频率转换成16进制即可(单位KHz)
MOV R4,#00H ;频率设定低位
ACALL JSPL ;频率字计算子程序(频率值放在R7~R4中单位K)
MOV R0,#FTW1 ;终止频率数据,最高字节
MOV R1,#0AH ;F2起始地址(0AH~0FH)
MOV R2,#6 ;位数
DEC R0
DEC R1
ACALL SEND ;写地址及数据
MS1A: mov p0,#04h ;端口状态,并行编程模式
setb con_clk
SETB F_B_H
clr con_clk
MOV TIMER5,#5
acall D100MS
mov p0,#04h ;端口状态,并行编程模式
setb con_clk
CLR F_B_H
clr con_clk
MOV TIMER5,#5
acall D100MS
ajmp MS1A
MS2: CJNE A,#02H,MS3 ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
MOV address,#1FH ;模式控制
acall w_address
MOV FTW,#00H ;模式由D4D3D2位决定、D7位ACC1=1扫频模式时由更新脉冲使其周期进行
acall w_ftw ;D0位=0外部时钟更新、D0位=1内部时钟更新
MOV address,#20H ;整形键控
acall w_address
MOV FTW,#30H ;OSK EN = 1 and OSK INT = 1
acall w_ftw
MOV address,#25H ;0幅度到满量幅度过渡时间地址
acall w_address
MOV FTW,#80H ;8位斜率计数器值N=3~256 (过渡时间t=4096*N/系统频率=4096*128/50000000=10.48576ms)
acall w_ftw
;*******ASK频率**********************************************************************
MOV R7,#00H ;频率设定高位
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 ;写地址及数据
MS2A: mov p0,#04h ;端口状态,并行编程模式
setb con_clk
SETB OSK
clr con_clk
MOV TIMER5,#5
acall D100MS
mov p0,#04h ;端口状态,并行编程模式
setb con_clk
CLR OSK
clr con_clk
MOV TIMER5,#5
acall D100MS
ajmp MS2A
MS3: CJNE A,#03H,MS4 ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
MOV address,#1FH ;模式控制
acall w_address
MOV FTW,#00H ;模式由D4D3D2位决定、D7位ACC1=1扫频模式时由更新脉冲使其周期进行
acall w_ftw ;D0位=0外部时钟更新、D0位=1内部时钟更新
;*******AM输出频率********************************************************************
MOV R7,#00H ;频率设定高位
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
MS3A: mov address,#21h ;幅度字高字节地址
acall w_address
Mov A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
mov ftw,A ;幅度字高字节
acall w_ftw
mov address,#22h ;幅度字低字节地址
acall w_address
Mov A,R7
MOV DPTR,#TAB2
MOVC A,@A+DPTR
mov ftw,A ;幅度字低字节
acall w_ftw
CJNE R7,#8,MS3B
MOV R7,#00H
ACALL D125uS
AJMP MS3A
MS3B: INC R7
ACALL D125uS
AJMP MS3A
TAB1: db 0Dh,0Eh,0FFh,0Eh,0Dh,0Ch,0Bh,0Ch ;最大0FFFH 最小0B32H
TAB2: db 98h,0CBh,0FFh,0CBh,98h,65h,32h,65h ;调幅度30%
MS4: CJNE A,#04H,MS5 ;输出模式:0_单音,1_2FSK,2_ASK,3_AM,4_扫频
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 ;频率设定高位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -