#include <avr\io.h>
#include <util\delay.h>
#define SET_BIT(x,y) (x|=(1<<y)) //置位
#define CLR_BIT(x,y) (x&=~(1<<y)) //复位
//#define GET_BIT(x,y) (x&=(1<<y))
#define DATA 3
#define W_CLK 4
#define FQ_UD 5
#define RES 6
#define uchar unsigned char
void DDS_RES() //DDS复位,清除寄存器数据
{
CLR_BIT(PORTD,RES);
_delay_ms(1);
SET_BIT(PORTD,RES);
_delay_ms(1);
CLR_BIT(PORTD,RES);
CLR_BIT(PORTD,FQ_UD);
CLR_BIT(PORTD,W_CLK);
}
void SET_AD9850_SERIAL() //设置DDS为串行工作模式
{
CLR_BIT(PORTD,W_CLK);
CLR_BIT(PORTD,FQ_UD);
_delay_us(100);
SET_BIT(PORTD,W_CLK);
_delay_us(100);
CLR_BIT(PORTD,W_CLK);
_delay_us(100);
SET_BIT(PORTD,FQ_UD);
_delay_us(100);
CLR_BIT(PORTD,FQ_UD);
_delay_us(100);
}
void DDS_init() //DDS初始化,复位、设置为串行模式
{
DDS_RES();
SET_AD9850_SERIAL();
}
void write_freq(unsigned long freq) //写控制字(40位)
{
uchar i;
unsigned long comm;
comm=357.91394*freq; //对应12MHz参考时钟
for(i=0;i<40;i++)
{
if(comm & 0x00000001) //取最低位
SET_BIT(PORTD,DATA);
else
CLR_BIT(PORTD,DATA);
_delay_us(100);
SET_BIT(PORTD,W_CLK);
_delay_us(100);
CLR_BIT(PORTD,W_CLK);
_delay_us(100);
comm=comm>>1;
}
SET_BIT(PORTD,FQ_UD);
_delay_ms(10);
CLR_BIT(PORTD,FQ_UD);
}
int main()
{
DDRD=0xff;
PORTD=0xbf; //1011 1111
DDS_init();
write_freq(250000);
while(1)
{
}
}
AD9850-serial.rar_atmega16 AVR Studio _avr serial ad9850
版权申诉
112 浏览量
2022-09-24
16:28:50
上传
评论
收藏 17KB RAR 举报
刘良运
- 粉丝: 66
- 资源: 1万+
最新资源
- 微软常用运行库 游戏运行库 VC++各个版本
- 微信小程序开发教程.pptx
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- 锐捷网络认证中心网络管理.pdf
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- SD8233LF是一款用于单按键触摸及接近感应开关,其用途是替代传统的机械型开关芯片IC
- 基于YOLOv5的烟雾火焰检测算法研究
- 基于STM32的联合调试侦听设备解决方案原理图PCB源文件调试工具视频(大赛作品)
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