PIC18F中断编译错误

[复制链接]
4642|10
 楼主| liuf 发表于 2011-5-21 23:26 | 显示全部楼层 |阅读模式
在一个工程里编译没问题,在另一个工程里就有问题,代码完全一样。
Error - file './timer.o', section 'InterruptVectorHigh', Symbol 'InterruptHandler' out of range of relative branch instruction.
Errors    : 1


//中断处理
#pragma code
#pragma interrupt InterruptHandler
void InterruptHandler(void)
{
  if(INTCONbits.TMR0IF==1)//1mS
  {
     TMR0L|=TIMER0_1MS_LOW;
     INTCONbits.TMR0IF=0;         // reset int0 flag
     time_1ms_flag=1;
  }   
}
//串口\timer0中断函数
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
_asm
bra InterruptHandler
_endasm
}

注释掉如下就没问题#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
_asm
bra InterruptHandler
_endasm
}
yqp0424 发表于 2011-5-21 23:43 | 显示全部楼层
把中断处理放到下面,然后再在前面进行声明就行了
 楼主| liuf 发表于 2011-5-21 23:46 | 显示全部楼层
试了,不行,
 楼主| liuf 发表于 2011-5-22 00:02 | 显示全部楼层
试了2个小时了,就是编译不过啊:dizzy:
去掉这句就过bra InterruptHandler
 楼主| liuf 发表于 2011-5-22 09:19 | 显示全部楼层
按这个顺序放就过了:L
void InterruptHandler(void)
void InterruptVectorHigh(void)
main()
snakeemail 发表于 2011-5-22 10:24 | 显示全部楼层
估计是要声明在前
 楼主| liuf 发表于 2011-6-15 10:55 | 显示全部楼层
extern void InterruptHandler(void);
extern void InterruptVectorHigh(void) ;
void InterruptHandler(void)
{...}
void InterruptVectorHigh(void)
{...}
main()
编译通过,后又增加了一段程序,编译又不过了!
 楼主| liuf 发表于 2011-6-17 14:26 | 显示全部楼层
没人碰到过这问题吗?
sjzzlxy 发表于 2011-6-17 16:38 | 显示全部楼层
#pragma interrupt interrupt_isr
#pragma code high_ISR = 0x08
void high_ISR( )
{
        _asm
        goto interrupt_isr
        _endasm
}
#pragma code
void interrupt_isr(void)
{
    if(PIR1bits.ADIF == 1)
    {
        PIR1bits.ADIF = 0;
        ADResult();
    }
}
这是我的中断程序,和你的不太一样 不知道bra 是啥 我以前还真没遇见过
diweo 发表于 2011-6-17 19:35 | 显示全部楼层
Symbol 'InterruptHandler' out of range of relative branch instruction不是提示超出寻址范围了么?

BRA 无条件跳转
语法: BRA n
操作数: -1024 ≤ n ≤ 1023
 楼主| liuf 发表于 2011-6-20 13:39 | 显示全部楼层
bra 换成goto 就行了,试了好几天的才找到解决办法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

105

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部