[求助]关于PIC16F877编译错误的问题
我是一个刚开始使用pic单片机的新手,我编写了一个应用程序,里面用到了中断,编译时总是出现如下的错误:
Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x00000004
Errors : 1
想请教高手,这是什么问题,该如何解决?谢谢。
以下是我的程序,中断只是产生延时,随便试一下中断用的,我想知道为什么编译时会出现那个错误
LIST P=16F877A;
INCLUDE "P16F877A.INC"
ERRORLEVEL -302;
TEMP EQU 0X2D;临时寄存器,将PORT端口要检验的相应位置1
SIG1 EQU 0X21;RD0
SIG2 EQU 0X22;RD1
SIG3 EQU 0X23;RD2
SIG4 EQU 0X24;RD3
SIG5 EQU 0X25;RD4
SIG6 EQU 0X26;RD5
SIG7 EQU 0X27;RD6
SIG8 EQU 0X28;RD7
SIG9 EQU 0X29;RB1
SIG10 EQU 0X2A;RB2
SIG11 EQU 0X2B;RB3
SIG12 EQU 0X2C;RB4
;定义用于存储相应路脉冲累加值的寄存器
ORG 0X0000;
GOTO START;
ORG 0X0004;
NOP;
RETFIE;
ORG 0X0100;
START
BANKSEL INTCON;
BCF INTCON,GIE;
MOVLW 0X50;
MOVWF INTCON;
BANKSEL OPTION_REG;
MOVLW 0X40;
MOVWF OPTION_REG;
BANKSEL TRISD;
MOVLW 0XFF;
MOVWF TRISD;
MOVWF TRISB;
CLRF SIG1;1
CLRF SIG2;1
CLRF SIG3;1
CLRF SIG4;1
CLRF SIG5;1
CLRF SIG6;1
CLRF SIG7;1
CLRF SIG8;1
CLRF SIG9;1
CLRF SIG10;1
CLRF SIG11;1
CLRF SIG12;1清除各个累加寄存器,正式运用时放在主程序的开始部分,可用循环完成
MAIN
BSF INTCON,GIE;
BANKSEL STATUS;
BSF STATUS,C;将STATUS的C置,为后面的TEMP移位做准备。
MOVLW 0X20;
MOVWF FSR;设定累加值寄存器组的初始指针
CLRF TEMP;清除TEMP
NONED
RLF TEMP,1;由于已经置STATUS的C为1,所以第一次移位后TEMP=0X01
INCF FSR,1;将指针指向相应的累加寄存器
BTFSS STATUS,C;判断循环是否结束,当1再次移入STATUS的C时循环结束
GOTO PDD;未结束时去判断PORTD的哪一位为1
GOTO DOVER;循环结束,去判断PORTB。
PDD;判断PORTD的哪一为1,将TEMP and POPRTD,若PORTD相应位为1则结果不为0,STATUS的Z为0。利用这个作为判断条件
MOVF TEMP,0;将TEMP中的值写入W寄存器
ANDWF PORTD,0;PORTD and TEMP
BTFSC STATUS,Z;检验结果是否为0
GOTO NONED;若结果为0说明PORTD相应位为0,不需要累加,继续看下一位。否则进行累加
COUNTD;利用寄存器间接寻址完成相应累加器的加1
INCF INDF,1;
GOTO NONED;继续检查下一位
DOVER;以下为检验PORTB的相应位,原理与上面相同。
MOVLW 0X01;
MOVWF TEMP;
DECF FSR,1;由于判断PORTD时多加一次,因此减掉多加的一次。
BCF STATUS,C;经过上面的循环STATUS的C位为1,将其清除避免影响后面的判断
NONEB
RLF TEMP,1;
INCF FSR,1;
BTFSS TEMP,5;
GOTO PDB;
GOTO BOVER;
PDB
MOVF TEMP,0;
ANDWF PORTB,0;
BTFSC STATUS,Z;
GOTO NONEB;
COUNTB
INCF INDF,1;
GOTO NONEB;
BOVER
END;
发表时间:2005年9月26日0:30:14