×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-02 发布时间:
|

********************************************/  
* 工作频率:内部8M                   *  
* 编 译 器:ICCAVR 6.31A             *  

* 输   出:PD4输出PWMB,PD5输出PWMA     *  
*         产生的PWM频率为8M/65536约122Hz   *  
********************************************/  
#include   
#include   

//延时函数:入口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单片机  TC1  1  PWM输出 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于arm的指纹识别门禁系统是如何设计的