关于用51单片机向dds芯片并行发送控制字的c51程序
我最近在做一个课题,由单片机控制dds芯片,用并行方式向dds芯片发送频率控制字,相位控制字,幅度控制字等控制命令,使得dds芯片产生正弦波,由于课题要求产生正弦信号频率1KHZ到1MHZ,因此频率控制字不是固定的,老师说要用串行通信的方式由pc主机向51单片机输入频率控制字(其他控制字都固定,不用主机输入),单片机再把频率控制字并行送入dds芯片。
? 频率控制字有48位,单片机P0口并行送dds芯片一次送8位要送6次。
? 我之前编的程序没有考虑串行通信的问题,频率控制字是固定在程序里的,主程序如下:
void main()
{
? uchar mode[4]={0x00,0x44,0x01,0x00};//功能控制字
? uchar frequency1[6]={0x05,0x1e,0xb8,0x51,0xeb,0x85};//频率控制字
? uchar phase1[2]={0x00,0x00};//相位控制字
? uchar amplitude1[2]={0x00,0x10};//幅度控制字
? uchar *data0;
? AD9854_Init();//dds芯片初始化
? data0=mode;
? AD9854_SetControlRegister(data0);//由p0口向dds芯片写功能控制字
? data0=frequency1;
? AD9854_SetFreq(0x04,data0);//写频率控制字
? data0=phase1;
? AD9854_SetPhase(0x00,data0);//写相位控制字
? data0=amplitude1;
? AD9854_SetAmp(0,data0);//写幅度控制字
? while(1)
? {;}
}
想请教下各位高手,现在我想让频率控制字由pc机输入,通过串口通信传给89c51单片机,再由单片机并行方式给DDS芯片,我的程序该怎么改?是否可以把收到的频率控制字放入程序中的frequency1[6]数组中,然后按原程序进行,还是单片机收到一个字节就立马发送到dds芯片里?
如果有类似的程序可否让我参考下,不甚感激。
[解决办法]
http://zhidao.baidu.com/question/55656510
看了这篇文章认为 应该放入数组中
ADDA不熟悉,只能帮你找资料了
[解决办法]
建议是在PC传过来数据后,然后传给DDS。可以先将PC传过来的数据放入一个数组里,当满足条件后,再启动向DDS传送,这样能保证同步,不容易出错。可以定义一个标志变量,用来判断PC是否已传送完频率字。而且在PC上也可以用16进方式传送,那么单片机就比较省事了。