AD9851怎么样控制波形输出个数和任意波形?请高手指点
AD9851怎么样输出任意波形?我目前学习到AD9851芯片可以控制频率和相位,直接输出正弦波,但是我想输出半正弦波,只要半个周期的波形,我想通过软件来控制,利用定时器定时半个周期 后再使波形相位转为180°,我想这样输出的波形就应该是两个半正弦了,但是用示波器显示好像不是,另外延时函数好像也很难控制。附程序如下:
单片机用的是STC12C5A60S2,并行传输方式,此程序在示波器上显示的是0.5V的电压,有微小的均匀的波动。
#include<stc12c5a.h>
#include <intrins.h>
sbit FQ_UD_AD9851=P1^0;
sbit CLK_AD9851=P1^1;
sbit RST_AD9851= P1^2;
unsigned long int freq = 0;
unsigned int i=0;
//unsigned char Control_AD9851 = 0x09; //Phase0 ,power down mode and 6 REFCLK Multiplier enable
//unsigned char Control_AD9851 = 0x00; //Phase0 ,power on mode and 6 REFCLK Multiplier disable
unsigned char Control_AD9851 = 0x01; //Phase0 ,power on mode and 6 REFCLK Multiplier enable
unsigned char W1=0X0e;
unsigned char W2=0X38;
unsigned char W3=0Xe3;
unsigned char W4=0X8e;
void Parallel2Serial_AD9851(void)
{ FQ_UD_AD9851=0;
CLK_AD9851=0; //发送控制字W0
P0=Control_AD9851;
CLK_AD9851=1;
CLK_AD9851=0;
P0=W1; //发送控制字W1
CLK_AD9851=1;
CLK_AD9851=0;
P0=W2; //发送控制字W2
CLK_AD9851=1;
CLK_AD9851=0;
P0=W3; //发送控制字W3
CLK_AD9851=1;
CLK_AD9851=0;
P0=W4; //发送控制字W4
CLK_AD9851=1;
CLK_AD9851=0;
FQ_UD_AD9851=1; //更新控制字
FQ_UD_AD9851=0;
}
void Set_Freq(float Freqency)
{
freq= (unsigned long int)(23.861*Freqency); // SYSCLK = 180 MHz
W4=(unsigned char)freq&0xff;
freq=freq>>8;
W3=(unsigned char)freq&0xff;
freq=freq>>8;
W2=(unsigned char)freq&0xff;
freq=freq>>8;
W1=(unsigned char)freq&0xff;
Parallel2Serial_AD9851();
}
void main(void)
{
RST_AD9851=1;
RST_AD9851=1;
RST_AD9851=0;
TMOD=0x08; // 设置中断模式
TH0=(65536-5420)/256; //装载定时器0的高8为
TL0=(65536-5420)%256;//装载定时器0的低8位
EA=1; //开启总中断
ET0=1; //使能定时器0
TR0=1; //开启定时器0
while(1)
{
i=i/10; 延时10
if(i%2==0)
{
Control_AD9851 = 0x01; //相位延时0度
Set_Freq(100);
}
else
{
Control_AD9851 = 0x81; //相位延时180度
Set_Freq(100);
}
if(i==100)
{
i=0;
}
}
}
void T0_time() interrupt 1
{
TH0=0x1c;
TL0=0x66;
i++;
// Set_Freq(100);
} mark 回复【1楼】cuikai12345
-----------------------------------------------------------------------
这个程序有问题,你看一眼就是了,千万不敢让我误导了你啊
页:
[1]