单片机魏第3章.ppt

上传人:本田雅阁 文档编号:2900571 上传时间:2019-06-03 格式:PPT 页数:46 大小:265.52KB
返回 下载 相关 举报
单片机魏第3章.ppt_第1页
第1页 / 共46页
单片机魏第3章.ppt_第2页
第2页 / 共46页
单片机魏第3章.ppt_第3页
第3页 / 共46页
单片机魏第3章.ppt_第4页
第4页 / 共46页
单片机魏第3章.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《单片机魏第3章.ppt》由会员分享,可在线阅读,更多相关《单片机魏第3章.ppt(46页珍藏版)》请在三一文库上搜索。

1、复习:,MCS-51单片机的控制转移指令有以下类型: 无条件转移:无需判断,执行该指令就转移到目的地址。 条件转移:需判断标志位是否满足条件,满足条件转移到目的地址,否则顺序执行。 绝对转移:转移的目的地址用绝对地址指示,通常为无条件转移。 相对转移:转移的目的地址用相对于当前PC的偏差(偏移量)指示,通常为条件转移。 长转移或长调用:目的地址距当前PC 64KB地址范围内。 短转移或短调用:目的地址距当前PC 2KB地址范围。,根据程序可知 A=10+9+8+7+6+5+4+3+2+1=55=37H,试说明以下一段程序运行后A中的结果。 MOV 23H,#0AH CLR A LOOP:ADD

2、 A,23H DJNZ 23H,LOOP SJMP $,第三章 汇编语言程序设计,一、汇编程序功能,源程序 (汇编指令程序),目标程序 (机器码指令程序),汇编指令与机器码指令有一一对应的关系。 汇编程序是一种翻译程序,将源程序翻译成目标程序。,二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。,1、手工汇编: 第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出; 第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。,源程序,目标程序,地址,ORG 1000H START:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC

3、R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP $ END,第一次汇编,第二次汇编,1000 A82F 1002 7A00 1004 E6 1005 FB 1006 0B 1007 80NEXT 1009 08 100A B644NEXT 100D 0A 100E DBLOOP 1010 8A2A 1012 80FE,A82F 7A00 E6 FB 0B 8005 08 B64401 0A DBF9 8A2A 80FE,2、机器汇编 两次扫描过程。 第一次扫描:检查语法错误,

4、确定符号名字; 建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。 第二次扫描:是在第一次扫描基础上,将符号地址转换成 地址(代真); 利用操作码表将助记符转换成相应的目标码。,三、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。 伪指令既不控制机器的操作,也不能被汇编成机器代码, 故称为伪指令。,1、起始地址伪指令 ORG addr16 用于规定目标程序段或数据块的起始地址, 设置在程序开始处。 2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。 一个程序中只出现一 次,在末尾。,3、赋值伪指令 EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。

5、 格式: 标号名称 EQU 数值或汇编符号 “标号名称”在源程序中可以作数值使用,也可以作数据地址、 位地址使用。 先定义后使用,放在程序开头。 4、定义字节伪指令 DB 告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。 格式: 标号: DB 字节数据或字节数据表 5、定义字伪指令 DW 从指定地址开始,定义若干个16个位数据,高八位存入低地址;低八位存入高地址。,例、 ORG 1000H PIOI:DW 7654H,40H、12、AB,6、数据地址赋值伪指令 DATA 将表达式指定的数据地址赋予规定的字符名称 格式: 字符名称 DATA 表达式 注:该指令与EQU 指令相似

6、,只是,可先使用后定义, 放于程序开头、结尾均可。,7、定义空间伪指令 DS 从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。 格式: 标号: DS 表达式 例2、 ORG 1000H DS 0AH DB 71H,11H,11H ;从100BH开始存放 ;71H、11H、11H。,注:DB、DW、DS 只能用于程序存储器; 而不能用于数据存储器。,8、位地址赋值伪指令 BIT 将位地址赋予规定的字符名称。 格式: 字符名称 BIT 位地址,例3、 X1 BIT P1.2 相当于 X1 EQU 92H,3-1 汇编语言程序的基本结构及应用举例,程序编写做到:占用存储空间少;运行时间

7、短; 程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。,按结构化程序设计思想,任何复杂程序都可由 顺序结构、 分支结构、 循环结构 等构成。,程序设计的几点启示:,1.整体构思 2.构建整体流程框图 3.结构合理,流程清晰,简单明了 4.局部模块化,为什么要用流程图?,1.符合人进行逻辑思考得习惯 2.计算机从根本来说,没有任何逻辑性,你必须告诉它,先做什么,后做什么,遇到什么情况由该做什么,等等 3.流程图设计本身是一个逐步求精的过程,最终将任务划分为若干能由机器指令时显得小模块,例1:将20H单元的两个压缩BCD码拆开变成ASC码,存入21H,22H单元,开始 20H A 10

