tony001 发表于 2018-3-30 11:20:10

XC8的低优先级中断进不了,是什么原因啊,

进不了低优先级中断,是我的关键字写的不对吗,谢谢!

#include"Head.h"
void main(void)
{
CLRWDT();//典型间隔2s(复位值)
OSCCON=0b11110000;
OSCTUNE=0;
TRISA=0b11111111;
TRISB=0b00000001;
TRISC=0b11010000;//RC4(nrf2401的数据输出MOSO)
LATA=0;
LATB=0;
LATC=0;
PORTA=0;
PORTB=0;
PORTC=0;
ANCON0=0b00101111;
ANCON1=0;
WPUB=0;
TXSTA1=0b00100100;//SYNC=0;BRGH=1;
RCSTA1=0b10010000;
BAUDCON1=0b00001000;//BRG16=1;
SPBRGH1=1;//(16000000/9600)/4-1=416   1*256+160=416
SPBRG1=160;

ADCON0=0b00000001;//先测AN0也就是(输入电压)
ADCON1=0b00100000;
ADCON2=0b10110010;
T0CON=0b11001000;
INTCON=0b11100000;
INTCON2=0b11000100;//TMR0 溢出中断优先级位
INTCON3=0;
PIR1=0;
PIR2=0;
PIR3=0;
PIR4=0;
PIR5=0;
PIE1=0b00100000;//开AD中断,开UART中断
PIE2=0;
PIE3=0;
PIE4=0;
PIE5=0;
T1CON=1;
IPEN=0;
while(1)Send_text();
}
void interrupt tc_int(void)
{
if(TMR0IF&TMR0IE)//4/32=0.125us 4/32*256*2=64us 1/(64/1000000)=15625
{
    TMR0IF=0;
}
}

void interrupt low_priority   LowIsr(void)
{
static unsigned char a=0;
if(RC1IF&&RC1IE)
{
   RC1IF=0;
   a=RCREG1; LATB6^=1; A=1;
}
}

yoursnemo 发表于 2018-3-30 12:09:36

PIC的8bit MCU的中断入口只有1个(0x0004),优先级是软件来定义。所有中断的判断都扔到void interrupt ****(void)里边判断,谁先判断谁的优先级高。

gaolf_2012 发表于 2018-3-30 12:15:44

yoursnemo 发表于 2018-3-30 12:09
PIC的8bit MCU的中断入口只有1个(0x0004),优先级是软件来定义。所有中断的判断都扔到void interrupt ****( ...

严谨点儿的说,pic16一个入口,pic18有两个0x0008,0x0018

yoursnemo 发表于 2018-3-30 12:17:43

gaolf_2012 发表于 2018-3-30 12:15
严谨点儿的说,pic16一个入口,pic18有两个0x0008,0x0018

好吧~我错了~

tony001 发表于 2018-3-30 13:19:45

我用的PIC18F25K80 按XC8的说明写的,打死进不了低优先级的中断

gaolf_2012 发表于 2018-3-31 08:49:12

参考数据手册10.0中断章节
通过将IPEN位(RCON<7>)置1,可使能中断优先级功能。当使能中断优先级时,有2个全局中断允许位。
将GIEH位(INTCON<7>)置1,可允许所有优先级位置1(高优先级)的中断。将GIEL位(INTCON<6>)置1
,可允许所有优先级位清零(低优先级)的中断。当中断标志位、允许位及相应的全局中断允许位均被置1
时,中断将根据优先级位的设置立即跳转到地址0008h或0018h。也可以通过设置相应的中断允许位来禁止个
别中断

tony001 发表于 2018-3-31 09:23:03

谢谢各位,找到原因了,

IPRX寄存器忘记配置了,{:sad:}
页: [1]
查看完整版本: XC8的低优先级中断进不了,是什么原因啊,