打印

麻烦看看这个程序,请指点

[复制链接]
1695|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elic|  楼主 | 2008-5-20 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
           ORG   0000H
           JMP   MAIN
;-----
;子程序1
           PROGRAM1:
           .....
           RTNI
;------
      MAIN:
           ...
           LDI     ROMBANK,01H
           JMP     LABEL1
;-------
   LABEL3_L:
           LDI    ROMBANK,00H
           CALL   PROGRAM1
           LDI    ROMBANK,01H
           JMP    LABEL3_H    

;-----------------------------
           ORG    0800H
;------
;子程序2
           PROGRAM2:
           .....
           RTNI
;------
   LABEL2_L:
           LDI    ROMBANK,00H
           CALL   PROGRAM2
           LDI    ROMBANK,01H
           JMP    LABEL2_H


;------------------------------
           ORG    1000H
LOOP:
    LABEL1:
           .....
           JMP    LABEL2_L
  LABEL2_H:
           .....
           JMP    LABEL3_L
  LABEL3_H:
           .....
           LDI    WDT,00H
           JMP    LOOP




IC:69P55A
请问上面的程序对ROMBANK操作是否得当,能否达到翻页目的,谢谢!!
PS:由于受其他条件限制程序的主循环在BANK2中,暂时不考虑把主循环放在BANK0中,再分别调用各BANK子程序的方法
沙发
warm_ice| | 2008-5-21 09:03 | 只看该作者

这样

看起来是有一点问题.
1.做ROMBANK的跳转之前,建议关闭中断,跳转结束后再打开.因为跳转的过程虽然表面只有一条指令,但内容要进行复杂的操作,为确保可靠,建议跳转时关闭IE.
2.以下部份:
           ORG    1000H
LOOP:
    LABEL1:
           .....
           JMP    LABEL2_L    ;此处跳转前应该先把ROMBANK值赋值为0,因为800H在ROMBANK0,与1000H在ROMBANK1中,不在同一个ROMBANK中,不能直接跳转,否则会出错.

另外,此处增加ROMBANK赋值为0的指令后,以下部份中的:
   LABEL2_L:
           LDI    ROMBANK,00H             ;此条就可以去掉了
           CALL   PROGRAM2

暂时看到这2个问题,你再仿真一下,看是否还有问题.

使用特权

评论回复
板凳
elic|  楼主 | 2008-5-21 15:21 | 只看该作者

依然有问题

修改这2个问题之后程序依然有问题。

再说明一下:

在0800H的BANK1
有一个T0定时20毫秒中断
而在1000H的BANK2
有一个等待20毫秒定时,即程序20MS标志到则程序往下执行,未到则等待
此时的ROMBANK=1

经调试发现,全速运行后程序无法运行到等待20MS后的程序段,而跑到1000H处,而我觉得此时的ROMBANK为1,经定时中断后是能够正常返回到正确的中断点处的,可仿真的结果是:并没有返回到正确的中断点,而返回到1000H。
所以对这个问题无法理解


另外;假设将等待20MS定时的程序部分放在BANK0中而不是BANK2中,在ROMBANK仍=1的情况下,20MS的中断子程序将返回到何处,是BANK0还是BANK2

使用特权

评论回复
地板
warm_ice| | 2008-5-21 17:36 | 只看该作者

这样

ROMBANK是4K为一个区域,而上面的2K是共用的.所以中断程序最好放在前2K程序中,这样无论在哪个ROMBANK产生中断,因中断程序所在的2K空间为各ROMBANK共用,可正常返回.

另外,你的子程序1和子程序1是什么程序,在什么地方调用??请说明一下,我看一下是否有问题.

使用特权

评论回复
5
elic|  楼主 | 2008-5-22 10:56 | 只看该作者

问题已解决

程序1为LCD显示子程序,程序2为通信子程序

我将TO中断放置在BANK0后问题解决了

PS:在这过程中,我曾试过仍将T0中断子程序放在BANK1,把20MS定时等待的程序放在BANK0中,若在等待前加条LDI  ROMBANK,00H则没问题,若没这条则出错。
在权衡了2种不会出错的方法后,觉得将TO中断放置在BANK0更为合适,因为若20MS定时中断发生在BANK2中的其他程序段则仍然会出现问题

不知道我这样的想法是否正确。谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

72

帖子

0

粉丝