新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > atmega8 例程:T1定時器 快速PWM

atmega8 例程:T1定時器 快速PWM

作者: 時間:2016-11-19 來源:網絡 收藏
/*
*  函數庫說明:ATMEGE8 T1定時器 快速PWM*  版本:      v1.0									       *  修改:      龐輝									       *  修改日期:  2011年08月11日							   *														   *  說明:	   OC1A 20khz  50%占空比*              OC1B 10khz  33%占空比*              且在溢出中斷中頻率不斷改變										   *                                                          *  版本更新:                                              *                                                                                          *注意:快速PWM模式 WGM1=5,6,7,14,15  *      單斜波計數,用于輸出高頻率的PWM信號(比雙斜波的高一倍頻率) *      都有TOV1溢出中斷,發(fā)生于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;}}


評論


技術專區(qū)

關閉