搜索

[PIC®/AVR® MCU] 【CuriosityNano测评报告】:MCC配置定时器中断

[复制链接]
8006|4
手机看帖
扫描二维码
随时随地手机跟帖
gaoyang9992006|  楼主 | 2021-9-13 13:10 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2021-9-13 14:52 编辑

PIC18F16Q41 Curiosity Nano 本次测试通过MCC配置定时器0或1,实现LED(RC1)闪烁。
经过测试发现,我配置好的TMR0,并在中断回调led闪烁函数,发现LED一直亮,不闪。
同样的设置TMR1,发现LED正常闪烁。
系统时钟源与TMR1的配置如下图所示
77124613edb50e5504.png
如下设置,实现1S执行一次回调
82177613edb9553b25.png
然后设置LED使用的管脚为输出模式
41397613edc2ebd67d.png
最后点生成代码按钮,生成MCC配置好的代码文件
21070613edc5e25557.png
然后我们在main.c文件中完成LED回调。完整代码如下
#include "mcc_generated_files/mcc.h"

void led(void)
{
    LED_Toggle();
}

void main(void)
{
        SYSTEM_Initialize();

        INTERRUPT_GlobalInterruptEnable();

        TMR1_SetInterruptHandler(led);

        while (1)
        {
        // Add your application code
        }
}
通过
TMR1_SetInterruptHandler(led);
传入定时器中断10次执行一次的函数led()地址,这样,烧录后,定时器1每经过100ms就中断一次,然后MCC配置好的函数进行计数,我们设置的是10次执行一次我们的函数,当执行完十次后回调函数就通过我们传入的函数地址执行我们LED翻转任务函数。

那么朋友们,TMR0是因为什么原因,同样的设置没有实现想要的效果呢?我猜问题一定在我这。希望拿到板子的朋友们都试试。

然后我继续在TRM1的基础上继续实验,本次我同时启用TMR0和TMR1,然后还是老配方,重新生成代码,在TRM0的回调里进行LED闪烁操作,OK,搞定,工作正常。然后关闭掉MCC中启用的TMR1,更新MCC生成的代码,编译烧录,OK,又正常了,神奇不,可能之前我哪儿没设置对,或者是什么原因。
不过终于成功运行TMR0的中断了。



使用特权

评论回复
gaoyang9992006|  楼主 | 2021-9-13 15:16 | 显示全部楼层
经过测试发现,MCC可能是我什么时候不小心改了里面的文件,卸载重装之后,单独做TMR0也正常了。
附上单独做TMR0中断控制LED灯闪烁的工程
003_timer.zip (40.98 KB, 下载次数: 0)

使用特权

评论回复
gaoyang9992006|  楼主 | 2021-9-13 15:36 | 显示全部楼层
https://www.bilibili.com/video/BV1WQ4y1y7Z2/
录制了配置和编译测试过程的视频

使用特权

评论回复
两只袜子| | 2021-9-14 17:05 | 显示全部楼层
楼主优秀啊

使用特权

评论回复
gaoyang9992006|  楼主 | 2021-9-14 18:06 | 显示全部楼层

哈哈,谢谢认可,请继续关注该板块。

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 火星国务卿 得到打赏 ¥425.00
  • 2 yanzhengxin1 得到打赏 ¥350.00
  • 3 gaoyang9992006 得到打赏 ¥265.00
  • 4 Gavin3389 得到打赏 ¥225.00
  • 5 13426257085 得到打赏 ¥200.00
  • 6 呐咯密密 得到打赏 ¥185.00
  • 7 qbwww 得到打赏 ¥160.00
  • 8 两只袜子 得到打赏 ¥155.00
  • 9 yangjiaxu 得到打赏 ¥155.00
  • 10 elephant00 得到打赏 ¥150.00
在线客服 快速回复 返回顶部 返回列表