📄 ad9850.c
字号:
/************************************************************
串行驱动 AD9850
FRUD -- B0
REST -- B1
WCLK -- B2
数据接口 D7 -- A7(注意:串行方式时D0,D1接高电平,D2接地)
ADout 定义输出频率
****************************************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/sfr_defs.h>
#include <avr/delay.h>
#define uint unsigned int
#define uchar unsigned int
#define SET_1(a,b) a|=(1<<b)
#define CLE_0(a,b) a&=~(1<<b)
#define FRUD_1 SET_1(PORTB,0)
#define FRUD_0 CLE_0(PORTB,0)
#define REST_1 SET_1(PORTB,1)
#define REST_0 CLE_0(PORTB,1)
#define WCLK_1 SET_1(PORTB,2)
#define WCLK_0 CLE_0(PORTB,2)
#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_0;
REST_1;
REST_0;
WCLK_0;
WCLK_1;
WCLK_0;
FRUD_0;
FRUD_1;
FRUD_0;
}
void UPDATE(void)
{
FRUD_1;
FRUD_0;
}
void sentcom(void)
{
sendword(0);
sendword(0);
sendword(0);
sendword(0);
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 uint dat;
uchar i = 0;
dat =(long uint ) ADout * 34.359738;
for(;i<32;i++)
{
sendword((uchar) (dat&1));
dat=dat>>1;
}
sentcom();
UPDATE();
}
int main(void)
{
initIO();
init9850();
startAD();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -