8课单片机寻址方式与指令系统

8课单片机寻址方式与指令系统

ID:41572019

大小:56.46 KB

页数:6页

时间:2019-08-28

8课单片机寻址方式与指令系统_第1页
8课单片机寻址方式与指令系统_第2页
8课单片机寻址方式与指令系统_第3页
8课单片机寻址方式与指令系统_第4页
8课单片机寻址方式与指令系统_第5页
资源描述:

《8课单片机寻址方式与指令系统》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、通过前面的学习,我们已经了解了单片机内部的结构,并J1也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051单片机的指令部份。一、概述1、指令的格式我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的笫一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOVPl,#0FFH,这样就好记了。这两种格

2、式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。2、汇编我们写指令使用汇编格式,而计算机和单片机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种办法:手工汇编和机器汇编。手工汇编实际上就是査表,因为这两种格式纯粹是格式不一样,所以是一一对应的,查一张表格就行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件來替代手工查表,这就是机器汇编。二、单片机的寻址让我们先来复习一下我们学过的一些指令:MOVPl,#0FFH,MOVR7,#0FFH这些指令都是将一些数

3、据送到对应的位置中去,为什么耍送数据呢?第一个因为送入的数能止灯全灭掉,第二个是为了要实现延时,从这里我们能看出来,在用单片机的编程语言编程时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有28条指令(单片机共111条指令)。卜•面我们就从数据传递类指令开始吧。分析一下MOVPl,#0FFH这条指令,我们不难得出结论,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一•个E,所以就是“传递”,这就是指令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“

4、源”也就是你要送什么数,必须要有一个“冃的”,也就是你这个数耍送到什么地方去,显然在上面那条单片机指令中,要送的数(源)就是OFFH,而要送达的地方(冃的地)就是P1这个寄存器。在数据传递类指令中,均将目的地写在指令的麻面,而将源写在最后。这条指令中,送给P1是这个数本身,换言Z,做完这条指令后,我们能明确地知道,P1中的值是OFFH,但是并不是任何时候都能直接给出数木身的。例如,在我们前面给出的单片机延时程序例是这样写的:MAIN:SETBP1.0;(1)LCALLDELAY;(2)CLRP1.0;(3)LCALLD

5、ELAY;(4)AJMPMAIN;(5);以F子程序DELAY:MOVR7,#250;(6)DI:MOVR6,#250;(7)D2:DJNZR6,D2;(8)DJNZR7,DI;(9)RET;(10)END;(11)MOV30H,#255LCALLDELAY;CLRP1.0;(3)MOV30H,#200LCALLDELAY;(4)AJMPMAIN;(5);以下子程序DELAY:MOVR7,30H;(6)DI:MOVR6,#250;(7)D2:DJNZR6,D2;(8)DJNZR7,DI;(9)RET:(10)END;(

6、11)表2这样一来,我侮次调用延时程序延时的时间都是相同的(大致都是0.13S),如果我提出这样的要求:灯亮后延时时间为0.13S灯灭,灯灭后延时0.1秒灯亮,如此循环,这样的程序还能满足要求吗?不能,怎么办?我们能把延时程序改成这样(见表2):调用则见表2中的主程,也就是先把一个数送入30H,在子程序中R7中的值并不固定,而是根据30H单元屮传过來的数确定。这样就能满足要求。从这里我们能得出结论,在数据传递屮要找到被传递的数,很多时候,这个数并不能直接给出,需要变化,这就引出了一个概念:如何寻找操作数,我们把寻找操作

7、数所在单元的地址称Z为寻址。在这里我们直接使用数所在单元的地址找到了操作数,所以称这种办法为直接寻址。除了这种办法Z外,还冇一种,如果我们把数放在工作寄存器中,从工作寄存器中寻找数据,则称之为寄存器寻址。例:MOVA,R()就是将R()工作寄存器屮的数据送到累加器A屮去。提一个问题:我们知道,工作寄存器就是内存单元的一部份,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOVA,00H,和MOVA,RO不就没什么区别了吗?为什么要加以区别呢?的确,这两条指令执行的结果是完全相同的,都是将00H

8、单元中的内容送到A中去,但是执行的过程不一样,执行第一条指令需要2个周期,而第二条则只需要1个周期,第一条指令变成最终的目标码要两个字节(E5H00H),而第二条则只耍一个字节(E8h)就能了。这么斤斤计较!不就差了一个周期吗,如果是12M的晶体震荡器的话,也就1个微秒时间了,一个字节乂能有多少?不对,如果这条指令只执行一次,也许

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。