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


原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://maoge.blog.51cto.com/2068224/385102


程序太简单啦,就不说啦,自己看吧


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;     
}


本文出自 “依旧安静” 博客,请务必保留此出处http://maoge.blog.51cto.com/2068224/385102