打印

如何实现中颖单片机的循环查表

[复制链接]
1640|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
music_sky|  楼主 | 2008-2-25 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                各位高手,小弟刚学中颖单片机,近来遇到些问题,我有个数据表需要循环查表,但是又实现不了,CALL   DATA_TABLE之前ACC的数据总是0,
STA   TEMP,00H ;好象没有作用,执行该条指令时,TEMP的值也会变0;如果将该条指令改为LDI TEMP,01;它又可以查一个数据,请大家帮手,谢谢。

                 LDI    TBR,00H;设置TBR的值为0  
                 ;---------------------------------------------
LOOP:           STA   TEMP,00H ;
                 ;---------------------------------------------
                 CALL   DATA_TABLE;查数据表
                 STA    TEMP_L,00H;先将低4位的数据保存在临时寄存器
                 LDA    TBR,00H;读入高4位的数据
                 STA    TEMP_H,00H;存高4位的数据在临时寄存器
                 CJE    TEMP,TEMP1;$+3; 8次到没? 
                 ADIM  TEMP,01H;加1
                 JMP    $+2
         LDI     TEMP,01H;归1
                 JMP    LOOP
                  ORG    300H   ;设置PC地址
     DATA_TABLE:  
                  TJMP  
                  ;         H    L      
                  RTNW    0010B,0011B    ;301H
                  RTNW    0011B,0010B    ;302H    
                  RTNW    0011B,0011B    ;303H  
                  RTNW    0100B,0010B    ;304H  
                  RTNW    0101B,0011B    ;305H  
                  RTNW    0100B,0010B    ;306H  
                  RTNW    0011B,0010B    ;307H
                  RTNW    0100B,0010B    ;308H  
注: TEMP_H、TEMP_L、TEMP、TEMP1都为临时寄存器,TEMP初值为1;
TEMP1初值为8;
沙发
warm_ice| | 2008-2-26 10:13 | 只看该作者

有几个地方需要注意

                 LDI    TBR,00H;设置TBR的值为0  
                 ;---------------------------------------------
LOOP:           STA   TEMP,00H ;    这条应该改为LDA TEMP,OOH才符合你的要求,把TEMP的值赋给累加器A才对.用你现在的这条是把累加器的值给TEMP,因为上一条赋值TBR为零,同时累加器也为0,所以这条过后TEMP为0,A也为零.所以直接查表后,地址为300H,而300H为TJMP,它又跳转到300H,这样就成了一个死循环.故不正确.
              

使用特权

评论回复
板凳
music_sky|  楼主 | 2008-2-26 13:32 | 只看该作者

如何实现中颖单片机的循环查表

非常感谢你的指点,我的程序功能可以正常运行啦!

使用特权

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

本版积分规则

4

主题

7

帖子

0

粉丝