ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:36.87KB ,
资源ID:3860887      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3860887.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机指令系统习题.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

单片机指令系统习题.docx

1、单片机指令系统习题第四章汇编语言程序设计第一节汇编语言源程序的格式和伪指令(一)学习要求1、掌握汇编语言源程序格式和伪指令。2、掌握各种伪指令功能。(二)内容提要一:汇编语言源程序的格式1、语句格式汇编语言源程序是由汇编语句(即指令)组成的。汇编语言一般由四部分组成。其典型的汇编语句格式如下: 标号: 操作码 操作数 ;注释 START: MOV A,30H ;A(30H)(1) 标号段 标号是用户定义的符号地址。(2) 操作码段 操作码段是每一语句中不可缺少的部分,也是语句的核心部分,用于指示计算机进行何种操作,汇编程序就是根据这一字段生成目标代码的。(3) 操作数段 指出了参与操作的数据或

2、存放该数据的地址。通常有目的操作数和源操作数之分。(4) 注释段 为了增强程序的可读性,可在某行指令的后面用分号起头,加上注释,用以说明该条指令或该段程序的功能、作用,以供编程人员参考。此注释内容程序汇编时CPU不予处理,不产生目标代码。二:伪指令 1、定位伪指令ORG(Origin)格式: 标号: ORG m m:16位二进制数,代表地址。功能:指出汇编语言程序通过编译,得到的机器语言程序的起始地址。2、定义字节伪指令DB(Define Byte)格式:标号: DB X1,X2,Xn Xn:单字节二进制、十进制、十六进制数,或以 括起来的字符串,数据符号。功能:定义程序存储器从标号开始的连续

3、单元,用来存放常数、字符和表格。 3、定义字伪指令DW(Define Word)格式:标号: DW Y1,Y2,Yn Yn:双字节二进制、十进制、十六进制数,或以 括起来的字符串,数据符号。 功能:同DB,不同的是为16位数据。4、汇编结束命令END 格式:标号: END 功能:END是汇编语言源程序的汇编结束标志,在它后面所写的指令均不予处理。 5、等值命令EQU 格式:字符名称 EQU 数或汇编符号 功能:将一个数或特定的汇编符号赋予规定的字符名称。先定义后使用。 6、数据地址赋值命令DATA 格式:字符名称 DATA 表达式 功能:将数据地址或代码地址赋予规定的字符名称 (三)习题与思考

4、题1、汇编语言源程序的格式及含义是什么?2、什么叫伪指令?伪指令与指令有什么区别?第二节汇编语言源程序汇编(一)学习要求(1) 掌握汇编程序的过程。(2) 了解机器汇编与人工汇编的区别。(二)内容提要用汇编语言编写的源程序称为汇编语言源程序。汇编通常由专门的汇编程序来进行,通过编译后自动得到对应于汇编源程序的机器语言目标程序,这个过程叫机器汇编。另外还可用人工汇编。一、汇编程序的汇编过程汇编过程是将汇编语言源程序翻译成目标程序的过程。汇编程序是两次扫描。第一次扫描是进行语法检查并建立该源程序使用的全部符号名字表。在这个表中,每个符号名字后面跟着一个对应的值。第一次扫描中如有错误则显示出错信息,

5、扫描完,显示出错数目,然后返回编辑状态。这时可对源程序进行修改。如没有错误可进行第二次扫描,最后生成目标程序的机器码并得到对应于符号地址(即标号地址)的实际地址值。第二次扫描还产生相应的列表文件,此文件中有与每条源程序相对应的机器码、地址和编辑行号以及标号地址的实际地址等,可作为程序调试时使用。二、人工汇编由程序员根据MCS-51的指令集将汇编语言源程序的指令逐条人工翻译成机器码的过程叫人工汇编。人工汇编同样采用两次汇编方法。第一次汇编,首先查出各条指令的机器码,并根据初始地址和各条指令所占的字节数,确定每条指令所在的地址单元。第二次汇编,求出标号地址所代表的实际地址及相对应地址偏移量的具体补

6、码值。例:对下列程序进行人工汇编 ORG 1000H START:MOV R7,#200 DLY1:NOP NOP NOP DJNZ R7,DLY1 RET第一次汇编查指令集,确定每条指令的机器码和字节数。通过ORG伪指令可依次确定各指令的首址。结果如下: 地址 指令码 ORG 1000H 1000H 7F C8 START:MOV R7,#200 1002H 00 DLY1:NOP 1003H 00 NOP 1004H 00 NOP 1005H DF 地址偏移量rel DJNZ R7,DLY1 1007H 22 RET第二次汇编计算出转移指令中的地址偏移量rel。当DJNZ R7,DLY1指

