程序太簡單啦,就不說啦,自己看吧
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;
}
#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;
}
}
#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;
}
}
#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;
}
#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;
}