8、H B A/B B+30H B B 22H A+30H A A 21H 结束,ORG 0000H MOV A, 20H MOV B, #10H DIV AB ORL B, #30H MOV 22H, B ORL A, #30H MOV 21H, A SJMP $,程序设计的基本步骤:,1.题意分析 2.画出流程图 3.分配内存及端口 4.编制源程序 5.仿真、调试程序 6.固化程序,例2:有两组BCD码(1183H和5678H)分别存放在23H,22H单元和33H,32H单元,求它们的和并送入43H、42H单元中去,开始 22H A 32H+A A 十进制调整 A 42H 23H A 33H+

9、A A 十进制调整 A 43H,ORG 0000H MOV A, 22H ADD A, 32H DA A MOV 42H, A MOV A, 23H ADDC A,33H DA A MOV 43H, A SJMP $,结束,一、顺序程序举例 例1、设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。,分析:,# # # # ¥ ¥ ¥ ¥, , ¥ ¥ ¥ ¥,解: 核心指令 ANL ORL 1000H MODE:MOV R0,#60H MOVX A,R0 MOV B,A

10、 ANL A,#0F0H SWAP A MOVX R0,A ANL B,#0FH MOV A,B INC R0 MOVX R0,A END,二、分支结构与分支程序设计 结构:根据不同的条件,进行相应的处理。 通常用条件转移指令形成简单分支结构。 如: 判(A) = Z 或 NZ ,转移 判(CY)= 1 或 0 ,转移 判(bit)=1 或 0 ,转移 CJNE 比较不相等转移,结构特点:不一定按指令的先后顺序依次运行程序,程序 的流向有两个或两个以上分支,根据指定条件选择程序 的流向。,例2、已知30H单元中有一变量X,要求编写一程序按下述要求给Y赋值,结果存入31H单元。 X+1 ( X0

11、 ) Y = 0 ( X =0 ) -1 (X 0),解: ORG 2000H MOV A, 30H JZ LP1 JNB ACC.7,LP2 MOV A,#0FFH SJMP LP1 LP2: ADD A,#01 LP1: MOV 31H, A SJMP ,散转程序:是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序,常用的指令: JMP A+DPTR,该指令是把16位数据指针DPTR的内容与累加器A中8位无符号数相加,形成地址,装入程序计数器PC,形成散转的目的地址。,例:根据R7的内容,转向各自对应的操作程序。(R7=0,转入OPR0,R7=1,转入OPR1R7=n转入OP

12、Rn),JUMP1:MOV DPTR ,#JPTAB1 MOV A,R7 ADD A,R7 JNC NOAD INC DPH NOAD: JMP A+DPTR JPTAB1: AJMP OPR0 AJMP OPR1 AJMP OPR2 AJMP OPRn,小结: 1、汇编程序有哪三种基本结构? 2、构成分支程序,常用到哪些判断语句?,顺序程序 每条指令只执行一次; 分支程序 根据不同条件,会跳过一些指令,而转去 执行另一些指令 共同点:每条指令至多执行一次。 但是,实际中有时要求某程序段多次重复执行,需要采用循环结构。,循环结构不但使程序简练,而且大大节省存储空间。 循环程序包含四部分: 、初

13、始化部分 (循环计数器、变量置初值) 、循环处理部分(主体,需要重复执行的部分) 、循环控制部分(修改地址指针、修改变量、检测 循环结束条件) 、循环结束部分(对结果分析、处理,存放结果),先修理,后判断:,先判断,后处理:,例:设计延时1秒的子程序(晶振为12MHz),DELAY: MOV R2, #10 DEL3:MOV R3,#200 DEL2: MOV R4,#125 DEL1: NOP NOP DJNZ R4, DEL1 DJNZ R3, DEL2 DJNZ R2, DEL3 RET,循环有:单循环、多重循环。 循环次数已知,可用计数器控制循环次数; 循环次数未知,按问题条件控制循环

14、是否结束。,1、单循环程序 (1)循环次数是已知的程序 例1、已知片外RAM的10H单元存放8位二进制数,要求将其转移成相应的ASCII码,并以高位在前,低位在后的顺序,依次存放到片外RAM以11H为首地址的连续单元中,试编程。 解:先将中间单元置成30H,然后判欲转换位是否为1, 若是,则将中间单元内容加1;否则,中间单元内容保持不变。 通过左移指令实现由高到低的顺序进行转换。,START:MOV R2,#08H ;循环计数初值(循环次数已知) MOV R0,#10H ;地址指针初值 MOVX A,R0 ;取数 MOV B,A ;暂存B中 LOOP:MOV A,#30H ;将中间单元(A)置

