?? ad9850.c
字號(hào):
/************************************************************
串行驅(qū)動(dòng) AD9850
FRUD -- B0
REST -- B1
WCLK -- B2
數(shù)據(jù)接口 D7 -- A7(注意:串行方式時(shí)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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -