|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2010-12-25 02:10:15
|
显示全部楼层
还是得自己搞定。呵呵。编译通过还没有经过验证。等出差回去就测试
/************************************************************
串行驱动 AD9850
FRUD -- B0
REST -- B1
WCLK -- B2
数据接口 D7 -- A7(注意:串行方式时D0,D1接高电平,D2接地)
ADout 定义输出频率
****************************************************************/
#include <iom16v.h>
#include <macros.h>
#include <delay.h>
#include <avr_bit.h>
#define uint unsigned int
#define uchar unsigned char
#define SET_1(a,b) a|=(1<<b)
#define CLE_0(a,b) a&=~(1<<b)
#define FRUD_1 PORTB_0=1
#define FRUD_0 PORTB_0=0
#define REST_1 PORTB_1=1
#define REST_0 PORTB_1=0
#define WCLK_1 PORTB_2=1
#define WCLK_0 PORTB_2=0
#define ADout 5000000 // 定义 输出 频率 ADout
#define IO9850 PORTA
#define IO_1 SET_1(IO9850,7)
#define IO_0 CLE_0(IO9850,7)
void initIO(void)
{
DDRA = 0xff;
DDRB = 0xff;
}
void init9850(void)
{
WCLK_0;
FRUD_0;
REST_1;
REST_0;
}
void UPDATE(void)
{
FRUD_1;
FRUD_0;
}
void sentcom(void)
{
sendword(0);
sendword(0);
sendword(1);
sendword(0);
sendword(0);
sendword(0);
sendword(0);
}
void sendword(uchar dat)
{
if(dat)
IO_1;
else
IO_0;
WCLK_1;
WCLK_0;
}
void startAD(void)
{ long unsigned int dat;
unsigned char i = 0;
UPDATE();
dat =(long int) ADout * 42.949672;
dat=dat>>1;
for(;i<32;i++)
{
sendword((uchar) (dat&1));
dat=dat>>1;
}
sentcom();
UPDATE();
}
int main(void)
{ initIO();
init9850();
startAD();
while(1)
{
NOP();
}
} |
|