15、成30H JNB B.7,NA ;判断转换的二进制位为0否? INC A ;若为1,则变成1的ASCII码“31H” NA:INC R0 ;修改地址指针 MOVX R0,A ;存放转换的结果 MOV A,B RL A ;作好准备,判断下一位 MOV B,A ;暂存 DJNZ R2,LOOP ;判断转换结束否?未完继续 SJMP ,(2)循环次数未知的程序 例2、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以20H为首地址的连续单元,该字符串用回车符CR(CR= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。 解:从首单元开始取数,每取一

16、数判断其是否为CR,是则结束。,ORG 1000H STADA DATA 20H SLANG DATA 1FH CMCR2:MOV R0,#STADA-1 MOV B,#0FFH,CRLOP:INC R0 INC B MOVX A,R0 CJNE A,#0DH,CRLOP MOV SLANG,B SJMP END,2、多重循环设计 循环体中还包含着一个或多个循环结构,即双重或多重循环。 例3、设8031使用12MHz晶振,试设计延迟100ms的延时程序。,内循环延时: (1 + 2 CTR)T = 500us(假设) 则CTR = 250 实际延时:1 + 2 250 1us = 501us

17、外循环延时:T +(501 + 2T) CTS = 100ms = 100 000us 所以 , CTS = 198.8 取 199 实际延时:1 + (501 + 2)199 = 100.098ms,例:编程实现P1口连接的8个LED显示方式如下:从P1.0到P1.7的顺序,依次点亮其连接的LED。,子程序的设计,子程序和运算程序是程序设计的两大支柱. 1 子程序的概念:完成确定任务,并能为其他程序反复调用的程序段.要求子程序在结构上具有通用性和独立性.例如:代码转换,运算程序等. 2.子程序调用、返回到主程序中的正确位置并接着执行主程序中的后续指令,主要通过采用堆栈技术。,子程序编写注意的

18、问题,子程序调用:ACALL LCALL 子程序返回:RET 1.子程序第一条必须有标号.也就是入口地址的代号。 2.要有正确的传递参数。即首先要有入口条件,说明进入子程序时,它所要处理的数据存放在何处。 3.要有出口条件,即处理的结果存放在何处。 4.注意保护现场和恢复现场。,把多次使用的程序段,按一定结构编好,存放在存储器中,当需要时可以调用这些独立的程序段。通常将这种可以被调用的程序段称为子程序。 LCALL 转走要返回 LJMP 转走不返回,子程序嵌套是指在子程序的运行过程中还可以调用另一个子程序。 子程序调用、返回到主程序中的正确位置并接着执行主程序中的后续指令,主要通过采用堆栈技术

19、。,例:LED灯闪烁,MAIN: MOV A,#0FEH; SP DELAY: MOV R3, #0FFH; COUN:ACALL FLASH DEL2: MOV R4, #FFH RL A DEL1: NOP SJMP COUN ; SP =? DJNZ R4, DEL1 FLASH:MOV R0 ,#10 DJNZ R3,DEL2 FLASH1:MOV P1, A ; SP=? RET LCALL DELAY END MOV P1,#0FFH LCALL DELAY DJNZ R0,FLASH1 RET,例3-19 用程序实现c=a2+b2,设a,b均小于10。a存放在31H单元,b存放在

20、32H单元,把c存入34H和33H单元。(和要求为BCD码)。 解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法,主程序和子程序编写如下:,主程序: ORG 0000H MOV SP,#3FH MOV A,31H ;取a LCALL SQR ;求a方 MOV R1,A MOV A,32H ;取b LCALL SQR ; 求b方 ADD A,R1 ; 求和 DA A ;调整 MOV 33H,A MOV A,#0 ADDC A,0,MOV 34H,A SJMP $ 子程序: ORG 0030H SQR:INC A MOVC A,A+PC RET TAB: DB

21、 00H,01H,04H DB 09H 16H,25H, DB 36H,49H64H,81H END,3.8 小 结,1、程序设计的关键在于指令熟悉和算法(思路)正确、清晰,对复杂的程序应先画出流程图。只有多做练习多上机调试,熟能生巧,才能编出高质量的程序。 2、伪指令是非执行指令,提供汇编程序以汇编信息,应正确使用。 3、本章应掌握顺序程序、分支程序、循环程序、子程序等各类程序的设计方法,并能熟练应用查表技术简化程序的设计。,今天的作业:,1.设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。,今天的作业:,1.设8031使用6MHz晶振,试设计延迟100ms的延时程序。 2.编一子程序,求出20H中有符号数的二进制补码再送回20H,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1