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

📄 main.c

📁 avr 单片机 的MEGA8系列
💻 C
字号:

// -----------------------------------------------------------------------------
// Project Name    : M8 PWM 参考程序
// Crystal         : 16Mhz           
// Target Setting  : ATMaga8
// Power  		   : 5V
// Date            : Dec.21.2006
// File Version    : 1.0  
// Author		   :
// -----------------------------------------------------------------------------

#include <iom8v.h>
#include <macros.h>

// ------------------  频率定义 --------------------------
#define  HZ_5K     0x0640  
#define  HZ_10K    0x0320   

// -----------------------------------------------------------------------------
//  函数说明 :配置PWM的输出 管脚 OC1A (PB1) 
//   
// -----------------------------------------------------------------------------
void port_init(void)
{
 PORTB |= 0x02;
 DDRB  |= 0x02;
}
// -----------------------------------------------------------------------------
//  函数说明 :配置T1的PWM 
//  产生频率 :5KHz   误差 5.00048KHz (0.0%)
// -----------------------------------------------------------------------------
void timer1_init(void)
{
  //TCCR1A|=(1<<COM1A1)|(1<<COM1A0);  //当计时器往TOP计数时若TCNT1与OCR1A匹配OC1A  
                                    //将清零为低电平                               
                                    //在计时器往BOTTOM计数时TCNT1与OCR1A匹配OC1A
									//将置位为高电平 
  TCCR1A|=(1<<COM1A1)|(0<<COM1A0);   //当计时器往TOP计数时若TCNT1与OCR1A匹配OC1A  
                                    //将清零为高电平                               
                                    //在计时器往BOTTOM计数时TCNT1与OCR1A匹配OC1A
									//将置位为低电平 
									
  TCCR1B|=(1<<WGM13);               //设置T1为相位与频率修正PWM模式  TOP值为ICR1
}
// -----------------------------------------------------------------------------
//  函数说明 : 开启 PWM 
//   
// -----------------------------------------------------------------------------
void StartPwm(void)
{
  TCCR1B|=(1<<CS10);                        //启动T1 不分频 即启动PWM输出 
}
// -----------------------------------------------------------------------------
//  函数说明 : 关闭 PWM 
//   
// -----------------------------------------------------------------------------
void ClosePwm(void )
{
  TCCR1B&=~(1<<CS10);                      // 停止T1分频 ,停止PWM 输出
}
// -----------------------------------------------------------------------------
//  函数说明 :设置PWM的占空比 
//  设置说明 :占空比 =   OCR1A / ICR1  ;
// -----------------------------------------------------------------------------
void SetRate(unsigned int i_rate)
{
  OCR1A= i_rate;       // OCR1A控制占空比 
}
// -----------------------------------------------------------------------------
//  函数说明 :设置PWM 的频率
//   
// -----------------------------------------------------------------------------
void SetFrequency(unsigned int i_fre)
{
    ICR1 = i_fre ;    //ICR1控制分辨率 2-16
}
// -----------------------------------------------------------------------------
//  函数说明 :初始化系统
//   
// -----------------------------------------------------------------------------
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 timer1_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 SEI(); //re-enable interrupts
}
// -----------------------------------------------------------------------------
//  函数说明 :测试 T1的PWM 
//  
// -----------------------------------------------------------------------------
void main(void)
{ 
  init_devices();
  SetFrequency(HZ_5K);
  SetRate(HZ_5K/4);  // 实际占空比 :0.24
  StartPwm();
  while(1)
  {
    ;
  }
}

⌨️ 快捷键说明

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