我在编码 PIC16F877A 时遇到问题。 GOTO AND CALL 只能管理 2kword 寻址。在像 MikroE 这样的一些编译器中,liker 通过添加 PCLATH 寄存器来管理超过 2kword 的代码,但是当我主动中断时,一切都搞砸了,结果被随机重置,或者我的代码执行错误!
问:是否可以有超过 2kword 的代码并且还可以中断???
当我剪切我的代码并且我的代码低于 2kword 并且所有代码都在 PAGE0 中并且有中断时,一切都正常。但超过一页(超过 2kword)我的代码无法正常工作
如果您想在控制器中使用超过 2k 的数据,则必须使用
PCLATH
寄存器选择页面。并且不要忘记将 PCLATH
寄存器保存到您的 ISR 中。
Rst_Vek code 0x00 ;Reset address
CLRF PCLATH ;
GOTO init ;
Int_Vek code 0x04 ;ISR vector
TMR1_IRQ
MOVWF W_safe ;save W register
SWAPF STATUS,W ;save Carry with SWAP
banksel S_safe
MOVWF S_safe ;
MOVFF PCLATH, Buffer_PCLATH ;save PCLATH
pagesel IRQ
GOTO IRQ ;could be on a different page know
init: ...
...
Page_2 code 0x0800
IRQ:
... do ISR stuff
banksel S_safe
MOVFF Buffer_PCLATH, PCLATH ;PCLATH back
SWAPF S_safe,W ;STATUS back with SWAP
MOVWF STATUS ;
SWAPF W_safe,F ;
SWAPF W_safe,W ;W back
RETFIE
;ISR end