您的位置 首页 知识

单片机page和bank切换问题

(1)切换bank问题458一共有两个bank,每个都是由20-3f。如果需要切换bank来用的话,则需要改变操作寄存器R4的第6和第7位来实现。我…

(1) 切换bank 问题

458总共有两个bank,每个都是由20-3f 。

假如需求切换bank来用的话,则需求改动操作寄存器 R4的第6和第7位来完成。我界说一个宏来处理:

;———————–macro defination———————

bank0 macro

bc 0x04,6

bc 0x04,7

endm

;————————

bank1 macro

bs 0x04,6

bc 0x04,7

endm

这儿就界说了两个宏,分别是 bank0,bank1,用的时分直接用就能够。而这儿想说说程序开端初始化的时分清bank的程序,相关于156是需求改程序的,反而这个跟 468十分类似,却是能够直接跟 468通用了(468相应修改成4个bank就能够了。),简略用了一下二重循环搞定。

程序清单:

;———————-clear rams of all banks———————-

clear_all_ram:

mov a,@0x10

mov r4,a

bank0

call clr_ram

bank1

call clr_ram

ret

clr_ram:

clr r0

inc r4

mov a,@0x3f

and a,r4

jbs psw,z

jmp clr_ram

mov a,@0x10

mov r4,a

ret

这儿的

and a,r4

jbs psw,z

不能换成 xor ,因为xor会受R4最高两位挑选bank位的影响。

(2) 切换 page 问题

实践用的话是在是太简略了,所以这儿侧重剖析原理。

首要R2是PC和仓库,都是12位宽。 不要和程序代码的13位宽度搞反了。参看datasheet的第7页的内容:

这个便是PC的结构,一个page总共便是1K字节(1024字节),也便是210 ,明显需求用到 A0-A9 总共10个位来寻址。A11和A10是用来切换Page的。Call和jmp 指令(也只要这两个指令是需求切换page的了。),有个共同点,操作的时分的过程:都是将R2低10位的值载入,这样能够拜访 210 个地址,也便是1个page的程序页,不切page的话他们都能够拜访整个程序页。Jmp是直接跳转,不必考虑回来问题,所以这个归于比较简略的,只需求

page1

jmp process

这样就能够跳到其他页面了,之后PC指针也在后来的页面作业。这个比较简略,pass掉吧。

Call是需求考虑程序调用后的回来的问题。

首要跟jmp相同,先将PC+1压入仓库,然后装载低10位的地址,然后依据10和11位来决议在哪个页面作业

page0

……..

page1

call subprogram

这样就调用了page1的子程序了。当子程序完毕,履行ret回来的时分,因为仓库和PC都是12位的,所以PC出栈的时分能直接康复,这个时分的PC指针是正常的,也便是之前压入仓库的PC+1值了。可是有个问题,尽管PC值正常,可是实践上 R3里面的5,6位的PS0和PS1位是并没有改动的,这样有个危险,假如不履行 jmp 的话那是正常的没有问题,可是一旦履行了jmp,PC的10和11位会主动装载 R3 的PS0,PS1位,变成了前次履行call的时分切换的那个页面了。程序跑飞。假如这个时分想履行同一个page的子程序,没有切换page的指令,那么call指令同样会犯错。所以关于call指令应该是:

page0

………..

page1

call subprogram

page0

调用完子程序之后记住切换回本来的Page

关于中止

中止产生的时分是将这个PC压入仓库,尽管PC指针现已跳到0x08的中止入口处,可是R3的PS0和PS1位并没有被改动,所以,假如在中止服务程序中,不履行call和jmp指令就没有关系,一旦履行就会犯错。所以需求进行一次切换Page的动作的,切换回page0就能够了,这样能够确保jmp的时分是在中止服务程序的规模之内跳。退出中止之前是康复了R3的值的,所以是不需求在结束切换page了。

尽管说能切换,可是基本上个人不是很主张屡次来回的切换,尽量将比较全体的部分写在同一个page,这样能够削减犯错的时机。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/268312.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部