PIC16f877A 中是否可以有超过 2kword 的代码?

问题描述 投票:0回答:1

我在编码 PIC16F877A 时遇到问题。 GOTO AND CALL 只能管理 2kword 寻址。在像 MikroE 这样的一些编译器中,liker 通过添加 PCLATH 寄存器来管理超过 2kword 的代码,但是当我主动中断时,一切都搞砸了,结果被随机重置,或者我的代码执行错误!

问:是否可以有超过 2kword 的代码并且还可以中断???

当我剪切我的代码并且我的代码低于 2kword 并且所有代码都在 PAGE0 中并且有中断时,一切都正常。但超过一页(超过 2kword)我的代码无法正常工作

pic
1个回答
0
投票

如果您想在控制器中使用超过 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
© www.soinside.com 2019 - 2024. All rights reserved.