⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad9850.c

📁 最新发布AD9850模块相关资料125M参考时钟
💻 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 + -