本帖最后由 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的中断了。
|