新闻  |   论坛  |   博客  |   在线研讨会
pic汇编宏技巧-bank切换
mayer | 2009-08-03 18:27:08    阅读:3470   发布文章

pic汇编宏技巧-bank切换

 

MPLAB中有条非常有用的伪指令:BANKSEL可用它来快捷设置 BANK 而不用 STATUS 的 RP0 ,RP1去具体的设置BANK 。

BANKSEL ****,通常只改变STATUS,RP1,RP0,而RP1,RP0仅仅对 直接寻址 有效

 

但BANKSEL不会改变STATUS,IRP,也就是说,BANKSEL的页选择对 间接寻址 是没有用的.

 

以877A为例,如果你的寻址目标在BANK1,那么你设置BANKSEL BANK1,这样直接,间接寻址都有效

 

但如果你的寻址目标在BANK3,而用BANKSEL BANK3设置页地址,此时直接寻址有效,但间接寻址就会出错,因为BANKSEL不能改变STATUS,IRP

 

编译是能通过的,没问题,即便你不设置BANKSEL,编译也照样能通过,如果你用BSF(BCF)  STATUS,RP0(RP1)语句编译并烧录后,程序能正常运行,而用BANKSEL BANK*,编译并烧录,而程序却不能通过,这样的问题才是古古怪怪的问题,那我也没办法.

 

我有一个大程序,开始能通过,后来因为扩展,将原来BANK1上定义的寄存器改为BANK2,对应的页设置也仅仅是用BANKSEL BANK3,编译照样能通过,运行时就麻烦了.后来在每个BANKSEL BANK*的语句后面紧跟一句BSF(BCF) STATUS,IRP.如果要返回BANK0时,全部用CLRF STATUS(或者同时将IRP,RP1RP0)三个位清0

 

 

 

PUSH_MACRO  MACRO

    MOVWF   W_TEMP

    SWAPF   STATUS,W

    MOVFW   STATUS_TEMP

    ENDM

 

POP_MACRO   MACRO

    SWAPF   STATUS_TEMP,W

    MOVWF   STATUS

    SWAPF   W_TEMP,F

    SWAPF   W_TEMP,W

    ENDM

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客