目录
1 DDS发出一定频率正弦波、方波
1.1 关键代码
主函数
#include <MSP430G2553.h>
//提前声明子函数//
void InitSystemClock(void);//配置时钟
void GPIO_Init();//GPIO初始化
void ad9851_reset_serial();//复位(串口)
void ad9851_wr_serial(unsigned char w0,double frequence);//写函数(串口)
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; //关闭看门狗
InitSystemClock();//配置时钟
GPIO_Init();//GPIO初始化
ad9851_reset_serial();//复位
ad9851_wr_serial(0x00,1000);//发出频率1000Hz的信号
//0X01为开六备频,0X00为没开
while(1)
{
}
}
AD9851复位函数
//复位函数(串口模式)//
void ad9851_reset_serial()
{
P1OUT&=~BIT4;//P1.4(时钟)输出低电平
P1OUT&=~BIT5;//P1.5(频率)输出低电平
//复位信号
P1OUT&=~BIT6;//P1.6(复位)输出低电平
P1OUT|=BIT6;//高电平
P1OUT&=~BIT6;//低电平
//时钟信号
P1OUT&=~BIT4;//P1.4(时钟)输出低电平
P1OUT|=BIT4;//高电平
P1OUT&=~BIT4;//低电平
//频率信号
P1OUT&=~BIT5;//P1.5(频率)输出低电平
P1OUT|=BIT5;//高电平
P1OUT&=~BIT5;//低电平
}
写函数(向AD9851写命令及数据)
//写函数(串口)//
void ad9851_wr_serial(unsigned char w0,double frequence)
{
unsigned char i,w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/30;//适合30M晶振,需要根据自己的频率进行调整
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w4数据
w=(y>>0);
for(i=0;i<8;i++)
{
if( (w>>i)&0x01 == 1)
{
P1OUT|=BIT7;//P1.7(数据)输出高电平
}
else
{
P1OUT&=~BIT7;//P1.7(数据)输出低电平
}
P1OUT|=BIT4;//P1.4(时钟)输出高电平
P1OUT&=~BIT4;//低电平
}
//写w3数据
w=(y>>8);
for(i=0;i<8;i++)
{
if( (w>>i)&0x01 == 1)
{
P1OUT|=BIT7;//P1.7(数据)输出高电平
}
else
{
P1OUT&=~BIT7;//P1.