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