[PIC®/AVR®/dsPIC®产品] 使用中断功能做按钮

[复制链接]
1331|6
 楼主| gejigeji521 发表于 2024-3-25 20:22 | 显示全部楼层 |阅读模式
引脚 n 控制寄存器 (PINnCTRL) 可用于使能相应引脚的外部中断。

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

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


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

我们将使用此寄存器首先检查中断是否由引脚 PC5 触发,然后使用它来清除中断标志。
  1. ISR(PORTC_PORT_vect)
  2. {
  3.         uint8_t flag = PORTC.INTFLAGS;
  4.         if (((flag>>5)&0x01) == 1)  // if the interrupt is triggered by the pin PC5
  5.         {
  6.                 PORTC.OUTTGL = (1<<0);  // toggle the LED
  7.                 PORTC.INTFLAGS |= (1<<5);  // clear the interrupt flag
  8.         }
  9.        
  10. }
在 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都提供了内置的上拉,可以简化外部电路。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2465

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部