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

📄 1602_main._c

📁 AVR ATMEGA32可以同时四路PWM输出
💻 _C
字号:
/********************************************
*   TC1产生16位双路PWM      *
* 实验内容:由TC1产生两路独立的16位PWM输出 *
* 实验环境:本站M16学习板     *
* 日    期:2007年08月16日     *
* 作    者:tonghe       *
* 版    本:V1.0       *
* 修改日期:2007年08月16日     *
* 芯    片:M16        *
* 工作频率:内部8M       *
* 编 译 器:ICCAVR 6.31A     *
* 输    出:PD4输出PWMB,PD5输出PWMA  *
*       产生的PWM频率为8M/65536约122HZ *
********************************************/
#include <iom16v.h>
#include <macros.h>

//延时函数:入口time 需延时的MS数
void delay_ms(unsigned int time)
 {
 unsigned char c;
 for(;time;time--)
  {
  for(c=220;c;c--)
   {
   ;
   }
  }
 }

//端口初始化
void port_init(void)
 {
 PORTA = 0xFF;
 DDRA  = 0x00;
 PORTB = 0xFF;
 DDRB  = 0xFF;
 PORTC = 0x00;
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x30;
 }

//TC1初始化
void timer1_init(void)
 {
 TCCR1A = 0xA2;   //两路PWM,匹配清零
 TCCR1B = 0x19;    //快速PWM模式,位数可调,预分频1
 
 ICR1   = 0xFFFF;
 //计数上限值,此数为16位PWM,此值的多少决定PWM的位数,改变值可以改变时钟的输入频率
//在1M时钟下,OCR1A,OCR1B=1M/65536=15HZ。改为7FFF时,为30HZ,ICR1变小,OCR1A,B成比例变大

 }

//器件初始化
void init_devices(void)
 {
 port_init();   //端口初始化
 timer1_init();   //TC1初始化

 MCUCR = 0x00;
 GICR  = 0x00;
 }

//主函数
void main(void)
 {
 //相位修正PWM模式,OCO的频率=fclk/(512*N),fclk为输入时钟频率,本例使用内部1M时钟

⌨️ 快捷键说明

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