4. avr 定時(shí)器/計(jì)數(shù)器1 --TC1 --CTC模式輸出PWM
掃描二維碼
隨時(shí)隨地手機(jī)看文章
T/C1是16位定時(shí)器/計(jì)數(shù)器,它的計(jì)數(shù)器由兩個(gè)8位寄存器TCNT1H,TCNT1L構(gòu)成,TCNT1H是高8位寄存器,TCNT1L是低8位寄存器。最大計(jì)算值為2的16次冪,十六進(jìn)制是0xFFFF=65535.
例如:定時(shí)200ms ,晶振8MHZ,分頻系數(shù)1024,計(jì)數(shù)時(shí)鐘頻率為8MHZ/1024=8000000HZ/1024=7812.5HZ,每個(gè)計(jì)數(shù)脈沖的周期時(shí)間為1/7812.5=0.128ms,計(jì)時(shí)200ms的計(jì)數(shù)器值為:65635-200ms/0.128ms=63972=0xF9E4 ,則TCNT1H付初值為0xF9,TCNT1L付初值為0xE4.
//函數(shù)功能:實(shí)現(xiàn)PA口的led亮0.1S,滅0.9S
#include } /*定時(shí)器1中斷函數(shù)*/ #pragma interrupt_handler timer1_ovf:9 void timer1_ovf(void) { TCNT1H=0xCF; TCNT1L=0x2C; COUNT++ if (count==9) PORTA=0x00; if (count>=10 { count=0; PROTA=0xFF; }
#define uchar unsigned char
/********以下是端口初始化函數(shù)********/
void port_init()
{
DDRA = 0xFF; //PA設(shè)置為輸出口
PORTA = 0xFF; //PA輸出高電平
}
/********定時(shí)器1初始化********/
void timer1_init()
{
TCNT1H = 0xCF;//計(jì)數(shù)器置初值
TCNT1L = 0x2C;
TCCR1A |= 0x00; //普通端口模式
TCCR1B |= (1<
/********以下是主函數(shù)********/
void main(void)
{
uchar count,T1_OVR;
port_init();
timer1_init();
while(1)
}