您的位置 首页 主动

atmega8 例程:T1定时器 快速PWM

/**函数库说明:ATMEGE8T1定时器快速PWM*版本:v1.0*修改:庞辉*…

/*

*  函数库阐明: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 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;}}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/265808.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部