PIC18F上的定时器0中断
我正在尝试制作一个程序,该程序使用定时器0的中断。问题是我必须添加一个带有2个变量的函数。 计时器配置将通过定义一个具有以下原型的函数来执行:void int_tmr0(int conf_int,int conf_T0),我就是这样做的:PIC18F上的定时器0中断,c,microcontroller,pic,pic18,xc8,C,Microcontroller,Pic,Pic18,Xc8,我正在尝试制作一个程序,该程序使用定时器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 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;
}
}
#包括
无符号字符计数器;
无效中断f1()
{
if(INTCONbits.TMR0IE&&INTCONbits.TMR0IF)
{
计数器++;
INTCONbits.TMROIF=0
}
无效形态(整数p1,整数p2)
{
T0CON=p1;
INTCON=p2;
}
void main()
{
WDTCONbits.ADSHR=1;
MEMCONbits.EBDIS=1;
TRISD=0x0;
INTCONbits.GIE=1;
p1=0b10001000;
INTCONbits.TMR0IE=0;
}
而(1){
LATD=计数器;
}
}
如果我理解正确
- 您需要一个由定时器0中断调用的函数
- 您的SDK将此函数定义为
void int\u tmr0(int-conf\u-int,int-conf\u-T0)
- 您需要函数来接收其他任意参数
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;
}
}
你想干什么?我没有得到它,并且您的代码中从未调用过'conf'函数。计时器中断0。计时器配置将通过定义如下函数来执行:void int_tmr0(int conf_int,int conf_T0)。该函数将使用与计时器0对应的寄存器。如果我想在这两个寄存器T0CON和INTCON之间切换,我使用了void conf(int p1,int p2),而不是void int_tmr0(int conf_int,int conf_T0)。我可以这样修改void conf吗:``void conf(intp1,intp2){T0CON=p1;INTCON=p2;if(!p1){T0CONbits.TMR0ON=1}else{INTCONbits.TMR0ON=0}else if(!p2){T0CONbits.TMR0ON=0}`?