0522单片机实训教程电子教案第3章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章汇编语言程序设计3.1实训概要程序是一系列有序指令的集合。单片机通过执行程序完成相应的任务。程序设计的任务就是根据任务的要求,给出解决问题的步骤和算法,编制程序的过程。学习完指令系统后,就具备了程序设计的基础。汇编语言程序设计不但技巧性强,而且还有软硬件结合的特点。设计出的程序质量好坏,直接关系到单片机应用系统的特性和运行效率。为了能够编制出高质量的程序,必须从一个个程序模块的学习开始,通过熟读多练,反复上机训练,才能逐步掌握程序设计的方法和技巧。第3章汇编语言程序设计第3章汇编语言程序设计实训内容:顺序程序设计。分支程序设计。循环程序设计。子程序设计。第3章汇编语言程序设计预备知识:汇编语言程序设计的一般步骤:•分析问题。根据给出的问题,熟悉和明确问题的要求,明确已知条件及对运算和控制的要求,建立数学模型。•确定解题算法。根据实际问题的要求和指令系统的特点,选择解决问题的方法。算法是程序设计的依据,它决定了程序的正确性和程序的质量。•画出程序流程图。程序流程图就是用各种规定的图形、流程线和简洁的文字表达解题步骤的一种图形。它直观、清晰地体现了程序设计思路,是程序的逻辑设计过程。第3章汇编语言程序设计•资源分配。算法确定后,要为每一个变量、各种指针、计数器等分配工作单元,定义数据类型和数据结构。根据程序流程图及资源分配情况,写出汇编语言源程序。上机调试。汇编语言源程序的一般结构:在程序设计中将会遇到各种类型的程序,但不论程序如何复杂,都可以分为如下基本结构:顺序结构分支结构循环结构子程序结构第3章汇编语言程序设计其中顺序结构、分支结构和循环结构为三中基本结构。其结构流程如图3-1所示。入口MNP出口入口MN满足条件?出口入口满足条件?M改变条件?出口第3章汇编语言程序设计3.2实训9顺序程序设计训练3.2.1实训目的通过本节实训,主要学习下面内容:顺序程序的结构。顺序程序设计的编程方法。顺序结构程序的调试方法。第3章汇编语言程序设计3.2.2实训要求1.双字求和。设有两个四字节二进制数,分别存放在片内RAM30H和40H开始的单元中,先存低字节。求两数之和,并将和存于50H开始的单元中。2.双字节二进制无符号数乘法。3.2.3实训预习预习内容(1)掌握顺序程序的结构。(2)复习片内数据存储器地址范围。(3)复习数据传送指令和二进制加法指令的功能。(4)复习乘法指令的功能。第3章汇编语言程序设计程序设计基本思路(1)双字求和编写程序前要掌握片内RAM的结构。MCS-51单片机片内RAM一个存储单元为一个字节,以字节为单位编址。因此,每个加数和结果各占四个字节。按照加法的相加思路,先做低字节相加,然后做高位字节相加。例如:第3章汇编语言程序设计进行多字节加法运算时,低字节应选择不带进位加法指令ADD。其它字节相加时应选择带进位加法指令ADDC,将低位的进位值加入。(2)双字节二进制无符号数乘法双字节二进制无符号数乘法的运算过程类似于一般十进制运算。首先进行资源分配:设被乘数存放在工作寄存器R2、R3中,乘数存放在R6、R7中。乘积存放在R2、R3、R4和R5中。然后进行运算,先算低字节,并保存中间和,再计算高字节,将中间和累加。第3章汇编语言程序设计3.2.4实训器材MCS-51单片机开发系统3.2.5实训程序1.多字节加法实训程序如表3-1所示。第3章汇编语言程序设计存储地址机器码行号源程序寻址方式20001ORG2000H2000E5302MOVA,30H200225403ADDA,40H2004F5504MOV50H,A2006E5315MOVA,31H200835416ADDCA,41H200AF5517MOV51H,A200CE5328MOVA,32H第3章汇编语言程序设计200E35429ADDCA,42H2010F55210MOV52H,A2012E53311MOVA,33H2014354312ADDCA,43H2016F55313MOV53H,A2018920014MOV00H,C201A53200115ANL20H,#01H201D85205416MOV54H,20H17END2.双字节乘法实训程序如表3-2所示。第3章汇编语言程序设计存储地址机器码行号源程序寻址方式20001ORG2000H2000EB2MOVA,R320018FF03MOVB,R72003A44MULAB2004ACF05MOVR4,B2006FD6MOVR5,A2007EB7MOVA,R3第3章汇编语言程序设计20088EF08MOVB,R6200AA49MULAB200B2C10ADDA,R4200CFC11MOVR4,A200DE412CLRA200E35F013ADDCA,B2010FB14MOVR3,A2011EA15MOVA,R220128FF016MOVB,R7第3章汇编语言程序设计2014A417MULAB20152C18ADDA,R42016FC19MOVR4,A2017EB20MOVA,R3201835F021ADDCA,B201AFB22MOVR3,A201BE423CLRA201C3324RLCA201DCA25XCHA,R2第3章汇编语言程序设计201E8EF026MOVB,R62020A427MULAB20212B28ADDA,R32022FB29MOVR3,A2023EA30MOVA,R2202435F031ADDCA,B2026FA32MOVR2,A33END第3章汇编语言程序设计3.2.6实训步骤(1)阅读并理解程序,并画出两个程序的流程图。(2)将机器码送入单片机系统中,并检查是否正确。(3)对于多字节加法实训程序,运行程序前,将两个四字节数据分别送入30H和40H开始的单元中。第3章汇编语言程序设计(4)单步执行程序,并将运行结果记录在表3-3中。12345678H+23456789H=?ABCDEF01H+94398271H=?2A3B4C5DH+3F4E5D6CH=?(5)对于双字节乘法实训程序,运行程序前,将被乘数和乘数分别送入工作寄存器R2、R3和R6、R7中,执行程序,并记录结果。程序运行结果表格请读者自行设计。第3章汇编语言程序设计程序运行前程序运行后30H40H50H31H41H51H32H42H52H33H43H53H54H第3章汇编语言程序设计3.2.7思考与讨论1.如何将程序改成十字节加法运算,编写程序并上机验证。2.编写四字节减法程序,要求被减数和减数分别存放在片内RAM30H和50H开始的单元中,差存放在60H开始的单元。上机验证。3.使用减法指令时应注意什么问题?第3章汇编语言程序设计提示:多字节加法实训程序可以考虑用循环结构完成,通过固定次数循环实现多字节相加。双字节乘法程序由于要保护中间和,占用的片内RAM单元较多,可考虑使用堆栈,但不能和工作寄存器组发生冲突。第3章汇编语言程序设计3.3实训10分支程序设计训练3.3.1实训目的通过本节实训,主要学习下面内容:分支程序的结构。分支程序设计的编程方法。分支结构程序的调试方法。通过散转指令实现多分支程序设计方法。第3章汇编语言程序设计3.3.2实训要求设单片机片内数据存储器20H单元存放00H~03H四个不同的数。根据20H中存放数据的不同,在LED七段显示器上显示循环左移的数字0、1、2、3。即:第3章汇编语言程序设计3.3.3实训预习JMP@A+DPTR是一条散转指令。它常用于多分支选择程序中。数据指针DPTR作为基址寄存器,决定多分支程序的首地址,用累加器ACC作为变址寄存器来动态地选择某一分支,来实现多分支转移。该指令采用基址寄存器加变址寄存器间接寻址方式,将DPTR和ACC内容相加作为地址,该地址传送到程序计数器PC中。第3章汇编语言程序设计为了在单片机开发系统上显示数字,必须了解所使用的单片机开发系统的显示器控制接口,通常用多功能接口芯片8155控制键盘和显示器。了解其字形口和字位口地址。(本系统字形口地址为0FF22H,字位口地址为0FF21H)。同时,还应了解所用单片机开发系统的LED显示器是共阴极型还是共阳极型。以便给出其不同的字形码。不同类型LED字形码如表3-4所示。本系统采用共阳极型LED。表3-4七段LED字形码第3章汇编语言程序设计字符共阳字形码共阴字形码字符共阳字形码共阴字形码0C0H3FHCC6H39H1F9H06HDA1H5EH2A4H5BHE86H79H3B0H4FHF8EH71H499H66HP8CH73H592H6DHY91H6EH第3章汇编语言程序设计682H7DHUC1H3EH7F8H07HH89H76H880H7FHLC7H38H990H6FH﹣BFH40HA88H77H“灭”FFH00HB83H7CH………第3章汇编语言程序设计3.3.4实训器材MCS-51单片机开发系统3.3.5程序流程及实训参考程序实训程序流程如图3-2所示。实训参考程序如表3-5所示。第3章汇编语言程序设计开始(A)+散转地址(A)←(20H)0字循环1字循环2字循环3字循环第3章汇编语言程序设计存储地址机器码行号源程序注释20001ORG2000H2000E5202MOVA,20H索引20029020103MOVDPTR,#KK转移指令表首地址2005234RLA2006735JMP@A+DPTR20106ORG2010H20107KK:AJMPA0转移指令表2012011E8AJMPA1第3章汇编语言程序设计201401249AJMPA22016012A10AJMPA320187520C011A0:MOV20H,#0C0H“0”字形码201B02203012LJMPBB201E7520F913A1:MOV20H,#0F9H“1”字形码202102203014LJMPBB20247520A415A2:MOV20H,#0A4H“2”字形码202702203016LJMPBB202A7520B017A3:MOV20H,#0B0H“3”字形码第3章汇编语言程序设计202D02203018LJMPBB2030E52019BB:MOVA,20H2032782220MOVR0,#22H8155字位口地址2034792121MOVR1,#21H8155字形口地址2036F222MOVX@R0,A2037740123MOVA,#01H位置号2039F324BB1:MOVX@R1,A203A12205025LCALLDELY延时203D2326RLA203E80F927SJMPBB1第3章汇编语言程序设计205028ORG2050H20507D0429DELY:MOVR5,#4延时子程序20527EFA30L3:MOVR6,#25020547F6431L2:MOVR7,#10020560032L1:NOP20570033NOP20580034NOP205935DJNZR7,L1205BDEF736DJNZR6,L2205DDDF337DJNZR5,L3205F2238RET39END第3章汇编语言程序设计3.3.6实训步骤(1)理解程序,弄清程序执行过程。(2)将机器码送入单片机系统中,并检查是否正确。(3)运行程序前,将00H~03H四个数中任意一个数送入20H单元中。(4)单步执行程序,逐条分析指令,看转移指令的条件是否满足,判断是否转移或不转。(5)观察数字在LED显示器上的移动方向,说明是程序中哪条指令控制转移的方向。3.3.7思考与讨论第3章汇编语言程序设计1.第4行指令RLA的作用是什么?它和哪一条指令相关联?2.设单片机晶振频率为6MHz,试计算延时子程序的延时时间。修改延时时间对数字显示会有什么影响?3.第7行指令AJMPA0的转移范围是多少?将其翻译成机器码。4.将程序修改成十个分支程序,在显示器上分别显示0~9十个数字。5.分析第25行指令LCALLDELY的堆栈使用情况。第3章汇编语言程序设计6.第35行指令DJNZR7,L1的转移条件是什么?将其翻译成机器码。提示:执行本程序,

1 / 64
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功