gejigeji521 发表于 2024-3-25 20:22

使用中断功能做按钮

引脚 n 控制寄存器 (PINnCTRL) 可用于使能相应引脚的外部中断。

该寄存器的位 用于输入/检测配置。我们可以将中断设置为触发上升沿、下降沿或两个沿。
我将为下降沿配置中断,因此只要按下按钮,中断就会触发。

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


中断标志寄存器 (INTFLAGS) 可用于检查和清除相应的外部中断。

我们将使用此寄存器首先检查中断是否由引脚 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都提供了内置的上拉,可以简化外部电路。
页: [1]
查看完整版本: 使用中断功能做按钮