|
想用此芯片做一个DDS合成器,现在只是做一个测试输出,发现没有输出,不知道是我的程序不对还是其它问题,用的参考频率为13.000M,输出频率为1M,用的STC12LE5608AD芯片,哪位玩过,请给一个例程学习一下,谢谢,以下是本人写的驱动程序:
/************************************************************
测试环境:STC12LE5608AD 晶振:11.0592M
************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
sbit FSYNC=P3^3;
sbit SCLK=P1^4;
sbit SDATA=P1^3;
void delay(uchar k) //延迟程序
{
uchar i,j;
for(;k>0;k--)
for(j=2;j>0;j--)
for(i=2;i>0;i--);
}
void indate0(uint p)
{
uchar i;
FSYNC=0;
for(i=0;i<16;i++)
{
SCLK=0;
if(p&0x0001)
{
SDATA=1;
}
else
{
SDATA=0;
}
SCLK=1;
p=p>>1;
}
FSYNC=1;
}
void indate1(uint p)
{
uchar i;
FSYNC=0;
for(i=0;i<14;i++)
{
SCLK=0;
if(p&0x0001)
{
SDATA=1;
}
else
{
SDATA=0;
}
SCLK=1;
p=p>>1;
}
FSYNC=1;
}
void display0(void)
{
SCLK=1;
SDATA=1;
FSYNC=1;
indate0(0x0100);
FSYNC=1;
}
void display1(void)
{
SCLK=1;
SDATA=1;
FSYNC=1;
indate0(0x0000);
FSYNC=1;
}
void display2(void)
{
SCLK=1;
SDATA=1;
FSYNC=1;
indate1(0x13b1);
FSYNC=1;
}
void display3(void)
{
SCLK=1;
SDATA=1;
FSYNC=1;
indate0(0x1000);
FSYNC=1;
}
void display4(void)
{
SCLK=1;
SDATA=1;
FSYNC=1;
indate1(0x04ec);
FSYNC=1;
}
void main(void)
{
FSYNC=1;
SCLK=1;
SDATA=1;
while(1)
{
display0();//复位DDS芯片
delay(5); //延时
display1();//写频率寄存器的高14位
delay(1); //
display2();//写寄存器高14位频率字
delay(1); //
display3();//写频率寄存器的低14位
delay(1); //
display4();//写寄存器低14位频率字
delay(1); //
while(1);
}
}
|
|