7、令中的条件成立时,程序将发生转移,从执行这条指令后的当前地址转移到DLY1标号地址上。因此,地址偏移量rel =1002H1007H = -05H,补码表示的偏移量为0FBH。将计算结果填入第一次汇编时待定的偏移量值处。人工汇编很麻烦而且容易出错,一般不采用。(三)习题与思考题1、机器汇编程序两次扫描的过程及作用是什么?2、人工汇编与机器汇编的的区别是什么?第三节汇编语言的程序举例 (一)学习要求(1) 掌握顺序、循环、子程序、分支程序。(2) 掌握延时程序的设计方法。(二)内容提要1、程序设计的基本步骤 一般步骤为: (1)分析题意,明确要求; (2)建立思路,确定算法; (3)编制框图,绘

8、出流程; (4)编写程序,上机调试; 显然,算法和流程是至关重要的。程序结构有简单顺序、分支、循环和子程序等几种基本形式。2、画流程图画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:椭圆框:起止框,在程序的开始和结束时使用。 矩形框:处理框,表示要进行的各种操作。 菱形框:判断框,表示条件判断,以决定程序的流向。 指向线:流程线,表示程序执行的流向。 圆 圈:连接符,表示不同页之间的流程连接。 各种几何图形符号如下图所示。一、简单程序的设计 例4-1 已知两个压缩BCD码分别放在内部RAM的31H30H和33H 32H等4个单元中,试编程求和,结果存入

9、R4R3R2中。 分析:流程如图: 程序如下: ORG 0000H LJMP MAIN ORG 0040HMAIN: MOV A, 30H ADD A, 32H DA A MOV R2,A MOV A,31H ADDC A,33H DA A MOV R3,A CLR A MOV ACC.0,C MOV R4, A HERE: SJMP HERE END例4-2 利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。 分析:控制流程图(略),程序如下: START:MOV DPTR,#TABLE MOV A, 20H ANL A,

10、 #0FH MOVC A, A+DPTR MOV 21H, A MOV A, 20H ANL A, #0F0H SWAP A MOVC A, A+DPTR MOV 22H, A SJMP TABLE: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H二、分支程序设计1、单分支程序 单分支结构程序使用转移指令实现,即根据条件对程序的执行进行判断,满足条件是转移执行,否则顺序执行。 在MCS-51指令系统中条件转移指令有: (1)判A转移指令JZ、JNZ; (2)判位转移指令JB、JNB、JBC、JC、JNC; (3)比较转移指令CJNE; (4)减1不为

11、0转移指令DJNZ;例4-3 假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1、ST2单元中分别存放着两个8位无符号数,要求找出其中的大数并存入ST3单元。 分析:两个无符号数的大小比较可利用两数相减是否有借位来判断,流程图和程序如下所示:START:CLR C MOV DPTR,#ST1 MOVX A, DPTR MOV R7, A INC DPTR MOVX A, DPTR SUBB A, R7 JC BIG1 MOVX A, DPTR SJMP BIG2 BIG1: XCH A, R7BIG2: INC DPTR MOVX DPTR,A SJMP 2、多分支程序 (1

12、)嵌套分支结构例4-4 设变量X存放于30H单元,函数值Y存放31H单元。试按照式: 1 X0 Y= 0 X=0 的要求给Y赋值 -1 X0 分析:X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。流程、程序如右: START: MOV A,30H JZ OVER JNB ACC.7,LAB1 MOV A, #0FFH SJMP OVER LAB1: MOV A, #1 OVER: MOV 31H, A SJMP (2)多重分支结构 利用MCS-51单片机的散转指令JMP A+DPTR,可方便地实现多重分支控制,因此,又称为散转程序。假

13、定多路分支的最大序号为n,则分支的结构如图所示。 例4-5 根据条件0、1、2 、n,分别转向处理程序PRG0、PRG1、PRGn,条件K设在R2中。START: MOV DPRT, #TABLE MOV A, R2 ADD A, R2 JNC NEXT INC DPH NEXT: JMP A+DPTR TABLE: AJMP PRG0 AJMP PRGn PRG0: PRGn: 三、循环程序设计1、循环程序的结构循环程序包括以下四个部分:置循环初值循环体循环控制变量修改循环终止控制常用于循环控制的指令有:DJNZ、CJNE、JC、JNC等控制类指令。2、单循环 终止循环控制采用计数的方法,即

