c - PIC18F 中的定时器 0 中断

标签 c microcontroller pic pic18 xc8

我正在尝试编写一个程序,该程序使用计时器 0 的中断。问题是我必须添加一个带有 2 个变量的函数。 定时器配置将通过定义具有以下原型(prototype)的函数来执行:void int_tmr0 (int conf_int, int conf_T0),我以这种形式完成了它:

void conf(int p1, int p2)
    {
        T0CON=p1;
        INTCON=p2;
    }

我尝试将记录:T0CON、INTCON 放入这两个变量:p1 和 p2 中。 我不确定是否可以通过以下方式在主函数中调用这两个变量:

    void main()
    {
        WDTCONbits.ADSHR = 1;
        MEMCONbits.EBDIS = 1;
        TRISD = 0x0;
        INTCONbits.GIE = 1;
        p1=0b10001000;
        INTCONbits.TMR0IE = 0;
    }

这是完整的代码:

#include <xc.h>

unsigned char counter;

void interrupt f1()
{
    if(INTCONbits.TMR0IE && INTCONbits.TMR0IF)
    {
        counter++;
        INTCONbits.TMROIF=0     
    }

void conf(int p1, int p2)
    {
        T0CON=p1;
        INTCON=p2;
    }

    void main()
    {
        WDTCONbits.ADSHR = 1;
        MEMCONbits.EBDIS = 1;
        TRISD = 0x0;
        INTCONbits.GIE = 1;
        p1=0b10001000;
        INTCONbits.TMR0IE = 0;
    }
    while(1){
        LATD= counter;
    }
}

最佳答案

如果我没理解错的话,

  • 您需要有一个由 Timer0 中断调用的函数
  • 您的 SDK 将此函数定义为 void int_tmr0(int conf_int, int conf_T0)
  • 您需要您的函数接收一些其他任意参数

解决方案是根据 SDK 的需要创建函数并将参数存储在全局变量中。然后,您可以使用这些变量作为参数从“回调”函数内部调用您的函数:

int volatile param_1 = 0, param_2 = 0;

void int_tmr0(int conf_int, int conf_T0)
{
  conf(param_1, param_2);
}

void conf(int p1, int p2)
{
  T0CON=p1;
  INTCON=p2;
}

int main()
{
  WDTCONbits.ADSHR = 1;
  MEMCONbits.EBDIS = 1;
  TRISD = 0x0;
  INTCONbits.GIE = 1;
  param_1=0b10001000;
  INTCONbits.TMR0IE = 0;

  while(1){
      LATD= counter;
  }
}

关于c - PIC18F 中的定时器 0 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59718918/

相关文章:

c - 从编辑框获取文本

c - 为什么以及如何在 C 语言中从 -52 开始未初始化的字符?

c - 如何使用 C 在嵌入式系统中发出蜂鸣声?

c - 为什么将结构地址转换为 int 指针、取消引用并将其用作语句中的 LVALUE 会使我的微 Controller 崩溃?

c - 在 PIC18LF6722 中使用高优先级接收中断初始化 UART

c - 当使用free()时,内存使用不会减少

c - 是否有一个标准的 C 头文件为所有基本类型分配一个数值?

C++ 数据类型及其对可执行文件大小的影响

c - 从 5v 到 3.3v 的电压电平转换

microcontroller - 读取 PIC18 上输入引脚的状态