[PIC®/AVR®/dsPIC®产品]

使用中断功能做按钮

[复制链接]
398|6
手机看帖
扫描二维码
随时随地手机跟帖
gejigeji521|  楼主 | 2024-3-25 20:22 | 显示全部楼层 |阅读模式
引脚 n 控制寄存器 (PINnCTRL) 可用于使能相应引脚的外部中断。
5253866016bda21ba5.png
该寄存器的位 [2:0] 用于输入/检测配置。我们可以将中断设置为触发上升沿、下降沿或两个沿。
我将为下降沿配置中断,因此只要按下按钮,中断就会触发。

PORTC.DIR = 0x01;  // PC5->input, PC0->output
        PORTC.PIN5CTRL |= 0x2;  // falling sense
        sei();
在这里,在设置引脚的方向后,我为引脚 PC5 配置了下降沿中断触发器。然后使用函数 sei() 来启用全局中断。
默认情况下,引脚PC5处于HIGH状态。按下按钮后,销将被拉低到地面,并且中断将触发下降沿。
我们将编写一个中断服务例程 (ISR) 来处理此中断。ISR 的参数应该是需要处理的中断向量。
您可以在器件数据表中找到相应的中断向量,如下所示。

5588666016c02a5160.png
中断标志寄存器 (INTFLAGS) 可用于检查和清除相应的外部中断。
6247566016c16b5611.png
我们将使用此寄存器首先检查中断是否由引脚 PC5 触发,然后使用它来清除中断标志。
ISR(PORTC_PORT_vect)
{
        uint8_t flag = PORTC.INTFLAGS;
        if (((flag>>5)&0x01) == 1)  // if the interrupt is triggered by the pin PC5
        {
                PORTC.OUTTGL = (1<<0);  // toggle the LED
                PORTC.INTFLAGS |= (1<<5);  // clear the interrupt flag
        }
       
}
在 ISR 内部,我们将检查中断是否由引脚 PC5 触发。我们将通过监视 INTFLAGS 寄存器的第 5 位来检查这一点。
如果中断是由 PC5 触发的,我们将切换 LED,然后通过写入 INTFLAGS 寄存器的第 5 位来清除中断标志。





使用特权

评论回复
21mengnan| | 2024-3-25 21:35 | 显示全部楼层
中断的按钮最好用,不会错过。

使用特权

评论回复
chenqianqian| | 2024-3-25 21:41 | 显示全部楼层
用中断有点浪费资源

使用特权

评论回复
我想看大海| | 2024-3-26 13:43 | 显示全部楼层
用中断方式好,实时性较高。

使用特权

评论回复
我想看大海| | 2024-3-26 13:43 | 显示全部楼层
用中断方式需要注意中断的优先级

使用特权

评论回复
我喜欢打游戏| | 2024-3-26 14:02 | 显示全部楼层
用中断要注意清除标志位

使用特权

评论回复
小明的同学| | 2024-3-30 21:40 | 显示全部楼层
端口的中断,需要上拉电阻控制,PIC都提供了内置的上拉,可以简化外部电路。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

2141

帖子

8

粉丝