您的位置:控制工程论坛网论坛 » 教程与手册 » PWN产生正弦波

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2025年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

PWN产生正弦波

xilinxue  发表于 2008/9/18 14:25:08      883 查看 0 回复  [上一主题]  [下一主题]

手机阅读

/*****************************************
*      SPWM      *
* 功    能:PWM产生正弦波        *
*****************************************/
#include<iom16v.h>
#include<macros.h>
unsigned char i=0,j=8;
const unsigned char sintable[]=
   {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};
void port_init(void)
{
DDRB|=(1<<PB3);
}
void timer0_init(void)
{
TCCR0=0x00;
TCNT0=0X00;
OCR0=64;
TCCR0|=(1<<WGM01)|(1<<WGM00)|(1<<CS00)|(1<<COM01);
}
#pragma interrupt_handler timer0_comp_isr:20
void timer0_comp_isr(void)
{
i+=j;
if(i>127)
i-=128;
OCR0=sintable[i];
}
void init_devices(void)
{
CLI();
port_init();
timer0_init();
TIMSK|=(1<<OCIE0);
SEI();
}
void main(void)
{
init_devices();
while(1)
{;}
}
1楼 0 0 回复