AVR之最简单外部中断、定时器0、定时器1程序
2021-06-21 来源:eefocus
程序太简单啦,就不说啦,自己看吧
ATMEGA16用ICCAVR编译器
1、外部中断
#include #include unsigned char temp=0x80; void main() { DDRA=0xff; GICR|=0x40;//使能外部INT0 MCUCR|=0x01;//INT0下降沿触发 SEI();//总中断 while(1); } #pragma interrupt_handler int0_isr:iv_INT0 void int0_isr(void) { PORTA=temp; temp=temp>>7|temp<<1; } 2、定时器0--普通模式 #include #include unsigned char count; void main() { //TCCR0=0; TCNT0=12; //OCR0=244; TCCR0=0x05; TIMSK=0x01; SEI(); DDRA=0xff; PORTA=0; while(1); } #pragma interrupt_handler Timer0:iv_TIMER0_OVF void Timer0() { TCNT0=12; count++; if(count==2) { PORTA=~PORTA; count=0; } } 3、定时器0--匹配模式 #include #include void main() { //TCCR0=0; TCNT0=12;//设置计数初值,计数244后清零申请中断 OCR0=244;//从0计数到244,匹配申请中断 TCCR0=0x0d;//CTC模式,1024预分频 TIMSK=0x02;//使能输出比较匹配中断 SEI(); DDRA=0xff; PORTA=0; while(1); } #pragma interrupt_handler Timer0:iv_TIMER0_COMP void Timer0() { count++; if(count==2) { PORTA=~PORTA; count=0; } } 4、定时器1 #include #include void main() { TCCR1A=0;//WGM11、10清零 TCCR1B=0; TCNT1H=0x0b; TCNT1L=0xdb; TCCR1B=2;//WGM13、12清零,为普通模式,时钟选择CS02~00:8预分频 TIMSK=0x04; SEI(); DDRA=0xff; PORTA=0; while(1); } #pragma interrupt_handler timer1:iv_TIMER1_OVF void timer1() { TCNT1H=0x0b; TCNT1L=0xdb; PORTA=~PORTA; }