AVR之最简单外部中断、定时器0、定时器1程序

程序太简单啦,就不说啦,自己看吧
ATMEGA16用ICCAVR编译器
1、外部中断
#include<iom16v.h>
#include <AVRdef.h>
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<iom16v.h>
#include <AVRdef.h>
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<iom16v.h>
#include <AVRdef.h>
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<iom16v.h>
#include<AVRdef.h>
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;
}

你可能感兴趣的:(定时器,职场,休闲,avr,外部中断)