登录
首页 嵌入式系统 嵌入式系统
回帖 发帖
正文

主题:pic汇编宏技巧-bank切换(摘录)

点击:1168 回复:0


pic汇编宏技巧-bank切换

mplab中有条非常有用的伪指令:banksel可用它来快捷设置 bank 而不用 status 的 rp0 ,rp1去具体的设置bank 。
banksel ****,通常只改变status,rp1,rp0,而rp1,rp0仅仅对 直接寻址[/b] [/b]有效

但banksel不会改变status,irp,也就是说,banksel的页选择对 间接寻址[/b] [/b]是没有用的.

以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
[URL=http://mayer.spaces.eepw.com.cn/articles/trackback/item/62107][/URL]
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=97832&Name=zjcsharp
09-08-19 02:05

工控新闻

更多新闻资讯