ATmega16开发板教程(5)——外部中断

​6、外部中断

这里主要编写外部中断0和1的边沿触发,通过LED状态显示。

外部中断0

外部中断我们要知道的是:①如何触发?上升沿、下降沿还是高低电平;②外部中断使能;③中断服务函数的编写。

AVR提供了3个外部中断0/1/2,对应的Pin脚是PD2/PD3/PB2,其中外部中断0是所有中断中优先级最高,响应最快的。

MCUCR:SM2,SE,SM1,SM0,ISC11,ISC10,ISC01,ISC00

MCUCR寄存器的低2位用于控制INT0中断的触发方式,具体如下图:

这里我们选择上升沿触发产生中断请求。

GICR:INT1,INT0,INT2,Dummy4,Dummy3,Dummy2,IVSEL,IVCE

中断使能位为GICR的第6位,默认初始值=0,赋值为1使能。

③编写初始化函数和中断函数,具体程序如下:

当然别忘了,对应中断引脚设置为上拉输入。

外部中断1

外部中断1与0类似,其设置触发方式的寄存器与INT0一致,但具体是第2和3位来设置。

同理这里还是设置为上升沿触发。

然后使能位是GICR寄存器的最高位,赋值1即可。

具体编程如下:

仿真视频

主函数如下:LED2正常闪烁时,等待外部中断0和1触发。

/**
******************************************************************************
*   @file      main.c
*   @author    Alex——小白
*   @version   V1.0
*   @date      2021.1.20
*   @brief     外部中断,按键控制LED亮灭
*  @store     Proteus仿真店子——公众号
*  @Link      https://shop484534014.taobao.com/
*  @Email     844545015@qq.com
******************************************************************************
*   @attention  All Rights Reserved  
**/
​
#include <main.h>
​
void main(void)
{
    LED.LED_Init(0x07);
    EXIT.EXIT0_Init();
    EXIT.EXIT1_Init();
    while(1)
    {  
        LED.LED_Reverse(2);
        Delay.Delay_ms(500);
    }
}

如需Proteus和IAR安装包以及AVR编程参考手册,请关注公众号:

Proteus仿真店子

可通过查看历史记录,查看源码和仿真工程

(若需Proteus和IAR安装包以及AVR编程参考手册,后台回复:AVR;若需其它设计,后台回复:AVR设计

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值