单片机课件-第四章.ppt
《单片机课件-第四章.ppt》由会员分享,可在线阅读,更多相关《单片机课件-第四章.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 汇编语言程序设计汇编语言程序设计回顾:回顾:MCS-51单片机系统单片机系统硬件资源硬件资源 MCS-51单片机指令系统单片机指令系统单片机系统应用程序设计单片机系统应用程序设计:熟悉单片机的硬件原理熟悉单片机的硬件原理 掌握单片机的汇编指令掌握单片机的汇编指令 二者二者有机的组合,形成系统应用程序有机的组合,形成系统应用程序提高提高单片机控制系统的特性和效率单片机控制系统的特性和效率:熟悉控制系统本身的硬件结构熟悉控制系统本身的硬件结构 熟悉编程思路、技巧,掌握编程方法、步骤熟悉编程思路、技巧,掌握编程方法、步骤信息学院 4.1 汇编语言程序设计方法汇编语言程序设计方法 4.2
2、 简单和分支程序设计简单和分支程序设计 4.3 循环和查表程序设计循环和查表程序设计 4.4 子程序和运算程序设计子程序和运算程序设计信息学院4.1 4.1 汇编语言程序设计方法汇编语言程序设计方法4.1.1 4.1.1 程序设计步骤程序设计步骤1、汇编语言程序设计汇编语言程序设计:根据设计任务要求,采根据设计任务要求,采用汇编语言编制程序的过程。用汇编语言编制程序的过程。2、应用程序设计步骤:应用程序设计步骤:1.拟定任务书拟定任务书 2.建立数学模型建立数学模型 3.建立算法建立算法 4.绘制程序流程图绘制程序流程图 5.编制汇编语言源程序编制汇编语言源程序 6.上机调试上机调试 注意:注
3、意:汇编调试需要多次试验汇编调试需要多次试验信息学院4.1.2 4.1.2 程序结构设计的基本方法程序结构设计的基本方法汇编语言程序设计汇编语言程序设计基本要求基本要求:高质量、可读性好、存储容量小和执行速度快高质量、可读性好、存储容量小和执行速度快汇编程序结构设计的基本方法:汇编程序结构设计的基本方法:1.1.简单程序的设计简单程序的设计 2.2.分支程序设计分支程序设计 3.3.循环程序设计循环程序设计 4.4.子程序设计子程序设计5.5.查表程序设计查表程序设计6.6.散转程序设计散转程序设计信息学院4.2 4.2 简单和分支程序设计简单和分支程序设计4.2.1 4.2.1 简单程序设计
4、简单程序设计 例例4.14.1 请用请用5151汇编指令编写程序,将外部汇编指令编写程序,将外部RAMRAM单元中单元中40H40H单单元元4 4位位BCDBCD数转换成数转换成ASCIIASCII码,送到内部码,送到内部RAMRAM单元单元60H 60H 61H 61H之之中。中。简单程序简单程序:是指程序设计中没有使用转移类指令的程序段是指程序设计中没有使用转移类指令的程序段。也称也称顺序程序或直线程序。顺序程序或直线程序。程序执行程序执行:按照指令存储位置的先后顺序依次执行,中间不会按照指令存储位置的先后顺序依次执行,中间不会 有任何分支程序、循环程序等有任何分支程序、循环程序等。程序程
5、序特点:特点:结构简单,易于阅读理解结构简单,易于阅读理解,大量使用数据传送指令大量使用数据传送指令。解:解:根据根据ASCIIASCII字符表,十进制数字符表,十进制数0 0 9 9的的ASCIIASCII码和它的码和它的BCDBCD码之间仅相差码之间仅相差30H30H,本题需要把一个字节的两位,本题需要把一个字节的两位BCDBCD数进行数进行拆分,然后分别和拆分,然后分别和30H30H相加,即得到相应的相加,即得到相应的ASCIIASCII码。码。信息学院参考设计程序如下:参考设计程序如下:ORG 1000H ADDR1 DATA 0040H ADDR2 EQU 60H MOV DPTR,
6、#ADDR1 ;源地址源地址=DPTR MOV R0,#ADDR2 ;目标地址目标地址=R0 MOV R0,#00H ;目标地址单元清零目标地址单元清零 MOVX A,DPTR ;源地址单元中源地址单元中BCD数送数送A MOV B,A ANL A,#0FH ORL A,#30H ;完成低位完成低位BCD数转换数转换 MOV R0,A ;存入存入60H INC R0 MOV A,B ANL A,#0F0H SWAP A ;高位高位BCD数送低数送低4位位 ORL A,#30H ;完成高位完成高位BCD数转换数转换 MOV R0,A ;存入存入61H SJMP$END信息学院4.2.2 4.2.
7、2 分支程序设计分支程序设计n 分支程序的分支程序的特点特点是程序中含有转移指令。是程序中含有转移指令。由于转移指令有无条件转移和条件转移之分,因此分支由于转移指令有无条件转移和条件转移之分,因此分支程序也可分为程序也可分为无条件分支程序无条件分支程序和和条件分支程序条件分支程序两类。两类。无条件分支程序中含有无条件转移指令,因简单这里不无条件分支程序中含有无条件转移指令,因简单这里不作专门讨论;作专门讨论;条件分支程序条件分支程序中含有条件转移指令,是我们讨中含有条件转移指令,是我们讨论的重点。论的重点。v 条件分支程序体现了计算机执行程序时的分析判断能力。条件分支程序体现了计算机执行程序时
8、的分析判断能力。若某种条件满足,则机器就转移到另一分支上执行程序;若若某种条件满足,则机器就转移到另一分支上执行程序;若条件不满足,则机器就按原程序继续执行。条件不满足,则机器就按原程序继续执行。MCS-51 MCS-51中,条件转移指令共有中,条件转移指令共有1313条,分为累加器条,分为累加器A A判零判零条件转移、比较条件转移、减条件转移、比较条件转移、减1 1条件转移和位控制条件转移条件转移和位控制条件转移等四类。等四类。信息学院 例例4.24.2 已知已知VARVAR单元内有一自变量单元内有一自变量X X,请按如下条件编出求函,请按如下条件编出求函数值数值Y Y并将它存入并将它存入F
9、UNCFUNC单元的程序。单元的程序。Y 解:这是一个三分支归一的条件转移问题,程序实现通常可解:这是一个三分支归一的条件转移问题,程序实现通常可分为分为“先分支后赋值先分支后赋值”和和“先赋值后分支先赋值后分支”两种求解办法。两种求解办法。现分述如下:现分述如下:1先分支后赋值。题意告诉我们,自变量先分支后赋值。题意告诉我们,自变量X是个带符号数,是个带符号数,可采用累加器判零条件转移和位控制条件转移指令来实现,程可采用累加器判零条件转移和位控制条件转移指令来实现,程序流程如图序流程如图4-1(a)所示所示。信息学院相应程序为:相应程序为:ORG 1000HVAR DATA 30HFUNC
10、DATA 31H MOV A,VAR ;X送送AJZ DONE;若若X=0,则转则转DONE JNB ACC.7,POSI;若若X0,则转则转POSI MOV A,#0FFH ;若若X 0?A 1 存存结结果果A 1(a)先分支后赋值先分支后赋值 YN N Y 图图4-1 例例4.2流程图流程图 信息学院2先赋值后分支。先赋值后分支。先把先把X调入累加器调入累加器A,并判断它是并判断它是否为零?否为零?若若X0,则,则A中内容送中内容送FUNC单元;单元;若若X0,则先给则先给R0赋值(如赋值(如1),),然后判断然后判断A0?若若A0,则把则把R0修改成修改成1后送后送FUNC单元,单元,程
11、序流程如图程序流程如图4-1(b)所示。所示。(b)先赋值先赋值后分支后分支 A X,R0 0 R0 1 存存结结果果 R0 1A=0?A 0?YN YN 图图4-1 例例4.2流程图流程图 信息学院相应程序为:相应程序为:ORG 1000H VAR DATA 30H FUNC DATA 31H MOV R0,#00H MOV A,VAR ;X送送A JZ DONE ;若若X=0,则转则转DONE MOV R0,#0FFH ;若若X 0,则则1送送R0 JB ACC.7,DONE ;若若X 0,则则1送送R0 DONE:MOV FUNC,R0 ;存存Y值值 SJMP$END信息学院 例例4.3
12、 某系有某系有200名学生参加外语统考,若成绩已存放名学生参加外语统考,若成绩已存放在在MCS-51外部外部RAM始地址为始地址为ENGLISH的连续存储单元,的连续存储单元,现决定给成绩在现决定给成绩在95分分100分之间学生颁发分之间学生颁发A级合格证书和级合格证书和成绩在成绩在90分分94分之间学生颁发分之间学生颁发B级合格证书。试编制一级合格证书。试编制一个程序,可以统计个程序,可以统计A级和级和B级证书的学生人数,并把统计结级证书的学生人数,并把统计结果存入内部果存入内部RAM的的GRADA和和GRADB单元。单元。解:这是一个循环和分支相结合程序,解:这是一个循环和分支相结合程序,
13、程序流程图如图程序流程图如图4-2所示。所示。信息学院 A95?A90?完成否完成否?GRADB单元内容加单元内容加1修改修改DPTR指针指针 结结 束束GRADA单元单元内容加内容加1GRADA和和GRADB单元清零、单元清零、DPTR置初置初值值ENGLISH、循环计数器循环计数器R2置初值置初值200取某学生外语成绩取某学生外语成绩图图4-2 例例4.34.3程序流程图程序流程图 信息学院相应程序为:相应程序为:ORG 1000HENGLISH DATA 2000HGRADA DATA 20HGRADB DATA 21H MOV GRADA,#00H ;GRADA单元清零单元清零 MOV
14、 GRADB,#00H ;GRADB单元清零单元清零 MOV R2,#0C8H ;参考总人数送参考总人数送R2 MOV DPTR,#ENGLISH ;学生成绩始地址送学生成绩始地址送DPTRLOOP:MOVX A,DPTR ;取某学生成绩到取某学生成绩到A CJNE A,#5FH,LOOP1 ;和和95作比较,形成作比较,形成CyLOOP1:JNC NEXT1 ;若若A95,则,则NEXT1 CJNE A,#5AH,LOOP2 ;和和90作比较作比较LOOP2:JC NEXT ;A e63,则两个存贮单元中内容交换,则两个存贮单元中内容交换,反之就不交换;反之就不交换;然后使然后使e62和和e
15、63相比,按同样原则决定是否交换;相比,按同样原则决定是否交换;一直比较下去;最后完成一直比较下去;最后完成e1和和e2比较及交换,经过比较及交换,经过N-163次次比较(常用内循环比较(常用内循环63次来实现)后,次来实现)后,e1位置上必然得到数组中的位置上必然得到数组中的最大值,犹如一个气泡从水底冒到了水顶,如图最大值,犹如一个气泡从水底冒到了水顶,如图4-5所示。所示。第二次冒泡过程和第一次冒泡过程完全相同,比较次数也可第二次冒泡过程和第一次冒泡过程完全相同,比较次数也可以是以是63次(其实只需次(其实只需62次),冒泡后可以在次),冒泡后可以在e2位置上得到次最大位置上得到次最大值,
16、如图值,如图4-5所示。所示。冒泡循环次数计算:冒泡循环次数计算:(以(以 64个数的排序为例)个数的排序为例)大循环(外循环)共大循环(外循环)共63次;次;内循环:共内循环:共6363次。次。完成完成64个数的排序需要外循环个数的排序需要外循环63次、内循环次、内循环3969次。次。信息学院第一次冒泡排序(比较第一次冒泡排序(比较5次)次)N=6时时 比较比较1 比较比较2 比较比较3 比较比较4 比较比较5 e1 4 4 4 4 4 256e2 1 1 1 1 256 4 e3 0 0 0 256 1 1e4 42 42 256 0 0 0e5 36 256 42 42 42 42e6
17、256 36 36 36 36 36信息学院第第二二次冒泡排序(比较次冒泡排序(比较4次)次)N=6时时 比较比较1 比较比较2 比较比较3 比较比较4e1 256 256 256 256 256 256e2 4 4 4 4 42 42 e3 1 1 1 42 4 4e4 0 0 42 1 1 1e5 42 42 0 0 0 0e6 36 36 36 36 36 36信息学院第第三三次冒泡排序(比较次冒泡排序(比较3次)次)N=6时时 比较比较1 比较比较2 比较比较3e1 256 256 256 256 256 256e2 42 42 42 42 42 42 e3 4 4 4 36 36 3
18、6e4 1 1 36 4 4 4e5 0 36 1 1 1 1e6 36 0 0 0 0 0信息学院第第四四次冒泡排序(比较次冒泡排序(比较2次)次)N=6时时 比较比较1 比较比较2e1 256 256 256 256 256 256e2 42 42 42 42 42 42 e3 36 36 36 36 36 36e4 4 4 4 4 4 4e5 1 1 1 1 1 1e6 0 0 0 0 0 0信息学院第第五五次冒泡排序(比较次冒泡排序(比较1次)次)N=6时时 比较比较1e1 256 256 256 256 256 256e2 42 42 42 42 42 42 e3 36 36 36
19、36 36 36e4 4 4 4 4 4 4e5 1 1 1 1 1 1e6 0 0 0 0 0 0信息学院其实,其实,64个无符号数的数组排序需要冒泡个无符号数的数组排序需要冒泡63次的机会是很次的机会是很少的,每次冒泡所需的数据比较次数,也是从少的,每次冒泡所需的数据比较次数,也是从63逐次减少(每逐次减少(每冒一次泡减少一次比较)。冒一次泡减少一次比较)。为了禁止那些不必要的冒泡次数,人们常常设置一个为了禁止那些不必要的冒泡次数,人们常常设置一个“交交换标志位换标志位”。“交换标志位交换标志位”在循环初始化时清零,在数据交在循环初始化时清零,在数据交换时置位成换时置位成1(表示冒泡中进行
20、过数据交换)。(表示冒泡中进行过数据交换)。“交换标志位交换标志位”用来控制是否再需要冒泡:用来控制是否再需要冒泡:若若“交换标志位交换标志位”为为1,则表明刚刚进行的冒泡中发生过数,则表明刚刚进行的冒泡中发生过数据交换(即排序尚未完成),应继续进行冒泡;据交换(即排序尚未完成),应继续进行冒泡;若若“交换标志位交换标志位”为为0,则表明刚进行完的冒泡中未发生过,则表明刚进行完的冒泡中未发生过数据交换(即排序已完成),冒泡应该禁止。数据交换(即排序已完成),冒泡应该禁止。例如,对于一个已经排好序的数组:例如,对于一个已经排好序的数组:1,2,3,63,64,排序程序只要进行一次冒泡便可根据,排
21、序程序只要进行一次冒泡便可根据“交换标志位交换标志位”状态而状态而结束排序程序的再执行,这自然可以节省结束排序程序的再执行,这自然可以节省63162次的冒泡次的冒泡时间。冒泡程序流程如图时间。冒泡程序流程如图4-6所示。所示。信息学院开始开始数据块始址送数据块始址送R0块长块长1 送送 R2“交换标志位交换标志位”7FH清零清零 eN送送20H和和A 修改数据指针修改数据指针 eN-1送送21H eNeN-1?“交换标志交换标志”7FH=1?e和和e在数据块中位置交换在数据块中位置交换“交换标志交换标志”7FH置置”1”结束结束 R210?图图4-6 冒泡程序流程图冒泡程序流程图 信息学院参考
22、程序为:参考程序为:ORG 1000H BUBBLE:MOV R0,#30H ;置数据块指针置数据块指针R0 MOV R2,#64 ;块长送块长送R2 CLR 7FH ;交换标志交换标志2FH.7清零清零 DEC R2 ;块长块长1为比较次数为比较次数 BULOOP:MOV 20H,R0 ;e送送20H MOV A,R0 ;e送送A INC R0 MOV 21H,R0 ;e送送21H CJNE A,21H,LOOP ;(20H)和和(21H)比较比较 LOOP:JC BUNEXT ;若;若(20H)除数?计数器减1计数器=0?返回NYN1商2减去除数0 商YR5R4R3R2C左环移1位NSDI
23、V0 CC=1?(R5R4)(R7R6)AR1(F0)=1?返回YYN(AR1)(R5R4)(执行减法)(R2)+1 R2(上商1)(R5R4)(R7R6)1 F016 BC F0(B)-1 B=0?1 F0YNN比较除法程序框图无符号双字节除法程序框图信息学院 判断除法是否完成(判断除法是否完成(B=0)?)?若未完成,则重复执行第四步;若已完成,若未完成,则重复执行第四步;若已完成,则令则令F0=0,然后结束除法运算。然后结束除法运算。参考程序为:参考程序为:ORG 1000H NSDIV:MOV A,R6 ;除数低除数低8位送位送A JNZ START ;若除数若除数0,则,则START
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课件 第四
限制150内