14、用一个寄存器作为循环次数计数器,每次循环后计数加1或减1,达到终止值后退出循环。例4-6 计算50个8位二进制数(单字节)之和。 要求:50个数存放在30H开头的内部RAM中,和放在R6R7中。 分析:采用DJNZ循环体的流程框图如下页所示,在参考程序中,R0为数据地址指针,R2为减法循环计数器。 在使用DJNZ控制时,循环计数器初值不能为0,当为0时,第一次进入循环执行到DJNZ时,减1使R2变为FFH,循环次数成了256,显然不合题意。START:MOV R6, #0 MOV R7, #0 MOV R2, #50 MOV R0, #30H LOOP:MOV A, R7 ADD A, R0

15、MOV R7, A CLR A ADDC A, R6 MOV R6, A INC R0 DJNZ R2, LOOP SJMP $ 3、多重循环 如果在一个循环程序中嵌套了其他的循环程序,称为多重循环程序。在用软件实现延时时显得特别有用。例4-7 设计1秒延时子程序,假设fosc=12MHz。 分析:软件延时与指令的执行时间关系密切,在使用12MHz晶振时,一个机器周期的时间为1,us,执行一条DJNZ指令的时间为2us,我们可以采用三重循环的方法写出延时1秒的子程序 流程、程序如右图所示:DELAY: MOV R7, #10; DL3: MOV R6, #200 ; DL2: MOV R5,

16、#250 ; DL1: DJNZ R5, DL1 ; DJNZ R6, DL2 ; DJNZ R7, DL3 ; RET 4、按条件转移控制的循环 例4-8 把内部RAM中从ST1地址开始存放的数据传送到以ST2开始的存储区中,数据块长度未知,但已知数据块的最后一个字节内容为00H,而其它字节均不为0。并设源地址与目的地址空间不重复。 分析:显然,我们可以利用判断每次传送的内容是否为 0 这一条件来控制循环。也可用CJNE来比较与0是否相等设计。利用判A转移控制的循环流程图如右图所示。START:MOV R0, #ST1 MOV R1, #ST2LOOP:MOV A, R0 JZ ENT MO

17、V R1,A INC R0 INC R1 SJMP LOOP ENT:RET四、查表程序设计用于查表的指令有两条:MOVC A,APC;MOVC A,ADPTR; 当使用DPTR作为基址寄存器时查表比较简单,查表的步骤分三步 1)基址(表格首地址)送DPTR数据指针; 2)变址值(在表中的位置是第几项)送累加器A; 3)执行查表指令MOVC A,ADPTR,进行读数,查表结果送回累加器A。 当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。查表的步骤也分三步: 1)变址值(在表中的位置是第几项)送累加器A; 2)偏移量(查表指令的下一条指令的

18、首地址到表格首地址之间的字节数)+ A A;(修正) 3)执行查表指令MOVC A,APC。 例4-9 二位十六进制数与ASCII码的转换程序。设数值在R2中,结果低位存在R2中,高位存在R3中。 分析:对于2位16进制数必须进行2次查表,因此,取数后通过屏蔽的方法来实现高低位分开。(1)利用DPTR作基址的参考程序如下 HEXASC: MOV DPTR, #TABLE MOV A, R2 ANL A, #0FH MOVC A, A+DPTR ;查表 XCH R2, A ANL A, #0F0H SWAP A ; MOVC A, A+DPTR ;查表 MOV R3, A RETTABLE: D

19、B 30H,31H,32H,33H,34H ;ASCII表 DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H(2)利用PC作基址的参考程序如下:HEXASC: MOV A, R2 ANL A, #0FH ADD A, #9 MOVC A, A+PC ;查表 XCH R2, A ANL A, #0F0H SWAP A ADD A, #2 MOVC A, A+PC ;查表 MOV R3, A RET TABLE: DB “0”,“1”,“F” ;ASCII表例4-10 利用查表指令,根据R2的分支序号找到对应的转向入口地址送DPTR,清ACC后,执

20、行散转指令JMP A+DPTR,转向对应的分支处理,假定分支处理程序在ROM 64KB的范围内分布。 程序如下: ORG 1000H START:MOV DPTR, #TAB MOV A, R2 ADD A, R2 JNC ST1 INC DPHST1: MOV R3, A MOVC A, A+DPTR ;查表 XCH A, R3 INC A MOVC A, A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP A+DPTR TAB: DW PRG0 DW PRG1 五、应用控制流程设计例4-11 电机的简单起停控制;其框图如下页图 a 所示 1)分析:简单的电机起动停止

