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

【CuriosityNano测评报告】:MCC配置定时器中断

[复制链接]
32118|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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的配置如下图所示

如下设置,实现1S执行一次回调

然后设置LED使用的管脚为输出模式

最后点生成代码按钮,生成MCC配置好的代码文件

然后我们在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)
#include "mcc_generated_files/mcc.h"

void led(void)
{
    LED_Toggle();
}

void main(void)
{
    // Initialize the device
    SYSTEM_Initialize();

    TMR0_SetInterruptHandler(led);
    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    while (1)
    {
        // Add your application code
    }
}

使用特权

评论回复
板凳
gaoyang9992006|  楼主 | 2021-9-13 15:36 | 只看该作者
https://www.bilibili.com/video/BV1WQ4y1y7Z2/
录制了配置和编译测试过程的视频

使用特权

评论回复
地板
两只袜子| | 2021-9-14 17:05 | 只看该作者
楼主优秀啊

使用特权

评论回复
5
gaoyang9992006|  楼主 | 2021-9-14 18:06 | 只看该作者

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

使用特权

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

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1961

主题

15933

帖子

208

粉丝