在用16887写程序,需要用到定时器中断和电平变化中断,在写定时中断调试后,一切正常,但加上B0口的电平变化中断后,发现定时器好像不行了,而且,由于我是使用PORTB0位的电平变化中断,我发现只要置位ANSELH.12(POERTB0的模拟量输入),就会影响到原来可以正常运行的定时器,我的中断处理函数如下:
void interrupt interruptdeal(void)
{
if(T0IF) //定时器溢出中断
{
timegrow = timegrow + 1;
TMR0 = 0x97;
T0IF = 0; //清除T0IF
CLRWDT();
}
else if(RBIF) //电平变化中断
{
PortB0Intrupt = PortB0Intrupt+ 1;
PORTB = PORTB;
RD0 = ~RD0;
SendToPrin(&PortB0Intrupt,2);
RBIF = 0;
}
}我的疑问是:
1:难道16887只能处理一种中断,不能存在定时中断和电平变化中断吗?
2:对于电平变化中断,16887是不是PORTB中的任何一位都可以采集到电平变化中断,这个中断需要电压稳定多长?或者换句话说,能采集到多快的脉冲变化,请有经验的指导一下:
下面是我的电平变化中断初始化:
void PortB0JumpInitFunc(void)
{
TRISB = 0X01; //B0~B3为输入方式;
PORTB = 0X01;
ANSEL = 0;
// ANSELH = 0;
ANSELH = 0xEF;(ANSELH.4影响到了定时器中断)
GIE = 1;
PEIE = 1; //允许外设中断
RBIE = 1;
IOCB = 0x01; //B0电平变化中断;
WPUB = 0X0F;
RBIF = 0;
INTE = 1;
}
|