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

📄 ad9850.h

📁 共享几个AVR单片机的常用代码
💻 H
字号:
#include <avr/io.h>
#include <inttypes.h>
#define sbi(port, bit) (port) |= (1 << (bit))
#define cbi(port, bit) (port) &= ~(1 << (bit))

#define RESET_H	sbi(PORTB,4)
#define RESET_L	cbi(PORTB,4)
#define DATA_H	sbi(PORTB,5)
#define DATA_L	cbi(PORTB,5)
#define WCLK_H	sbi(PORTB,6)
#define WCLK_L	cbi(PORTB,6)
#define FQUD_H	sbi(PORTB,7)
#define FQUD_L	cbi(PORTB,7)
#define FREF 125000//the reference clock frequency of ad9850

void initialize_ad9850(void)
{
	DDRB |= 0xf0;
	WCLK_L;
	FQUD_L;
	WCLK_H;
	WCLK_L;
	FQUD_H;
	FQUD_L;
}

void send_bit_ad9850(uint8_t bit)
{
	if(bit)DATA_H;
	else DATA_L;
	WCLK_H;
	WCLK_L;
}

void send_cmd_ad9850(uint32_t freq_word)
{
	uint8_t i;
	for(i=0;i<32;i++)
		send_bit_ad9850((freq_word>>i)&1);
	for(i=0;i<8;i++)
		send_bit_ad9850(0);
	FQUD_H;
	FQUD_L;
}

uint32_t freq_word_ad9850(float freq)
{
	uint32_t freq_word;
	double devision=freq/FREF;
	freq_word=devision*0xffffffff;
	return freq_word;
}

void update_freq_ad9850(uint16_t freq)
{
	send_cmd_ad9850(freq_word_ad9850(freq));
}

void power_down_ad9850(void)
{
	uint8_t i;
	for(i=0;i<34;i++)
		send_bit_ad9850(0);
	for(i=0;i<40;i++)
		send_bit_ad9850(1);
}

void reset_ad9850(void)
{
	uint8_t i;
	RESET_H;
	for(i=0;i<5;i++);//delay at least 5 clock cycles(ref clock of ad9850,here we delay 5 cycles of MCU clock)
	RESET_L;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -