您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机avr单片机 TC1的16位PWM输出程序 正文
avr单片机 TC1的16位PWM输出程序

avr单片机 TC1的16位PWM输出程序

点击数:7612 次   录入时间:03-04 11:46:02   整理:http://www.55dianzi.com   AVR单片机
********************************************/ 
* 工作频率:内部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 
  } 

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

  MCUCR = 0x00; 
  GICR = 0x00; 
  } 

//主函数 
void main(void) 
  { 
  unsigned int a=32768,b=32768; 
  init_devices();         //器件初始化 

  OCR1A=a;           //匹配初值 
  OCR1B=b; 
   
  while(1) 
    { 
    a-=10;           //两个值向不同方向变化 
    b+=10;           //PWMA宽度减小,PWMB宽度增加 
    if(a<=20)         //上下限 
        { 
        a=65530; 
        b=5; 
        } 
    OCR1A=a; 
    OCR1B=b; 
    delay_ms(20); 
    } 
  } 



本文关键字:单片机  程序  AVR单片机单片机-工控设备 - AVR单片机