ATMEGA128定時(shí)器1的使用
//環(huán)境:winavr+avr studio
char temp=0;
ISR(TIMER1_COMPA_vect )//中斷函數(shù)
{
// user code here
temp++;
if (temp==10)
temp=0;
PORTA=temp;
DDRA=0xff;
}
void mytimer_init(void)
{
//關(guān)總中斷
cli();
//TCCR1A為配置引腳輸出模式,這里取默認(rèn)為0,未連接即可,因此不需要為其賦值
//T/C1時(shí)鐘源選擇為clk/64,CLK現(xiàn)為內(nèi)部晶振4MHZ,因此時(shí)鐘為4,000,000/64 HZ = 62500 HZ
TCCR1B &= ~0x07;
TCCR1B |= 0x03;
//選擇模式 WGM10~WGM13
TCCR1A &= ~0x03;
TCCR1B &= ~(0x03<<3);//模式4 CTC
TCCR1B |= 0x01<<3;
//賦值定時(shí)初值 16位
TCNT1=0;
//賦值比較寄存器TOP初值 16位 ,在以上工作模式下,當(dāng)TCNT1=OCR1A時(shí),TCNT1自動(dòng)清0
OCR1A = 62500;//一秒中斷一次
//使能定時(shí)器T/C1溢出中斷,T/C1的其它中斷屏蔽掉
TIMSK &= ~(0xf0<<2);
TIMSK |= (0x01<<4);
ETIMSK &= ~0x01;
//清中斷溢出標(biāo)志位,進(jìn)入中斷后也會(huì)自動(dòng)清除,以后不用再清了
TIFR |= 1<<2;
//啟動(dòng)定時(shí)器
SFIOR &= 0x7e;
//開(kāi)總中斷
sei();
}