原创 ATmega16外部中断INT0的使用

2011-8-17 06:08 4272 9 9 分类: MCU/ 嵌入式

 外部中断INT0的使用

首先看数据手册关于外部中断的说明:

20110817060707001.jpg

这个就是GICR寄存器的内部了,当那个位置1的时候则表示开启允许位。

20110817060707002.jpg

上图是我们的中断总允许位。

20110817060707003.jpg

这个主要是控制外部中断的触发方式是低电平或是任何电平变化或是上升沿还是下降沿,在本程序中我们采用了默认的方式低电平触发方式来触发中断的。

20110817060744001.gif

上程序了:

#include<iom16v.h>

#include<macros.h>//引用此头文件主要是调用开总中断的函数

 

#define uint8 unsigned char

#define uint16 unsigned int

void delay(uint16 z)

{

       uint16 x,y;

        for(x=z;x>0;x--)

             for(y=110;y>0;y--);

}

 

////////////////////////////////////////////////////////////////////////////

void port_init(void)

{

       DDRB=0xff;//配置为输出

       PORTB=0x00;//全亮

       DDRD=0x00;//配置为输入状态

       PORTD=0xff;//配置为上拉状态

}

/////////////////////////////////////////////////////////////////////////////

#pragma interrupt_handler Int0:2

void Int0(void)

{

        uint8 temp=0x01;

        while(1)

      {

 

              if(temp==0x00)

                     {

                            temp=0x01;

                     }

              PORTB=~temp;

             temp<<=1;

              delay(500);

      }

}

/////////////////////////////////////////////////////////////////////////////

void main(void)

{

       port_init();//端口初始化操作

       GICR |=(1<<INT0);//确定为外部中断0使能

        SEI();//开总中断允许

        while(1);//等待中断的到来

}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条