21、控制,其控制的示意图及I/O分配如图 b 所示。 输入信号:启动按钮SB1、停止按钮SB2 输出信号:继电器KA 假定:按下按钮,相应的接口信号为低电平(P1.1=0)时;若:程序使 P1.3=1,即KA = 1;则:电机启动。2)按照上述的控制思路,我们可以方便的画出流程图,如下图所示。ORG 1000HSTR:MOV P1, #00000110B WT1:JB P1.1, WT1 ;启动? SETB P1.3 ;电机启 WT2:JB P1.2, WT2 ;停止? CLR P1.3 ;电机停 SJMP WT1 END(三)习题与思考题1、循环程序由哪几部分构成。2、什么是子程序?对子程序设计

22、有什么要求?3、 将(R2R3)和(R6R7)两个双字节无符号数相加,结果送R4R5。NADD:MOV A,R3 ADD A,R7 MOV R5,A MOV A,R2 ADDC A,R6 MOV R4,A RET4、 将(R2R3)和(R6R7)两个双字节无符号数相减,结果送R4R5。NSUB:MOV A,R3 CLR C SUBB A,R7 MOV R5,A MOV A,R2 SUBB A,R6 MOV R4,A RET5、 将A中所存放的8位二进制数转换为BCD码,存于片内RAM的20H、21H单元。MOV B,#100DIV ABMOV R0,#21HMOV R0,ADEC R0MOV

23、A,#10XCH A,BDIV ABSWAP AADD A,BMOV R0,ARET6、 将A中所存的一位十六进制数转换为ASCII码。TRANS:MOV R2,A ADD A,#F6H MOV A,R2 JNC AD30 ADD A,#07HAD30: ADD A,#30H RET7、 编写一程序段,其功能为:内部RAM的30H(高)32H(低)和33H(高)35H(低)两个三字节无符号数相加,结果存入30H(高)32H(低)单元,设三字节相加时无进位。MOV R0,#32HMOV R1,#35HMOV R2,#03HCLR CLOOP:MOV A,R0 ADDC A,R1 MOV R0,A

24、 DEC R0 DEC R1 DJNZ R2,LOOP END8、 编写一程序段,其功能为:内部RAM的32H(高)30H(低)和35H(高)33H(低)两个三字节无符号数相加,结果存入32H(高)30H(低)单元,设三字节相加时无进位。MOV R0,#30HMOV R1,#33HMOV R2,#03HCLR CLOOP:MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP END9、 编写一程序段,其功能为:内部RAM的30H(高)32H(低)和33H(高)35H(低)两个三字节无符号数相减,结果存入30H(高)32H(低)单元,设三字

25、节相减时无进位。MOV R0,#32HMOV R1,#35HMOV R2,#03HCLR CLOOP:MOV A,R0 SUBB A,R1 MOV R0,A DEC R0 DEC R1 DJNZ R2,LOOP END10、 编写一程序段,其功能为:内部RAM的43H(高)40H(低)和33H(高)30H(低)两个四字节无符号数相减,结果存入43H(高)40H(低)单元,设四字节相减时无进位。(10分)MOV R0,#40HMOV R1,#30HMOV R2,#04HCLR CLOOP:MOV A,R0 SUBB A,R1 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP

26、 END11、 编写一程序段,将内部RAM30H3FH的内容传送到外部RAM的8000H800FH中。MOV R0,#30HMOV DPTR,#8000HMOV R2,#10HLOOP:MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R2,LOOP12、 编写程序,求出内部 单元中的数据含“”的个数,并将结果存入单元。解:MOV R1,08HMOV R0,20HCLR CCLR 21HLOOP:MOV A,R0 RLC A JNC LOOP13、设片内RAM 20H4FH单元中有若干个无符号数,试编程求出其中的最大值及最大值所在单元地址,将最大值存入片内RAM 50H单元,最大值所在单元地址存入片内RAM51H单元。10、设片外RAM从1000H单元开始存放100个无符号8位二进制数。试编程将它们从大到小依次存入片内RAM从10H开始的单元中。11、设有两个四字节BCD数:X=24350809,Y=12450379。X从片内RAM 25H单元开始存放,Y从片内RAM 35H开始存放,求两数的和并存放X所在的单元中。设数据在内存中按照低字节在前,高字节在后的顺序存放。12、试编一采用查表法求120的平方数子程序。要求:X在累加器A中,1X20,平方数高位存放在R6中,低位存放在R7中。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2