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