找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5130|回复: 11
打印 上一主题 下一主题
收起左侧

关于单片机movc指令的应用程序

[复制链接]
跳转到指定楼层
楼主
ID:450037 发表于 2019-1-13 15:41 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
不懂为什么要add a,r3,
       为什么要ADD   A,#6加这么对偏移量

Screenshot_20190113-153528.jpg (280.07 KB, 下载次数: 23)

Screenshot_20190113-153528.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2019-1-13 16:03 | 只看该作者
add a,r3      把r3里的值加到累加器a里去。
ADD   A,#6  把直接数6加到累加器a里去。
和偏移量没任何关系。
回复

使用道具 举报

板凳
ID:7485 发表于 2019-1-13 18:24 | 只看该作者
MOVC  A,  @A+PC 本条指令是查表指令,也叫作:“程序存储器读指令”,要读的值在“TAB3”表中。“PC”是当前(本条指令)代码在程序存储器中的位置,而TAB3表距离当前“PC”还有6个字节的距离,所以当前的“PC”值+6,才是TAB3的首字符位置。
回复

使用道具 举报

地板
ID:401564 发表于 2019-1-13 20:38 | 只看该作者
因为表是DW      用两个字节来放一个数据,如果是DB就是直接计算偏移量
DW的话,是乘以2来计算的
回复

使用道具 举报

5#
ID:467585 发表于 2019-1-13 21:31 | 只看该作者
MOVC  A,  @A+PC 本条指令是查表指令,也叫作:“程序存储器读指令”,要读的值在“TAB3”表中。“PC”是当前(本条指令)代码在程序存储器中的位置,而TAB3表距离当前“PC”还有6个字节的距离,所以当前的“PC”值+6,才是TAB3的首字符位置。
回复

使用道具 举报

6#
ID:450037 发表于 2019-1-14 00:00 来自手机 | 只看该作者
ahshmj 发表于 2019-1-13 18:24
MOVC  A,  @A+PC 本条指令是查表指令,也叫作:“程序存储器读指令”,要读的值在“TAB3”表中。“PC”是当 ...

为什么说TAB3的首地址距离PC有6个字节的距离啊?是怎么求出来的啊
回复

使用道具 举报

7#
ID:450037 发表于 2019-1-14 00:01 来自手机 | 只看该作者
Y_G_G 发表于 2019-1-13 20:38
因为表是DW      用两个字节来放一个数据,如果是DB就是直接计算偏移量
DW的话,是乘以2来计算的

请问ADDC  A,#06H它是怎么得出的啊?为什么是加6?
回复

使用道具 举报

8#
ID:7485 发表于 2019-1-14 10:49 | 只看该作者
你看看从“MOVC  A,  @A+PC”这语句到“TAB3”之间有几条指令(不含本语句)?这几条指令的机器码就是6个字节。

在没有给“TAB3”指定位置的情况下,程序的机器码是按先后顺序存放烧写的。

“PC”的值就是当前语句的机器码烧写在程序存储器中的地址。再加上6个字节,就到“TAB3”的首地址了。

你可以打开你的本工程目录下,经过编译产生的*.lst文件看看便知。

根据你的提问,你现在理解这些还有一定的难度,如果你真心的想学、想掌握这门技术,建议你还是扎扎实实的打好基础。
回复

使用道具 举报

9#
ID:401564 发表于 2019-1-14 19:01 | 只看该作者
zhangzhao2423 发表于 2019-1-14 00:01
请问ADDC  A,#06H它是怎么得出的啊?为什么是加6?

从“MOVC  A,  @A+PC”这个指令到“TAB3”之间有几条指令,每条指令占用不同的空间,你得打开8051汇编指令看这几条指令占用的空间,加在一起就是占用了6B,就是6个字节
这是一个非常应试教育的题目:一个酒杯的容积怎么计算,2B一样的老师要告诉你,酒杯的高度,直径,弧度之类,估计你还得用到微积分,说不定还算不出来。
实际上,把酒杯装满水,再称水的重量就知道容量了。
明明有更好的方法,非得叫人用PC值,以为这样就可以练习基本功什么之类的。
用PC值的缺点:你得对着8051汇编指令,慢慢找到你那条指令占用空间的大小,一条一条的加上去。这样还不行,你还要看PC加上去不是大于255了,大于255了就不行,也就是说这个查表指令是不能随便放的,你得把这指令放在前面。不然,PC值就会超过255了
用16位查表就什么都没有了
一般来说尽量少用PC值这个计算
一般来说尽量少用汇编,能用C就尽量用C
回复

使用道具 举报

10#
ID:450037 发表于 2019-1-14 22:29 来自手机 | 只看该作者
Y_G_G 发表于 2019-1-14 19:01
从“MOVC  A,  @A+PC”这个指令到“TAB3”之间有几条指令,每条指令占用不同的空间,你得打开8051汇编指 ...

师傅,能不能加我微信啊?zhangzhao2423,万分感谢,有不懂请多多指教,我们是新人,求带路
回复

使用道具 举报

11#
ID:401564 发表于 2019-1-15 00:11 | 只看该作者
zhangzhao2423 发表于 2019-1-14 22:29
师傅,能不能加我微信啊?zhangzhao2423,万分感谢,有不懂请多多指教,我们是新人,求带路

汇编学个差不多就可以了,以后还是要用C多一点的
我也是一直用汇编,准备学C了
难不成你要用汇编??
回复

使用道具 举报

12#
ID:450037 发表于 2019-1-15 07:03 来自手机 | 只看该作者
Y_G_G 发表于 2019-1-15 00:11
汇编学个差不多就可以了,以后还是要用C多一点的
我也是一直用汇编,准备学C了
难不成你要用汇编??

二级C以前学校学的,还有一点点印象了。汇编我也学。我都学。先从汇编开始。现在想把单片机搞熟了,我刚接触单片机不久。还请指教
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表