/*****************************************
* 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
回复
* 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)
{;}
}