ATMega8 Timer1 PWM功能测试程序
来源: 芯艺工作室
本站广告
  ENC28J60+uIP DHCP动态获取IP及UDP广播服务端示例
  ENC28J60+uIP 基于TCP的MODBUS IO示例
  C720H5上实现MODBUS远程IO
  ENC28J60+uIP HTTP GET方式将温度数据上传到web服务器
  FM1702读写S50(也叫M1)卡相关资料

main.c文件:

/********************************
  ATMega8 T/C1 PWM功能测试程序 
  文件名:main.c
  编译:WinAVR-20070122

  硬件环境:CA-M8X   打开的开关如下
            S6(1,2)   - 外部4MHz晶振
            S1(7)    - PB1接红LED
  
  芯艺设计室 2004-2007  版权所有 
  转载请保留本注释在内的全部内容
  WEB: http://www.chipart.cn
  Email: changfutong@sina.com
*******************************/

#include <avr/io.h>
#include <util/delay.h>

//延时
void DelayMs(uint16_t ms)
{
  uint16_t i;
  for(i=0;i<ms;i++)
    _delay_loop_2(4 * 250);
}                        

int main (void)
{
  uint8_t direction=1;
  uint8_t pwm=0;
  
  //  8位相位修正PWM模式
  //  OC1A 向上计数过程中比较匹配时清零
  //  向下计数过程中比较匹配时置位
  //  时钟源:4MHz/64  PWM频率:4MHz/(64*256)=122Hz
  TCCR1A=_BV(COM1A1)/*|_BV(COM1B1)*/|_BV(WGM10);
  TCCR1B=_BV(CS11)|_BV(CS10);
  
  TCNT1=0;
  DDRB|=_BV(PB1)/*|_BV(PB2)*/;//OC1A pwm输出引脚允许

  //循环改变PWM输出脉宽,使接在OC1A引脚上的发光管亮度发生变化
  while(1)
  {
    if(direction)
    {
      if(++pwm==254)
        direction=0;
    }
    else
    {
      if(--pwm==0)
        direction=1;
    }

    OCR1A=pwm;

    DelayMs(10);
  }
    
  return 0;
}
\
执行效果:红色发光管亮灭间逐渐变化。


声明:芯艺工作室(http://www.chipart.cn)保留所有权力,转载请注明出处!

芯艺工作室    蒙ICP备06005492号

Copyright© 2004-2020 ChipArt Studio All Rights Reserved