📄 ad9851.c
字号:
/*===============================================================*/
/*函数名称: ad9851.c */
/*函数功能: 发送1hz--100khz的正弦波 */
/*参数说明: ctr_word[0]---------------------------------相位控制字
ctr_word[1,2,3,4]------------------------频率控制字
D7------------------------------------------------P6.7
D6------------------------------------------------P6.6
D5------------------------------------------------P6.5
D4------------------------------------------------P6.4
D3------------------------------------------------P6.3
D2------------------------------------------------P6.2
D1------------------------------------------------P6.1
D0------------------------------------------------P6.0
W_CLK---------------------------------------------P3.5
------------------------------------字装入控制信号
FQ_UD---------------------------------------------P3.6
----------------------------------频率更新控制信号
RESET---------------------------------------------P3.7
------------------------------软件复位,高电平有效
*/
/*有无返回: 有 */
/*修改记录: 无修改记录 */
/*编写作者: t483-4-19chenY_Absong */
/*编写日期: 2007-4-06 */
/*===============================================================*/
#include "common.h"
#include "ad9851.h"
#include "delay.h"
#include "TS12864A.h"
#include "show.h"
extern unsigned long FrequencyLong_HZ;
void ad9851(void)
{
unsigned char key_code;
// show_frequncy();
key_code=P7&0xff;
switch(key_code)
{
case 0xfe:
if(FrequencyLong_HZ>=10)
{
FrequencyLong_HZ=FrequencyLong_HZ-10;
sin_send(FrequencyLong_HZ);
// Show_FloatData(FrequencyLong_HZ,5,3);
delay_nms(10);
}
break; //步进为10自减
case 0xfd:
if(FrequencyLong_HZ<=10000)
{
FrequencyLong_HZ=FrequencyLong_HZ+10;
sin_send(FrequencyLong_HZ);
// Show_FloatData(FrequencyLong_HZ,5,3);
delay_nms(10);
}
break; //步进为10自加
case 0xfb:
FrequencyLong_HZ=0; //10--100000自动加扫频
while(FrequencyLong_HZ<=10000)
{
FrequencyLong_HZ=FrequencyLong_HZ+10;
sin_send(FrequencyLong_HZ);
// Show_FloatData(FrequencyLong_HZ,5,3);
delay_nms(500);
}
break;
case 0xf7:
FrequencyLong_HZ=10000; //10--100000自动减扫频
while(FrequencyLong_HZ>=10)
{
FrequencyLong_HZ=FrequencyLong_HZ-10;
sin_send(FrequencyLong_HZ);
// Show_FloatData(FrequencyLong_HZ,5,3);
delay_nms(500);
}
break;
default: break;
}
}
void sin_send(unsigned long freqword)
{
unsigned int ctr_word[5];
unsigned long f_value;
//提取控制字
freqword = (long)(freqword*1073.741824); //2^32/4000000
f_value = (long)freqword;
ctr_word[4] = f_value;
ctr_word[4] &= 0x00ff;
f_value >>= 8;
ctr_word[3] = f_value;
ctr_word[3] &= 0x00ff;
f_value >>= 8;
ctr_word[2] = f_value;
ctr_word[2] &= 0x00ff;
f_value >>= 8;
ctr_word[1] = f_value;
ctr_word[1] &= 0x00ff;
wr_word();
}
void wr_word(void) //写控制字
{
unsigned int i;
unsigned int ctr_word[5];
AD9851_W_CLK=0; //清控制字
AD9851_FQ_UD=0;
AD9851_W_CLK=0;
// DATA_PORT=0x09; //6倍频控制
DATA_PORT=0x00; //不进行6倍频
delay_nus(10);
AD9851_W_CLK=1;
delay_nus(10);
for (i=1;i<5;i++) //写频率控制字
{
AD9851_W_CLK=0;
DATA_PORT=ctr_word[i];
delay_nus(10);
AD9851_W_CLK=1;
delay_nus(10);
}
AD9851_W_CLK=0;
AD9851_FQ_UD=1; //根据控制字更改输出的频率和相位
AD9851_FQ_UD=1;
delay_nms(10);
AD9851_FQ_UD=0;
}
void Initial_AD9851(void) //对 RESET端进行复位
{
AD9851_RESET=0;
AD9851_RESET=1;
delay_nms(100);
AD9851_RESET=0;
AD9851_FQ_UD=0;
AD9851_W_CLK=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -