单片机授课课件寻址方式与指令系统.doc

单片机授课课件寻址方式与指令系统.doc

ID:55741102

大小:40.50 KB

页数:5页

时间:2020-06-03

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

《单片机授课课件寻址方式与指令系统.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、不一样而已。2、汇编我们写指令使用汇编格式,而计算机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种方法:手工汇编和机器汇编。手工汇编实际上就是查表,因为这两种格式纯粹是格式不同,所以是一一对应的,查一张表格就行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机器汇编。二、寻址让我们先来复习一下我们学过的一些指令:MOVP1,#0FFH,MOVR7,#0FFH这些指令都是将一些数据送到相应的位置中去,为什么要送数据呢?第一个因为送入的数可以让灯全灭掉,第二个是为了要实现延时,从这里我们可以看出来,在用单片机的编程语言编程

3、时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有28条指令(单片机共111条指令)。下面我们就从数据传递类指令开始吧。分析一下MOVP1,#0FFH这条指令,我们不难得出结论,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。在数据传递类指令中,均将目的地写在指令的

4、后面,而将源写在最后。这条指令中,送给P1是这个数本身,换言之,做完这条指令后,我们可以明确地知道,P1中的值是0FFH,但是并不是任何时候都可以直接给出数本身的。例如,在我们前面给出的延时程序例是这样写的:MAIN:SETBP1.0    ;(1)   LCALLDELAY;(2)    CLRP1.0    ;(3)   LCALLDELAY  ;(4)    AJMPMAIN   ;(5);以下子程序DELAY:MOVR7,#250  ;(6)D1:MOVR6,#250  ;(7)D2:DJNZR6,D2   ;(8)  DJNZR7,D1   ;(9)  RET       ;

5、(10)  END      ;(11)表1MAIN:SETBP1.0    ;(1)   MOV30H,#255   LCALLDELAY;   CLRP1.0    ;(3)   MOV30H,#200   LCALLDELAY  ;(4)   AJMPMAIN   ;(5);以下子程序DELAY:MOVR7,30H  ;(6)D1:MOVR6,#250  ;(7)D2:DJNZR6,D2   ;(8)  DJNZR7,D1   ;(9)  RET       ;(10)  END      ;(11)表2 这样一来,我每次调用延时程序延时的时间都是相同的(大致都是0.13S),如

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

7、工作寄存器中,从工作寄存器中寻找数据,则称之为寄存器寻址。例:MOVA,R0就是将R0工作寄存器中的数据送到累加器A中去。提一个问题:我们知道,工作寄存器就是内存单元的一部份,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOVA,00H,和MOVA,R0不就没什么区别了吗?为什么要加以区分呢?的确,这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,但是执行的过程不同,执行第一条指令需要2个周期,而

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

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

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