|
我用AVR写了一个信号发生器的简单程序,一开始测是有正确的波形输出的,但第二天测时发现什么都没有了,不知道为什么,大家帮帮忙。下面是我写的程序:
//-----------------------函数声明,变量定义------------------------------
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
//-----------------------定义管脚--------------------------------------------------------
#define data_OUT PORTC
#define SETB_FQUD PORTD|=0x01; //P3.0 AD9850信号更新申请
#define CLR_FQUD PORTD&=0xfe;
#define SETB_WCLK PORTD|=0x02; //P3.1
#define CLR_WCLK PORTD&=0xfd;
#define SETB_SET PORTD|=0x04; //P3.2 写控制字时钟
#define CLR_SET PORTD&=0xfb;
//-----------------------定义管脚----------------------------------------
unsigned char CON_word[5];
//Word data[7] data[6] data[5] data[4] data[3] data[2] data[1] data[0]
//W0 Phase b Phase b3 Phase b2 Phase b1 Phase b0 Power Down Control Control
//W1 Freq-b31 Freq-b30 Freq-b29 Freq-b28 Freq-b27 Freq-b26 Freq-b25 Freq-b24
//W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 Freq-b18 Freq-b17 Freq-b16
//W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 Freq-b10 Freq-b9 Freq-b8
//W4 Freq-b7 Freq-b6 Freq-b5 Freq-b4 Freq-b3 Freq-b2
//--------------------------------------------------------------------------------------------------
// 函数名称: delay
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: WRITE_AD9850
// 函数功能: 将控制字写入AD9850 ,频率的转换
//--------------------------------------------------------------------------------------------------
void WRITE_AD9850(long value_Freq)
{
unsigned char i;
long f;
unsigned char L4,L3,L2,L1,L0;
f=value_Freq*42;
L0=0x28;
L4= f&0x000000ff;
L3=(f>>8)&0x000000ff;
L2=(f>>16)&0x000000ff;
L1=(f>>24)&0x000000ff;
CON_word[0]=L0;
CON_word[4]=L4;
CON_word[3]=L3;
CON_word[2]=L2;
CON_word[1]=L1;
CLR_FQUD;
delay(0);
for(i=0;i<5;i++)
{
data_OUT=CON_word; //送控制字
delay(1);
SETB_WCLK;
delay(0);
CLR_WCLK; //上升延
delay(0);
}
SETB_FQUD; //上升延要求AD9850改变输出
}
//--------------------------------------------------------------------------------------------------
// 函数名称:main
// 用户主函数
// 函数功能:主函数
//--------------------------------------------------------------------------------------------------
void main()
{
DDRC=0xff;
DDRD|=0x07;
SETB_FQUD;
CLR_WCLK;
delay(1);
WRITE_AD9850(20000000);
while(1);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|