[PIC®/AVR®/dsPIC®产品] PIC18F16Q41通过MCC配置IO中断控制LED翻转

[复制链接]
11257|8
 楼主| gaoyang9992006 发表于 2021-9-16 23:22 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2021-9-25 08:55 编辑

一、打开MPLAB X IDE,新建工程,选择你用的型号,这里我选择的是PIC18F16Q41

创建好基本的工程文件后,启用MCC,图形化的配置如下,启用我们的LED管脚和按键SW管脚,并给他们起个好记的名字LED,SW
名词解释:interrupt-on-change (IOC),电平改变中断。
给按键的IOC设置为负极触发(低电平触发),并启用弱上拉(WPU:Weak Pull-Up )这样默认为弱上拉是正极高电平,当按下后触发了IO的变化,且低电平,

之后点Generate生成工程代码

二、完善主函数代码
  1. #include "mcc_generated_files/mcc.h"

  2. void led(void)
  3. {
  4.     LED_Toggle();
  5. }
  6. void main(void)
  7. {
  8.     // Initialize the device
  9.     SYSTEM_Initialize();
  10.     IOCCF0_SetInterruptHandler(led);
  11.     // Enable the Global Interrupts
  12.     INTERRUPT_GlobalInterruptEnable();

  13.     // Disable the Global Interrupts
  14.     //INTERRUPT_GlobalInterruptDisable();

  15.     while (1)
  16.     {
  17.     }
  18. }
其实无非就是启用全局中断,然后通过设置中断处理函数,让中断回调函数去执行我们的led翻转函数。
IOCCF0_SetInterruptHandler(led);

注意,如果烧录后,没反应,系统没立即执行新的程序,这个时候拔了开发板,重新复位上电,即可执行,之前我还以为是有什么问题,原来是因为开发板没有复位按键,系统没能正常复位。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| gaoyang9992006 发表于 2021-9-16 23:42 | 显示全部楼层
本帖最后由 gaoyang9992006 于 2021-9-16 23:49 编辑

接下来我们采用另外一种专用的外部中断:EXT_INT
设置按键的管脚为上升沿中断,实现,松手后触发中断函数


  1. #include "mcc_generated_files/mcc.h"

  2. void led(void)
  3. {
  4.     LED_Toggle();
  5. }
  6. void main(void)
  7. {
  8.     // Initialize the device
  9.     SYSTEM_Initialize();


  10.     // Enable the Global Interrupts
  11.    INTERRUPT_GlobalInterruptEnable();

  12.     // Disable the Global Interrupts
  13.     //INTERRUPT_GlobalInterruptDisable();
  14.     INT0_SetInterruptHandler(led);
  15.     while (1)
  16.     {
  17.         // Add your application code
  18.     }
  19. }
这跟传统51单片机上的外部中断是很相似的一种中断方式。针对单个PIN的外部中断处理方式,这种一般用于重要的外部中断事件使用中。
编译后下载,发现已经可以做到按下按键没反应,松手后LED状态翻转。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| gaoyang9992006 发表于 2021-9-16 23:44 | 显示全部楼层
最后提供两中外部IO中断的演示工程






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
koala889 发表于 2021-9-18 16:49 | 显示全部楼层
楼主,可以把类似的帖子想办法做个汇总么?
有时候,看了这个,找之前的,要翻半天。
hu9jj 发表于 2021-9-18 17:47 | 显示全部楼层
koala889 发表于 2021-9-18 16:49
楼主,可以把类似的帖子想办法做个汇总么?
有时候,看了这个,找之前的,要翻半天。 ...

有汇总贴:
https://bbs.21ic.com/icview-3159186-1-1.html
 楼主| gaoyang9992006 发表于 2021-9-20 16:35 | 显示全部楼层
hu9jj 发表于 2021-9-18 17:47
有汇总贴:
https://bbs.21ic.com/icview-3159186-1-1.html

我在单独做一个系列,最后会打包汇总并,每一个例子做一个视频。请关注我的B站账号。
xinpian101 发表于 2021-9-21 22:01 | 显示全部楼层
例子不错,入门的好教程。
koala889 发表于 2021-9-22 10:00 | 显示全部楼层
hu9jj 发表于 2021-9-18 17:47
有汇总贴:
https://bbs.21ic.com/icview-3159186-1-1.html

感谢,这个很好
xinpian101 发表于 2021-10-24 23:19 | 显示全部楼层
参考学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

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