51单片机PPT教程课件

上传人:我*** 文档编号:144909748 上传时间:2020-09-14 格式:PPT 页数:85 大小:973KB
返回 下载 相关 举报
51单片机PPT教程课件_第1页
第1页 / 共85页
51单片机PPT教程课件_第2页
第2页 / 共85页
51单片机PPT教程课件_第3页
第3页 / 共85页
51单片机PPT教程课件_第4页
第4页 / 共85页
51单片机PPT教程课件_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《51单片机PPT教程课件》由会员分享,可在线阅读,更多相关《51单片机PPT教程课件(85页珍藏版)》请在金锄头文库上搜索。

1、第四章 汇编语言程序设计,回顾:MCS-51单片机系统硬件资源 MCS-51单片机指令系统,单片机系统应用程序设计: 熟悉单片机的硬件原理 掌握单片机的汇编指令 二者有机的组合,形成系统应用程序,提高单片机控制系统的特性和效率: 熟悉控制系统本身的硬件结构 熟悉编程思路、技巧,掌握编程方法、步骤,4.1 汇编语言程序设计方法 4.2 简单和分支程序设计 4.3 循环和查表程序设计 4.4 子程序和运算程序设计,4.1 汇编语言程序设计方法4.1.1 程序设计步骤,1、汇编语言程序设计:根据设计任务要求,采用汇编语言编制程序的过程。,2、应用程序设计步骤: 1. 拟定任务书 2. 建立数学模型

2、3. 建立算法 4. 绘制程序流程图 5. 编制汇编语言源程序 6. 上机调试,注意:汇编调试需要多次试验,4.1.2 程序结构设计的基本方法,汇编语言程序设计基本要求:,高质量、可读性好、存储容量小和执行速度快,汇编程序结构设计的基本方法:,1.简单程序的设计 2.分支程序设计 3.循环程序设计 4.子程序设计 5.查表程序设计 6.散转程序设计,4.2 简单和分支程序设计,4.2.1 简单程序设计,例4.1 请用51汇编指令编写程序,将外部RAM单元中40H单元4位BCD数转换成ASCII码,送到内部RAM单元60H 61H之中。,简单程序:是指程序设计中没有使用转移类指令的程序段。 也称

3、顺序程序或直线程序。 程序执行:按照指令存储位置的先后顺序依次执行,中间不会 有任何分支程序、循环程序等。 程序特点:结构简单,易于阅读理解,大量使用数据传送指令。,解:根据ASCII字符表,十进制数09的ASCII码和它的BCD码之间仅相差30H,本题需要把一个字节的两位BCD数进行拆分,然后分别和30H相加,即得到相应的ASCII码。,参考设计程序如下: ORG 1000H ADDR1 DATA 0040H ADDR2 EQU 60H MOV DPTR,#ADDR1 ; 源地址 = DPTR MOV R0, #ADDR2 ; 目标地址 = R0 MOV R0, #00H ; 目标地址单元清

4、零 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 分支程序设计,分支程序的特点是程序中含有转移指令。 由于转移指令有无条件转移和条件转移之分,因此分支程序也可分为无条件分支程序和条件分支程序两类。 无条件分支程序中含有无条件转移指令,因简单这里不作专门讨论;条件

5、分支程序中含有条件转移指令,是我们讨论的重点。,条件分支程序体现了计算机执行程序时的分析判断能力。若某种条件满足,则机器就转移到另一分支上执行程序;若条件不满足,则机器就按原程序继续执行。,MCS-51中,条件转移指令共有13条,分为累加器A判零条件转移、比较条件转移、减1条件转移和位控制条件转移等四类。,例4.2 已知VAR单元内有一自变量X,请按如下条件编出求函数值Y并将它存入FUNC单元的程序。 Y ,解:这是一个三分支归一的条件转移问题,程序实现通常可分为“先分支后赋值”和“先赋值后分支”两种求解办法。现分述如下:,1先分支后赋值。题意告诉我们,自变量X是个带符号数,可采用累加器判零条

6、件转移和位控制条件转移指令来实现,程序流程如图4-1(a)所示。,相应程序为: ORG 1000H VAR DATA 30H FUNC DATA 31H MOV A,VAR ; X送A JZ DONE; 若X=0,则转DONE JNB ACC.7,POSI ; 若X0,则转POSI MOV A,#0FFH ; 若X0,则1送A SJMP DONE ; 转DONE POSI:MOV A,#01H ; 1送A DONE:MOV FUNC,A ; 存Y值 SJMP $ END,2先赋值后分支。 先把X调入累加器A,并判断它是否为零? 若X0,则A中内容送FUNC单元; 若X0,则先给R0赋值(如1)

7、,然后判断A0,则把R0修改成1后送FUNC单元, 程序流程如图4-1(b)所示。,相应程序为: 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 某系有200名学生参加外语统考,若成绩已存放在MCS-51外部RAM始地址为ENGLISH的连续存储单元,现决定给成绩在95分100分之

