⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mega8_spwm.c

📁 avr mega8 pwm 试验带 Proteus 仿真
💻 C
字号:
#include<avr/io.h>
#include<avr/sleep.h>
#include<avr/signal.h>
#include<avr/interrupt.h> 

#define BYTE    unsigned char 
#define WORD    unsigned int

#define PWMOUTA PB1               
#define PWMOUTB PB2
#define PWMOUTC PB3

int ocr_reg=0xfe;
char flag=0x00;

/************初始化程序**************/
void spwm_init(void)
{
   PORTB|=(1<<PWMOUTA)|(1<<PWMOUTB);  //把PWM置为输出
   DDRB |=(1<<PWMOUTA)|(1<<PWMOUTB);
   TIMSK=0x00;
   
   TCCR1B = 0x00;        //stop
   TCNT1  = 0x0000;      //计数器初值 
   OCR1A  = 0x00ff;      //比较寄存器的值,来控制占空比  (占空比50%)
   OCR1B  = 0x0000;      //(占空比50%)
   ICR1   = 0x03ff;                     //捕捉寄存器的值  10位分辨率
   TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM11);//|(1<<WGM10); 
                                      //设置PWM的频率及PWM工作模式 
   TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);//|(1<<CS11);
                                      //快速PWM模式,时钟不分频,TOP由ICR1设定
   TIMSK|=(1<<OCIE1A);                //允许计数器比较匹配中断

   
   PORTB|=(1<<PWMOUTC);
   DDRB |=(1<<PWMOUTC);
   TCCR2=0x69;       //设置PWM的频率及PWM工作模式 
   TCNT2=0x00;       //计数器初值 
   OCR2 =0x7f;       //比较寄存器的值,来控制占空比 
   
}

/************中断服务程序**************/
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
  // memcpy_P(ocr_reg,sin_table+i,1);//从Flash中取出正弦数据
   OCR1A=ocr_reg;//更新OCR1A
   OCR1B=ocr_reg;//更新OCR1B
 //  OCR2 =ocr_reg;//更新OCR2
  // i++;//指向下一个数据
   if(flag)
     ocr_reg--;
   if(!flag)
     ocr_reg++;	 
   if(ocr_reg==0x03ff)
  //    ocr_reg=0x00;
     flag=0x01;
   if(ocr_reg==0x00)
   //  ocr_reg=0x00;
     flag=0x00;	 
}
/****************主程序**************/
int main(void)
{
   cli();
   spwm_init();                     //初始化
   MCUCR = 0x00; 
   GICR  = 0x00;
   set_sleep_mode(SLEEP_MODE_IDLE); //设置休眠模式为空闲模式
   sei();                             //开总中断允许
   while(1)
   {
      ;
      sleep_mode();                 //进入休眠状态
   }
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -