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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章