8、间学生颁发A级合格证书和成绩在90分94分之间学生颁发B级合格证书。试编制一个程序,可以统计A级和B级证书的学生人数,并把统计结果存入内部RAM的GRADA和GRADB单元。,解:这是一个循环和分支相结合程序, 程序流程图如图4-2所示。,图4 -2 例4.3程序流程图,相应程序为: ORG 1000H ENGLISH DATA 2000H GRADA DATA 20H GRADB DATA 21H MOV GRADA, #00H ; GRADA单元清零 MOV GRADB, #00H ; GRADB单元清零 MOV R2,#0C8H ; 参考总人数送R2 MOV DPTR,#ENGLISH

9、; 学生成绩始地址送DPTR LOOP: MOVX A,DPTR ; 取某学生成绩到A CJNE A,#5FH,LOOP1 ; 和95作比较,形成Cy LOOP1: JNC NEXT1 ; 若A95,则NEXT1 CJNE A,#5AH,LOOP2 ; 和90作比较 LOOP2: JC NEXT ; A90,NEXT INC GRADB ; 为B级,则GRADB单元内容加1 SJMP NEXT NEXT1: INC GRADA ; A95,则GRADA单元内容加1 NEXT: INC DPTR ; 修改学生成绩指针 DJNZ R2, LOOP ; 未完,则LOOP SJMP $ ; 结束 EN

10、D,4.2.3 散转程序设计,在利用MCS-51单片机指令设计汇编程序时,有时会遇到一类多分支程序的设计。分支转移的目标地址不是汇编或编程时确定的,而是在程序运行时动态决定的。,MCS-51单片机提供了间接转移指令 JMP A + DPTR, 恰好可以实现这一类转移。其中,DPTR装入多分支转移程序的首地址,用累加器A的内容来动态选择其中的某一个分支予以转移。这样一条指令可实现以DPTR内容为起始地址的256个字节范围的选择转移。,例4.4 已知通过调用键盘控制程序KEYREAD可将按下的按键键值0 15之一读到累加器A,要求编写程序对读入的不同键值,分别转入对应的键控程序段KEY0 KEY1

11、5执行。 即要求:当(A)=0时,转键控处理程序KEY0; 当(A)=1时,转键控处理程序KEY1; 当(A)=15时,转键控处理程序KEY15。,解: 对于上述要求的问题,编写程序如下: ORG 1000H ACALL KEYREAD ; 读键值程序 RL A ; 调整 MOV DPTR,#TABLE ; 表首址送DPTR JMP A+DPTR ; 以A中内容为偏移量跳转 TABLE: AJMP K0 ; 读入键为第1个键,转K0执行 AJMP K1 ; 读入键为第2个键,转K1执行 AJMP K15 ; 读入键为第16个键,转K15执行 K0: 第1键处理程序段 K1: 第2键处理程序段

12、K15: 第16键处理程序段 ,4.3 循环和查表程序设计,4.3.1 循环程序设计 循环程序的特点是程序中含有可以重复执行的程序段,该程序段通常称为循环体。 例如,求100个数的累加和是没有必要连续安排100条加法指令的,可以只用一条加法指令并使之循环执行100次。,循环程序的组成(四部分): 1.循环初始化 循环初始化程序段位于循环程序开头,用于完成循环前的准备工作,例如:循环体中循环计数器和各工作寄存器设置初值,其中循环计数器用于控制循环次数。,循环程序设计不仅可以大大缩短所编程序长度和使程序所占存储单元数最少,也能使程序结构紧凑和可读性变好。 应注意循环程序设计并不能缩短完成任务的程序

13、执行时间。,2.循环处理 这部分程序位于循环体内,是循环程序的工作程序,需要重复执行。要求编写得尽可能简练,提高程序执行速度。,3.循环控制 循环控制程序也在循环体内,常常由修改循环计数器内容的语句和条件转移语句等组成,用于控制循环执行次数。,4.循环结束 这部分程序用于存放执行循环程序所得结果以及恢复各工作单元循环前的初值。,循环程序通常有两种编制方法: 一种是先循环处理后循环控制(即先处理后判断),如图4-3(a)所示; 另一种是先循环控制后循环处理(即先判断后处理),如图4-3(b)所示。,(a) 先处理后判断 (b) 先判断后处理 图4-3 循环程序结构类型,解:为了使读者对两种循环结

14、构有一个全面了解,以便进行分析比较,现给出两种设计方案。 1先判断后处理(见图4-4(a)),例4.5 已知内部RAM的BLOCK单元开始有一无符号数据块,块长在LEN单元。请编出求数据块中各数累加和、并存入SUM单元的程序。,(a) 先判断后处理 (b) 先处理后判断 图4-4 例4.5程序流程图,求累加和参考程序: ORG 1000H LEN DATA 20H SUM DATA 21H BLOCK DATA 22H CLR A ;A清零 MOV R2,LEN ;块长送R2 MOV R1,#BLOCK ;块始地址送R1 INC R2 ;块长+1 SJMP CHECK LOOP: ADD A,R1 ;A+(R1)送A INC R1 ;修改数据块指针R1 CHECK: DJNZ R2,LOOP ;若未完,则转LOOP MOV SUM,A ;存累加和 SJMP $ END,2先处理后判断(见图4-4(b)) 参考程序为: ORG 1000H LEN DATA 20H SUM DATA 21H BLOCK DATA 22H CLR A ;A清零 MOV R2,L

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号