4859|11

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机查表的问题??? [复制链接]

题目:设有一个巡回检测报警设置,需对16路输入进行测量控制,每路有一个最大允许值,它为双字节字数.控制时根据测量的路数,找出该路的最大允许值,判断输入值是否大雨最大允许值,如大于则报警.取路数为x(0<=x<=15),y为最大允许值放在程序存贮器的常数表,在查表之前路数x存放R2,查表的结果y放在R3R4中,则查表程序如下
LTB1:MOV A,R2
          ADD A,R2          ;R2*2->A
          MOV R3,A          ;保存指针
          ADD A,#(TAB1-LTB2)   ;加上偏移量
          MOVC A,@A+PC          ;查第一字节
LTB2: XCH A,R3                      ;单字节指令
         ADD A,#(TAB1-LTB3)   ;双字节指令
         MOVC A,@A+PC          ;查第二个字节,单字节指令
LTB3:MOV R4,A                     ;单字节指令
         RET                                    
TAB1:DW 1520,3271,42645,7850
          DW 3483,32657,883,9943
请问上面查询第二个字节指令是怎么查找的,不应该再加上A的内容再加上1才是第二个字节的地址吗????

最新回复

有人详细讲解下吗???求救了呀.....  详情 回复 发表于 2010-6-9 18:10
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你这应该是单片机里  的偏移值(或者叫修正值)的错误。用pc时有用到。   这个书本上写的很清楚  那个需要计算。DPTR 则只需加1就可以。
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 qingfeng200634 的回复:

你这应该是单片机里  的偏移值(或者叫修正值)的错误。用pc时有用到。   这个书本上写的很清楚  那个需要计算。DPTR 则只需加1就可以。

  ADD A,#(TAB1-LTB3) ;双字节指令
  MOVC A,@A+PC ;

  ADD A,#(TAB1-LTB2) ;加上偏移量
  MOVC A,@A+PC ;查第一字节
不是查询地址的位置是一样的吗??不也是双字节数的首地址吗???
可以讲清楚点,可以吗??我知道dptr只需要加一就可以了呀,但是
ADD A,#(TAB1-LTB3) ;双字节指令
  MOVC A,@A+PC ;这两条指令不也需要加上1才能得到双字节第二个字节的地址呀....
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
求高手指导一下了呀
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(高级)

5
 
汇编我不经常用,不敢发表任何意见,呵呵,帮顶。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
CCCCCCCCCCCCC
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
不是很懂
看了感觉应该加1啊
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

8
 
ADD A,#(TAB1-LTB2) ;加上偏移量
  MOVC A,@A+PC ;查第一字节
LTB2: XCH A,R3 ;单字节指令
  ADD A,#(TAB1-LTB3) ;双字节指令
  MOVC A,@A+PC ;查第二个字节,单字节指令

PC已经变了。。。

执行到第二个MOVC A,@A+PC ;查第二个字节,单字节指令的时候

PC已经比之前的PC加二了

所以程序是正确的。。。

不过这么写有点装,没啥事用DPRT来读写ROM好一些,如果指令系统支持的话

这样可读性要高
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 lbing7 的回复:

PC的增加值跟偏移量的减小值不一样么
还用是DPTR吧
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 lbing7 的回复:

ADD A,#(TAB1-LTB2) ;加上偏移量
  MOVC A,@A+PC ;查第一字节
LTB2: XCH A,R3 ;单字节指令
  ADD A,#(TAB1-LTB3) ;双字节指令
  MOVC A,@A+PC ;查第二个字节,单字节指令

PC已经变了。。。

执行到第二个MOVC A,@A+PC ;查第二个字节,单字节指令的时候

PC已经比之前的PC加二了……

#(TAB1-LTB3)和
#(TAB1-LTB2)是什么地址呀???
ADD A,#(TAB1-LTB3) ;双字节指令
  MOVC A,@A+PC ;不就是相当于((A)+(PC))->A,pc内容不就是#LTB3?而A的内容就是#(TAB1-LBT3)

ADD A,#(TAB1-LTB2) ;加上偏移量
  MOVC A,@A+PC ;不就是相当于((A)+(PC))->A,pc内容不就是#LTB2?而A的内容就是#(TAB1-LBT2)

算下来结果不是应该是一样的吗????不应该需要A加上1吗???
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 sytu_chyq 的回复:

引用 7 楼 lbing7 的回复:

PC的增加值跟偏移量的减小值不一样么
还用是DPTR吧

我也觉得有些问题...
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
有人详细讲解下吗???求救了呀.....
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表