网站大量收购闲置独家精品文档,联系QQ:2885784924

由EMP458想到的切换page和bank问题.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
由EMP458想到的切换page和bank问题

由EMP458想到的切换page和bank问题 切换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位的影响。 切换 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位,变成了上

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档