我正在尝试编写一个程序,该程序使用计时器 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/