AVR EVB PWM正弦波产生程序
来源:互联网 发布:淘宝上的甩棍能碎砖吗 编辑:程序博客网 时间:2024/06/05 08:52
#ifndef _COMMON_H_
#define _COMMON_H_ 1
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h >
#include <avr/pgmspace.h>
#include <avr/delay.h>
#ifndef _DATA_TYPE_
#define _DATA_TYPE_ 1
#define uchar unsigned char
#define uint unsigned int
#endif
#define FREQ 8
#ifndef _DELAYMS_
#define _DELAYMS_ 1
void DelayMs(uint ms)
{
uint i;
for(i=0;i<ms;i++)
_delay_loop_2(FREQ *250);
}
#endif
void InitPort( void )
{
DDRB = _BV(PB4);
PORTB = _BV(PB4);
}
#endif
main.c
#include
const unsigned char SINA[128] PROGMEM ={
64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,109,111,113,115,117,118,120,121,
123,124,125,126,126,127,127,127,127,127,127,127,126,126,125,124,123,121,120,118,
117,115,113,111,109,106,104,102,99,96,94,91,88,85,82,79,76,73,70,67,64,60,57,54,51,48,
45,42,39,36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,1,0,0,0,0,0,0,0,1,1,2,3,4,6,
7,9,10,12,14,16,18,21,23,25,28,31,33,36,39,42,45,48,51,54,57,60
};
uchar Step = 8;
uchar Sum = 0;
SIGNAL( SIG_OVERFLOW0 )
{
Sum+= Step; // 新样点指针
if (Sum> 127) Sum-= 128; // 样点指针调整
OCR0 = pgm_read_byte(SINA + Sum); // 取样点指针到比较匹配寄存器
}
void InitTimer( void )
{
TCCR0 = 0x71; // 相位调整PWM模式,分频系数=1,正向控制OC0
TIMSK=_BV(TOIE0); // T/C0溢出中断允许
}
int main(void )
{
InitPort();
InitTimer();
sei();
while(1) ;
}
- AVR EVB PWM正弦波产生程序
- AVR产生多种PWM
- 用AVR单片机来产生正弦波信号
- TMS320F2812产生PWM波程序
- Proteus之51MCU学习之路--如何用PWM波产生正弦波?
- java 产生正弦波
- 7路PWM产生程序阅读
- 正弦波显示程序
- DE2实践之WM8731产生正弦波
- 如何创建产生正弦波的mif文件
- TLC5615 产生频率可变的正弦波
- 定时器产生PWM
- MSP430产生PWM波
- 单片机定时器产生pwm
- dsPIC33F产生PWM
- 通用定时器产生PWM
- CPLD 与AVR通信 PWM控制程序
- 关于AVR的PWM的使用
- 命令行查看端口及进程的命令
- js打开窗体
- KillProcess(LPCWSTR szProcName) 终止进程
- UDP Socket编程系列一
- 正则表达式
- AVR EVB PWM正弦波产生程序
- NAT
- 迅雷7偷偷上传文件导致机器变卡
- 路由器的端口映射操作方式(一般设置方法)
- android Surface和SurfaceView概述
- JS 缺失函数
- 图像去噪
- 从VC6.0转到vs2008的一些问题
- 解决netbeans在linux下安装时出现乱码的问题