zoukankan      html  css  js  c++  java
  • atmega8 例程:T1定时器 快速PWM

    /***************************************************************** 
    * 函数库说明:ATMEGE8 T1定时器 快速PWM
    * 版本: v1.0
    * 修改: 庞辉
    * 修改日期: 2011年08月11日
    *
    * 说明: OC1A 20khz 50%占空比
    * OC1B 10khz 33%占空比
    * 且在溢出中断中频率不断改变
    *
    * 版本更新:
    *
    ******************************************************************
    *注意:快速PWM模式 WGM1=5,6,7,14,15
    * 单斜波计数,用于输出高频率的PWM信号(比双斜波的高一倍频率)
    * 都有TOV1溢出中断,发生于TOP时
    * 比较匹配后可以产生OCF1x比较匹配中断.
    * WGM1=5时, 最大值为0x00FF, 8位分辨率
    * WGM1=6时, 最大值为0x01FF, 9位分辨率
    * WGM1=7时, 最大值为0x03FF,10位分辨率
    * WGM1=14时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)
    * WGM1=15时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)
    * 改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值
    * 注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平
    * 计算公式:fPWM=fclk_IO/(N*(1+TOP))
    *****************************************************************
    */

    #include <avr/io.h>
    #include <avr/interrupt.h>

    int main(void)
    {
    //PB1 PB2 设置为输出模式
    DDRB |= (1 << DDB1) | (1 << DDB2);

    //PWM周期计数器
    ICR1 = 300;
    //PB1占空比计数器,占空比50%
    OCR1A = 150;
    //PB2占空比计数器,占空比50%
    OCR1B = 100;

    //OC1A OC1B起始高电平电平
    TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);

    //使能溢出中断
    //TIMSK |= (1 << TOIE1);

    //开总中断
    //sei();

    //OC1A OC1B 快速PWM,TOP值为ICR1,不分频,PWM启动
    TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10);

    while(1);

    return 0;
    }

    volatile unsigned int i = 0;

    //定时器1溢出中断
    SIGNAL(SIG_OVERFLOW1)
    {
    i++;

    //3秒
    if(i == 60000)
    {
    i = 0;
    ICR1 += 50;
    }

    if(ICR1 == 500)
    {
    ICR1 = 300;
    }
    }



  • 相关阅读:
    嵌入式工程师C语言面试常见的0x10个问题
    C语言初学者网站推荐
    strlen和sizeof
    基于Docker搭建GitLab和Maven私服
    linux暴露端口可以被外部访问
    MySQL新增用户及赋予权限
    Docker添加域名解析
    Netstat 网络命令详解
    Mysql索引太长导致同步数据结构失败解决方法
    完美解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2309865.html
Copyright © 2011-2022 走看看