AVR單片機(jī)定時(shí)/計(jì)數(shù)器學(xué)習(xí)筆記(三)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
定時(shí)/計(jì)數(shù)器1(16位)有普通模式、CTC模式、快速PWM模式、相位修正PWM模式等工作模式。
3.快速PWM模式(需要用到OC1A、OC1B兩個(gè)引腳)
前提:由TCCR1B的bit4、bit3和TCCR1A的bit1、bit0組合來設(shè)置波形產(chǎn)生模式為模式15(快速PWM
)。
(1)TCCR1A的bit7、bit6用于設(shè)置OC1A腳的比較輸出模式,bit5、bit4用于設(shè)置OC1B腳的比較輸出模式。(此處我們設(shè)為,OC1A比較匹配時(shí)取反;OC1B比較匹配時(shí)清零,TOP時(shí)置位)
(2)TCCR1B的bit2、bit1、bit0設(shè)置時(shí)鐘頻率。
(3)OCR1A用來設(shè)置計(jì)數(shù)的上限值,OCR1B用來設(shè)置計(jì)數(shù)的匹配值
例程1:
#include
#include
void main()
{
DDRD|=0X30;
TCCR1A=0X63; //15模式,OC1B比較匹配時(shí)清零,TOP時(shí)置1;OC1A匹配時(shí)取反
TCCR1B=0X1B; //64預(yù)分頻
OCR1A=1249; //上限值,OC1B輸出100Hz;OC1A輸出50Hz方波
OCR1B=250; //匹配值,OC1B輸出占空比為20%
}
例程2:
#include
#include
//產(chǎn)生38KHz 占空比為50%的信號(hào)
void main()
{
DDRD|=0X30;
TCCR1A=0X23; //配置寄存器,OC1A作為普通IO口;OC1B比較匹配時(shí)清零,TOP時(shí)置1
TCCR1B=0X19; //15模式,無預(yù)分頻
OCR1A=209; //上限值,得到38KHz的PWM信號(hào)(OC1B口)
OCR1B=104; //匹配寄存器,2分之1的占空比
}
例程3:
#include
#include
//產(chǎn)生1Hz 占空比為50%的信號(hào)
void main()
{
DDRD|=0X30;
TCCR1A=0X23; //配置寄存器,OC1A作為普通IO口;OC1B比較匹配時(shí)清零,TOP時(shí)置1
TCCR1B=0X1D; //15模式,1024預(yù)分頻
OCR1A=7811; //上限值,得到1Hz的PWM信號(hào)(OC1B口)
OCR1B=3905; //匹配寄存器,2分之1的占空比
}