📄 main.c
字号:
/******************************************************
/程序部分开始
******************************************************/
# include "reg24le1.h"
# include "intrins.h"
/*****************************************************/
#define ad9850_w_clk P00
#define ad9850_fq_up P01
#define ad9850_rest P02
#define ad9850_bit_data P03
#define LED P04
#define Enableint do{EA=1;}while(0)
#define Disableint do{EA=0;}while(0)
#define EnableAD9850 do{ad9850_fq_up=0;\
ad9850_fq_up=1; }while(0)
/*****************************************************
/重定义数据类型
*****************************************************/
typedef unsigned char uchar;
typedef unsigned int uint ;
/*****************************************************
/
/AD9850复位(并口模式)
/
*****************************************************/
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
/* rest信号 */
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
/*****************************************************
/
/AD9850复位(串口模式)
/
******************************************************/
void ad9850_reset_serial()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
/*rest信号 */
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
/*w_clk信号 */
ad9850_w_clk=0;
ad9850_w_clk=1;
ad9850_w_clk=0;
/*fq_up信号 */
ad9850_fq_up=0;
ad9850_fq_up=1;
ad9850_fq_up=0;
}
/*****************************************************
/
/往AD9850移入一个字节(串口模式)
/
******************************************************/
void Write_Byte_S(uchar Dat)
{
uchar i;
for(i=0;i<8;i++)
{
ad9850_bit_data=(Dat>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
}
/*****************************************************
/
/往AD9850移入一个字节(并口模式,设并口连接P0口)
/
******************************************************/
void Write_Byte_P(uchar Dat)
{
P0=Dat;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
/****************************************************
/
/向ad9850中写命令与数据(并口)
/
*****************************************************/
void ad9850_wr_parrel(uchar w0,double frequence)
{
uchar w;
long int y;
double x;
x=4294962957/125;
frequence=frequence*x/1000000;
y=frequence;
w=w0;
Write_Byte_P(w);/*写w0数据 */
w=(y>>24);
Write_Byte_P(w);/*写w1数据 */
w=(y>>16);
Write_Byte_P(w);/*写w2数据 */
w=(y>>8);
Write_Byte_P(w);/*写w3数据 */
w=(y>>=0);
Write_Byte_P(w);/*写w4数据 */
EnableAD9850; /*移入使能 */
}
/*****************************************************
/
/串口方式写AD9850的控制字
/
******************************************************/
void ad9850_wr_serial(uchar w0,double frequence)
{
uchar w;
long int y;
double x;
x=4294967295/125;
frequence=frequence*x/1000000;
y=frequence;
w=(y>>=0);
Write_Byte_S(w);/*写w4数据 */
w=(y>>8);
Write_Byte_S(w);/*写w3数据 */
w=(y>>16);
Write_Byte_S(w);/*写w2数据 */
w=(y>>24);
Write_Byte_S(w);/*写w1数据 */
w=w0;
Write_Byte_S(w);/*写w0数据 */
EnableAD9850; /*移入使能 */
}
/****************************************************
/
/nRF24LE1工作时钟设置
/
****************************************************/
void WorkClkSet()
{
CLKCTRL = 0x28;
CLKLFCTRL = 0x01;
}
/****************************************************
/
/nRF24LE1的I/O口配置函数,P0口配置成输出,初始为低电平
/
*****************************************************/
void IO_CNFG()
{
P0DIR=0X00;
P0=0X00;
}
/****************************************************
/
/Delay延时函数
/
****************************************************/
void Delay(uint x)
{
uint dl;
for(;x>0;x--)
for(dl=120;dl>0;dl--)
{
_nop_();
}
}
/****************************************************
/
/LED灯的闪烁函数
/
*****************************************************/
void Light_LED()
{
LED=!LED;
Delay(1000);
}
/****************************************************
/
/主函数部分
/
*****************************************************/
main()
{
Disableint;
WorkClkSet();
IO_CNFG();
ad9850_reset_serial(); /*复位芯片 AD9850*/
Delay(100);
ad9850_wr_serial(0x00,10000000); /*串行写入 AD9850*/
Delay(100);
Enableint;
while(1)
{
Light_LED(); /*LED指示灯进行芯片状态显示*/
}
}
/****************************************************
* 程序到此结束 *
****************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -