【问题标题】:Timer 0 interruption on PIC18FPIC18F 中的定时器 0 中断
【发布时间】:2020-01-13 14:50:29
【问题描述】:

我正在尝试制作一个程序,它使用定时器 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;
    }
}

【问题讨论】:

  • 你想做什么?我没听明白,你的代码中永远不会调用你的“conf”函数。
  • 定时器中断 0。定时器配置将通过定义如下函数来执行: void int_tmr0 (int conf_int, int conf_T0) 该函数将使用定时器 0 对应的寄存器。而不是 void int_tmr0 (int conf_int, int conf_T0) 我用过 void conf(int p1, int p2)

标签: c microcontroller pic pic18 xc8


【解决方案1】:

如果我没听错的话,

  • 您需要有一个由 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;
  }
}

【讨论】:

  • 如果我想在这两个寄存器 T0CON 和 INTCON 之间切换。我可以这样修改 void conf:``` void conf(int p1, int p2) { T0CON=p1; INTCON=p2; if(!p1){ T0CONbits.TMR0ON=1 } else { INTCONbits.TMR0ON=0 } else if (!p2){ T0CONbits.TMR0ON=0 } }```?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多