PIC18F 中的定时器 0 中断

Timer 0 interruption on PIC18F

我正在尝试制作一个程序,它使用定时器 0 的中断。问题是我必须添加一个具有 2 个变量的函数。 计时器配置将通过定义具有以下原型的函数来执行: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 的要求创建函数并将参数存储在全局变量中。然后,您可以使用这些变量作为参数从 'callback' 函数内部调用您的函数:

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;
  }
}