给51黑电子论坛的朋友们分享一个用51单片机做的模拟低频DDS信号发生器系统,带proteus仿真工程文件加单片机源程序.
下面是仿真原理图:
DDS信号发生器的部分单片机源程序:
- #include "sin_dds.h"
- uchar i,j;
- uint counter,step;
- /**************定时器0初始化**********************************/
- void Init_Timer0(void)
- {
- TMOD = (TMOD & 0XF0) | 0X01; //定时器0,方式1
- TH0 = 0xff; //定时器初值
- TL0 = 0xff;
- TR0 =1; //启动定时器0
- ET0 =1; //开定时器0中断
- }
- /*************************主函数*********************************/
- main()
- {
- Init_Timer0(); //定时器0初始化
- step=2; //数值采样步数初始化
- EA = 1; //CPU开中断
- while(1)
- {
- if(key_up == 0) if(step<4096) step++; //数值采样步数加1,采样频率变高 ,正弦波周期变小
- if(key_dw == 0) if(step>1) step--; //数值采样步数减1,采样频率变低 ,正弦波周期变大
- while((!key_up)||(!key_dw)); //若有一个键按下去,则正弦波周期始终保持不变
- }
- }
- /******************系统OS定时中断服务***************************/
- void OS_Timer0(void) interrupt 1 using 2
- {
- TH0 = 0xff; //重装定时器初值
- TL0 = 0xff;
- counter = counter + step; //counter以step的步数递增
- dac1=type[(unsigned int)counter>>8]; //当counter加满(256/step)次时,dac1的采样值变化一次
- }
复制代码
全部资料下载(含仿真工程文件和完整代码):
单片机模拟低频DDS信号发生器系统.rar
(16.78 KB, 下载次数: 108)
|