专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

ATmega16L-外部中断1例程

作者:佚名   来源:本站原创   点击数:  更新时间:2011年06月21日   【字体:
/***************************************
//取自周兴华的《AVR单片机C语言高级程序设计》

程序现象:PB口上的8个灯一直同时闪烁。
当按下接在PD7的一个按键时, 接在PD3的一个小灯开始闪烁
PD3对应于INT1. 闪了十次之后,PB上的灯继续闪
本例子应用了中断。   
***************************************/

#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char 
#define uint  unsigned int

uint shu;
/***************************************
                  delay
****************************************/
void delay_ms(uint k)
{
  uint i,j;
  for(i=0;i<k;i++)
  for(j=0;j<570;j++);
}

/****************************************
                 main
****************************************/
void main(void)
{
 DDRB=0xff;
 PORTB=0XFF;
 
 DDRD=0XF7;  //INT1设为输入
 PORTD=0XFF; 
 
 MCUCR=0X08; //INT1设置为下降沿触发
 GICR=0X80;  //使能INT1中断
 SREG=0X80;  //使能总中断
 
 while(1)
 {
   PORTB=0X00;
   delay_ms(100);
   PORTB=0XFF;
   delay_ms(100);
 }
}

/***************************************
                ISR
***************************************/
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
  for(shu=0;shu<10;shu++)
  {
   PORTD|=BIT(7);
   delay_ms(100);
   PORTD&=~BIT(7);
   delay_ms(100);
  }
}

关闭窗口

相关文章