|
楼主 |
发表于 2009-10-22 16:18:56
|
显示全部楼层
程序如下:
#define PIC18F6527
#include <pic18.h>
#include "typedefine.h"
#include "DDS.h"
/**********************************************************
//DDS AD9852 control register 0X1D~0X20
//ADDR 0X1D
bit 7 6 5 4 3 2 1 0
NC NC NC COMPPD LOW CONTROL DACPD DIGPD //00010000 0X10
DACPD
//ADDR 0X1E
bit 7 6 5 4 3 2 1 0
NC PLLRANGE BYPASS mult4 mult3 mult2 mult1 mult0 //01000100 0X44
PLL
//ADDR 0X1F
bit 7 6 5 4 3 2 1 0
ACC1 ACC2 TRIANGE NC MODE2 MODE1 MODE0 INT/EXTUpclock //00000000 0X00
//ADDR 0X20
bit 7 6 5 4 3 2 1 0
NC BYPASS OSKEN OSKINT NC NC LSBfirst SDOenable //01000000 0X40
invsinc
***********************************************************/
void init_dds(void)
{
DDS_UD = 0;
LATC1=0;
DDS_OSK = 1;
// LATC3=1;
// DDS_FSK = 1; //No using
// LATC2=1;
DDS_RD = 1;
LATC4=1;
DDS_WR = 1;
LATC0=1; //Forbit Write and Read
//初始化相关控制I/O口
MASTER = 1; //DDS RESET for More than 10 SYS CLOCK
LATC5=1;
delay(15);
MASTER = 0;
LATC5=0;
// 系统复位
;
//写更新时序Update clock
Command_data(0X2E,0X00); //0X1D COMP PD disabled 0X08
Command_data(0X1E,0X22); //0X1E PLL Range=1;4*MULTIPLER FOR 160M
Command_data(0X3E,0X00); //0XIF MODE0 for EXT Updata clock //0X80
Command_data(0X01,0X0C); //0X20 OSKEN=0;OSKINT=0;BYPASSINVSINC=1
//写控制寄存器地址0X1D~0X20
//Command_data(0X1A,0X00); //0X16
//Command_data(0X3A,0X00); //0X17
//Command_data(0X06,0XC0); //0X18 0XE0
//Command_data(0X26,0XF8); //0X19
//delay(1000);
//RC1 = 1;LATC1 = 1;
//delay(15);
//RC1 = 0;LATC1 = 0; //Updata DDS Control Register for Constinue 8 SYS CLOCK
//delay(1000);
}
void Command_data(u08 DataAddress,u08 CommandData)
{
PORTB = DataAddress;
LATB = DataAddress; //RB0~RB5 for A5~A0
PORTE = CommandData;
LATE = CommandData; //RE0~RE7 for D7~D0
RC0 = 0; LATC0 = 0;
RC0 = 1; LATC0 = 1; //上升沿写地址和数据
}
void UpDate_FWord(void)
{
Command_data(0X24,0X66); //0X09 00 LSB 1/2FWT 80 00 00 00 00 00
Command_data(0X04,0X66); //0X08 00 160M 20 00 00 00 00 00
Command_data(0X38,0X66); //0X07 00 200M 19 99 99 99 99 99
Command_data(0X18,0X66); //0X06 00 //400000000000
Command_data(0X28,0X66); //0X05 00 6 66 66 66 66 66
Command_data(0X08,0X60); //0X04 40 MSB 6 66 66 66 66 66
//写DDS FWORD 地址:MSB 0X04~0X09 LSB//48Bits
DDS_UD = 1;LATC1 = 1;
delay(15);
DDS_UD = 0;LATC1 = 0;
}
void delay(u16 Tdata)
{
while(Tdata--) {;};
}
void PSet_mv_AD9852Chan(void)
{
Command_data( 0X19, 0XF0);
//0.5v--111111111111 0.0v---000000000000 4096 for 492mv
Command_data( 0X39, 0X0FF); //AMP Address 0X26,0X27
}
void PWriteAD9852Amp(void)
{
Command_data( 0x21, 0XF0);
//0.5v--111111111111 0.0v---000000000000 4096 for 492mv
Command_data( 0x11, 0X0FF); //AMP Address 0X21,0X22
}
void UpDate_PWord(void)
{
Command_data( 0x00,0X28); //MSB 0x00
Command_data( 0x20,0XAA); //LSB 0x01 Phase1
// DDS_UD = 1;LATC1=1;
//asm("nop");
//DDS_UD = 0;LATC1=0;
}
void PReadAD9854(u08 ucAdd)
{
u08 tmp;
DDS_RD = 0;
PORTB = ucAdd;
DDS_RD = 1;
tmp = PORTE;
if((tmp&&0X40)==1) {RG2=0;LATG2=0;};
} |
|