;***************************************************** 『本文转载自网络,版权归原作者所有,如有侵权请联系删除』
; 基于DDS技术的数控信号发生器控制程序 ;
; 正弦波1Hz-10MHZ ;
; 单片机 STC12C5410AD ;
; AD9850 50MHZ晶振 ;
;*****************************************************
;*****************************************************
; 端口定义 ;
;*****************************************************
SCLK BIT P3.2;液晶串行操作时钟口
SID BIT P3.3;数据输入口
CS BIT P3.4;液晶使能 0禁
LB BIT P3.5;背光灯 0亮
KW1 BIT P1.2;功能、确认键
KW2 BIT P1.1;修改、返回键
KW3 BIT P1.0;加键
KW4 BIT P3.7;减键
LED1 BIT P1.7;跳频
LED2 BIT P1.6;扫频
LED3 BIT P3.0;点频
LED4 BIT P3.1;相移
DATAS BIT P1.3;AD9850 数据口
FQ_UD BIT P1.5;AD9850 使能
W_CLK BIT P1.4;AD9850 移位时钟
;*****************************************************
; 内存定义 ;
;*****************************************************
L0 DATA 21H;算法数据缓冲单元
L1 DATA 22H;
L2 DATA 23H;
L3 DATA 24H;
L4 DATA 25H;
L5 DATA 26H;
L6 DATA 27H;
L7 DATA 28H;
SSDIS DATA 39H;闪烁暂存单元
DIS7 DATA 37H;频率显示单元
DIS6 DATA 36H;DIS7-DIS0
DIS5 DATA 35H;高-低
DIS4 DATA 34H;
DIS3 DATA 33H;
DIS2 DATA 32H;
DIS1 DATA 31H;
DIS0 DATA 30H;
PHASE DATA 3CH;相移控制字
CON3 DATA 3BH;频率控制字
CON2 DATA 3AH;CON3-CON0
CON1 DATA 39H;高-低
CON0 DATA 38H;
IT03 DATA 3DH;0.3s定时中断
GNCDT DATA 3EH;功能菜单标志
MSXZT DATA 3FH;模式选择标志
FSXZT DATA 40H;方式选择标志
XWZLT DATA 41H;相位增量标志
PLSZT DATA 42H;频率设置标志
JDIS5 DATA 4FH;扫频
JDIS4 DATA 4EH;间隔
JDIS3 DATA 4DH;存储
JDIS2 DATA 4CH;单元
JDIS1 DATA 4BH;
JDIS0 DATA 4AH;
LCON3 DATA 53H;扫频
LCON2 DATA 52H;频率终值
LCON1 DATA 51H;
LCON0 DATA 50H;
ZCON3 DATA 57H;扫频
ZCON2 DATA 56H;频率增量
ZCON1 DATA 55H;
ZCON0 DATA 54H;
FCON3 DATA 5BH;扫频
FCON2 DATA 5AH;频率初值
FCON1 DATA 59H;
FCON0 DATA 58H;
RCON3 DATA 5FH;频率
RCON2 DATA 5EH;控制字
RCON1 DATA 5DH;暂存单元
RCON0 DATA 5CH;
PHCON1 DATA 44H;相位增量
PHCON0 DATA 43H;
PHDIS4 DATA 49H;相位显示单元
PHDIS3 DATA 48H;
PHDIS2 DATA 47H;
PHDIS1 DATA 46H;
PHDIS0 DATA 45H;
ZHLIANG0 DATA 60H
ZHLIANG1 DATA 61H
ZHLIANG2 DATA 62H
ZHLIANG3 DATA 63H
;******************************************************
; 中断及入口程序 ;
;******************************************************
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP INTT0
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
;******************************************************
; 主程序入口 ;
;******************************************************
START:
MOV R1,#20H
MOV R7,#60H
CLR A
CLEAR: MOV @R1,A
INC R1
DJNZ R7,CLEAR
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
CLR CS
MOV IT03,#06H
MOV 6FH,#0AH
LCALL SETUP ;LCD初始化
LCALL BEGINLCD ;开机界面
CLR W_CLK ;AD9850初始化
CLR FQ_UD ;
LCALL SETUP_AD9850 ;
MOV CON0,#96H ;默认频率值
MOV CON1,#4FH ;125MHZ,1000HZ,863CH
MOV CON2,#01H ;50MHZ,1000HZ,014F96H
MOV CON3,#00H ;
MOV TMOD,#01H ;计数器0 方式1
MOV TL0,#0B0H ;50ms
MOV TH0,#3CH ;定时
ADDPLAY: LCALL SEND9850 ;写入AD9850
LCALL CON_DIS ;控制字转频率字
LCALL DISPLCD ;频率显示
LCALL DELAY10ms
SETB LB
MAIN:
CLR LED1
JNB KW1,GNCD0
JNB KW3,CSDPADD0
JNB KW4,CSDPSUBB0
LJMP MAIN
GNCD0: LJMP GNCD
CSDPADD0: LCALL CSDPADD
LJMP MAIN
CSDPSUBB0: LCALL CSDPSUBB
LJMP MAIN
;*********************************************
; AD9850控制程序 ;
;*********************************************
;初始化DDS
SETUP_AD9850:CLR W_CLK
CLR FQ_UD
SETB W_CLK
CLR W_CLK
SETB FQ_UD
CLR FQ_UD
RET
;发送数据到AD9850
SEND9850: CLR FQ_UD
MOV A,CON0
LCALL SEND_8DATA
MOV A,CON1
LCALL SEND_8DATA
MOV A,CON2
LCALL SEND_8DATA
MOV A,CON3
LCALL SEND_8DATA
MOV A,#000B
LCALL SEND_8DATA
SETB FQ_UD
CLR FQ_UD
RET
;发送数据到AD9850(相移)
SEND9850PH: CLR FQ_UD
MOV A,CON0
LCALL SEND_8DATA
MOV A,CON1
LCALL SEND_8DATA
MOV A,CON2
LCALL SEND_8DATA
MOV A,CON3
LCALL SEND_8DATA
MOV A,PHASE
RLC A
RLC A
RLC A
ANL A,#0F8H
LCALL SEND_8DATA
SETB FQ_UD
CLR FQ_UD
RET
SEND_8DATA:
MOV C,ACC.0
MOV DATAS,C
SETB W_CLK
CLR W_CLK
MOV C,ACC.1
MOV DATAS,C
SETB W_CLK
CLR W_CLK
MOV C,ACC.2
MOV DATAS,C
SETB W_CLK
CLR W_CLK
MOV C,ACC.3
MOV DATAS,C
SETB W_CLK
CLR W_CLK
MOV C,ACC.4
MOV DATAS,C
SETB W_CLK
CLR W_CLK
MOV C,ACC.5
MOV DATAS,C
SETB W_CLK
CLR W_CLK
MOV C,ACC.6
MOV DATAS,C
SETB W_CLK
CLR W_CLK
MOV C,ACC.7
MOV DATAS,C
SETB W_CLK
CLR W_CLK
RET
;*********************************************
; 液晶显示程序 ;
;*********************************************
;开机界面
BEGINLCD: CLR LB
MOV A,#80H
LCALL WRITE_COM
MOV DPTR,#CHINESE1
LCALL WRITE_HZ7
MOV A,#90H
LCALL WRITE_COM
MOV DPTR,#CHINESE2
LCALL WRITE_HZ7
LCALL DELAY1s
LCALL DELAY1s
LCALL DELAY1s
MOV A,#80H
LCALL WRITE_COM
MOV DPTR,#CHINESE3
LCALL WRITE_HZ7
MOV A,#90H
LCALL WRITE_COM
MOV DPTR,#CHINESE4
LCALL WRITE_HZ7
LCALL DELAY1s
LCALL DELAY1s
LCALL DELAY1s
MOV A,#80H
LCALL WRITE_COM
MOV DPTR,#CHINESE4
LCALL WRITE_HZ7
MOV A,#90H
LCALL WRITE_COM
MOV DPTR,#CHINESE5
LCALL WRITE_HZ7
LCALL DELAY1s
LCALL DELAY1s
LCALL DELAY1s
SINF: MOV A,#80H
LCALL WRITE_COM
MOV DPTR,#CHINESE6
LCALL WRITE_HZ7
SETB LB
RET
;频率值显示程序
DISPLCD:
MOV A,DIS7
CJNE A,#00H,DIS7PD
MOV DIS7,#0AH
MOV A,DIS6
CJNE A,#00H,DIS6PD
MOV DIS6,#0AH
MOV A,DIS5
CJNE A,#00H,DIS5PD
MOV DIS5,#0AH
MOV A,DIS4
CJNE A,#00H,DIS4PD
MOV DIS4,#0AH
MOV A,DIS3
CJNE A,#00H,DIS3PD
MOV DIS3,#0AH
MOV A,DIS2
CJNE A,#00H,DIS2PD
MOV DIS2,#0AH
MOV A,DIS1
CJNE A,#00H,DIS1PD
MOV DIS1,#0AH
LJMP DIS0PD
DIS7PD: LJMP LCD3
DIS6PD: ;CJNE A,#0AH,DIS7PD
;LJMP LCD2
LJMP LCD3
DIS5PD: LJMP LCD2
DIS4PD: LJMP LCD2
DIS3PD: ;CJNE A,#0AH,LCD2
;LJMP LCD1
LJMP LCD2