2020-01-23 14:47发布
imfv 发表于 2014-4-25 15:06 程序的好像是先传低位,再传高位,所以应该是P&0X0001
imfv 发表于 2014-4-26 10:48 时序要求好像是时钟的下降沿传送数据,单片机用的是STC12LE5608AD,晶振用的是11.0592M ...
最多设置5个标签!
#include<reg52.h>
#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=100;j>0;j--)
for(i=100;i>0;i--);
}
void indate0(uint p)
{
uchar i;
FSYNC=0;
for(i=0;i<16;i++)
{
SCLK=0;
if(p&0x8000)
{
SDATA=1;
}
else
{
SDATA=0;
}
SCLK=1;
p=p<<1;
}
FSYNC=1;
SCLK=0;
SDATA=1;
}
void main(void)
{
FSYNC=1;
SCLK=0;
SDATA=1;
while(1)
{
indate0(0x0100);//复位DDS芯片
delay(100); //延时
indate0(0x1000);//写频率寄存器的高14位
delay(20); //
indate0(0x53b1);//写寄存器高14位频率字
delay(20);
indate0(0x0000);//写频率寄存器的低14位
delay(20); //
indate0(0x84ec);//写寄存器低14位频率字
delay(20); //
indate0(0xcf0f); //写相位控制字
delay(20); //
while(1);
}
}
楼主试试这个代码,从芯片手册上看,数据变化的时候在SCLK的上升沿,所以SDATA上的数据信息应该在SCLK低电平时赋值,然后拉高SCLK
编辑原因:修改代码
真服了你。。。 自己看时序图,,,MSB...
建立时间,保持时间等等,你都有示波器,可以看看。 保险起见,先降频最好,每个语句后加几个NOP。
你再去看看时序图。。。 是MSB还是LSB...
一周热门 更多>