河工大单片机课件第4章讲义

上传人:今*** 文档编号:108175737 上传时间:2019-10-22 格式:PPT 页数:65 大小:1.50MB
返回 下载 相关 举报
河工大单片机课件第4章讲义_第1页
第1页 / 共65页
河工大单片机课件第4章讲义_第2页
第2页 / 共65页
河工大单片机课件第4章讲义_第3页
第3页 / 共65页
河工大单片机课件第4章讲义_第4页
第4页 / 共65页
河工大单片机课件第4章讲义_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《河工大单片机课件第4章讲义》由会员分享,可在线阅读,更多相关《河工大单片机课件第4章讲义(65页珍藏版)》请在金锄头文库上搜索。

1、MCS-51单片机原理及应用,孙景峰 TEL:60204355 EMAIL:sunjf,第四章 汇编语言程序设计,指定设计任务书,建立数学模型,确定算法,分配内存单元 绘制程序流程图,编写汇编语言源程序,汇编,上机调试,程序优化,编制程序流程图:是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:,椭圆框:开始和结束框,在程序的开始和结束时使用。,矩形框:处理框,表示要进行的各种操作。,菱形框:判断框,表示条件判断,以决定程序的流向。,流向线:流程线,表示程序执行的流向。,圆 圈:连接符,表示不同页之间的流程连接。,汇编语言的指令类型,MCS-51单片机汇编语言,

2、包含两类不同性质的指令。,基本指令,伪指令,即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。,汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码。,伪指令,伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制信息,不产生可执行的目标代码,是CPU不能执行的指令。,伪指令(也称为汇编程序的控制命令)是程序员发给汇编程序的命令,用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。,(1)定位伪指令ORG,格式:ORG n,其中:n通常为绝对地址,可以是十六进制数、标号或表达式。,功能:规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存

3、在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。,ORG 1000H START: CLR C ;C3 MOV R2,#3 ;7A 03,ROM,1000H,1001H,1002H,(2)结束汇编伪指令END,格式:标号:END,功能:放在汇编语言源程序的末尾,表明源程序的汇编到此结束,其后的任何内容不予理睬。,(3)赋值伪指令EQU,格式:字符名称x EQU 赋值项n,功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效。赋值项n可以是常数、地址、标号或表达式。在使用时,必须先赋值后使用。,“字符名称”与“标号”的区别是“

4、字符名称”后无冒号,而“标号”后面有冒号。,(4)定义字节伪指令DB,格式:标号: DB x1, x2, xn,功能:将8位数据(或8位数据组)x1, x2, xn顺序存放在从当前程序存储器地址开始的存储单元中。xi可以是8位数据、ASCII码、表达式,也可以是括在单引号内的字符串。两个数据之间用逗号“,”分隔。,xi为数值常数时,取值范围为00HFFH。xi为ASCII码时,要使用单引号,以示区别。xi为字符串常数时,其长度不应超过80个字符。,(5)定义双字节伪指令DW,功能:将双字节数据或双字节数据组顺序存放在从标号指定地址单元开始的存储单元中。其中,xi为16位数值常数,占两个存储单元

5、,先存高8位(存入低位地址单元中),后存低8位(存入高位地址单元中)。,格式:标号: DW x1, x2, xn,格式:标号: DS n,功能:从标号指定地址单元开始,预留n个存储单元,汇编时不对这些存储单元赋值。n可以是数据,也可以是表达式。,(6)预留存储空间伪指令DS,格式:字符名称x BIT 位地址n,功能:将位地址n的值赋予字符名称x。程序中凡出现该字符名称x就代表该位地址。位地址n可以是绝对地址,也可以是符号地址。,(7)定义位地址符号伪指令BIT,(8)数据地址赋值伪指令DATA,格式:字符名称x DATA 表达式n,功能:把表达式n的值赋值给左边的字符名称x。n可以是数据或地址

6、,也可以是包含所定义的“字符名称x”在内的表达式,但不能是汇编符号。,DATA与EQU的主要区别是:EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制。所以,DATA伪指令通常用在源程序的开头或末尾。,特点:顺序结构程序是最简单、最基本的程序。程序按编写的顺序依次往下执行每一条指令,直到最后一条。它能够解决某些实际问题,或成为复杂程序的子程序。,顺序程序设计,解:两位压缩BCD码转换成二进制数的算法为: (a1a 0)BCD=10a1a0,例题 将片内RAM 30H单元中的两位压缩BCD码转换成二进制数送到片内RAM 40H单元中。,顺序程序设计,程序如下: O

7、RG 1000H START: MOV A, 30H ; 取两位BCD压缩码a1a0送A ANL A, #0F0H ; 取高4位BCD码a1 SWAP A ; 高4位与低4位换位 MOV B, #0AH ; 将二进制数10送入B MUL AB ; 将10a1送入A中 MOV R0, A ; 结果送入R0中保存 MOV A, 30H ; 再取两位BCD压缩码a1a0送A ANL A, #0FH ; 取低4位BCD码a0 ADD A, R0 ; 求和10a1+ a0 MOV 40H, A ; 结果送入40H保存 SJMP $ ; 程序执行完,“原地踏步” END,特点:根据不同的条件,确定程序的走

8、向。它主要靠条件转移指令、比较转移指令和位转移指令来实现。,分支程序的设计要点如下:,(1)先建立可供条件转移指令测试的条件。,(2)选用合适的条件转移指令。,(3)在转移的目的地址处设定标号。,分支程序设计,例 求符号函数的值。已知片内RAM的 40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM 的41H单元中。,Y=,1 X0,0 X=0,-1 X0,RAM,40H,41H,解:此题有三个条件,所以有三个分支程序。这是一个三分支归一的条件转移问题。,X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令JZ。,

9、ORG 1000H START: MOV A, 40H JZ COMP JNB ACC.7, POST MOV A, #0FFH SJMP COMP POST: MOV A, #01H COMP: MOV 41H, A SJMP $ END,00000000,A,RAM,40H,41H,11001100,11111111,11111111,循环程序设计,特点:程序中含有可以重复执行的程序段(循环体),采用循环程序可以有效地缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读性好。,循环程序设计,组成:循环程序一般由下面四部分组成。,(1)循环初始化。位于循环程序开头,用于完成循环前的准备工

10、作,如设置各工作单元的初始值以及循环次数。,(2)循环体。循环程序的主体,位于循环体内,是循环程序的工作程序,在执行中会被多次重复使用。要求编写得尽可能简练,以提高程序的执行速度。,(3)循环控制。位于循环体内,一般由循环次数修改、循环修改和条件语句等组成,用于控制循环次数和修改每次循环时的参数。,(4)循环结束。用于存放执行循环程序所得的结果,以及恢复各工作单元的初值。,循环程序的结构,(a)先循环处理,后循环控制 (即先处理后控制)。,循环程序的结构,(b)先循环控制,后循环处理(即先控制后处理)。,循环程序按结构形式,有单重循环与多重循环。,1单重循环程序,定义:循环体内部不包括其他循环

11、的程序称为单重循环程序。,例题5 已知片内RAM 30H3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4, R5中。,RAM,00H,04H,05H,30H,3FH,例 已知片内RAM 30H3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4, R5中。,解:每次求和的过程相同,可以用循环程序实现。16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中),它们的和放在R4, R5中(R4存高8位,R5存低8位)。程序流程图如右图所示。,程序如下: ORG 1000H START: MOV R0, #30H MO

12、V R2, #10H MOV R4, #00H MOV R5, #00H LOOP: MOV A, R5 ADD A, R0 MOV R5, A CLR A ADDC A, R4 MOV R4, A INC R0 DJNZ R2, LOOP SJMP $ END,00H,A,00H,RO,00H,R2,00H,R5,00H,R4,30H,10H,当前和的低位,第N个加数,R0,当前和的高位,R4,低8位进位,R0,31H,0FH,XX,YY,例 编制程序将片内RAM的30H4FH单元中的内容传送至片外RAM的2000H开始的单元中。,解:每次传送数据的的过程相同,可以用循环程序实现。 30H4

13、FH共32个单元,循环次数应为32次(保存在R2中),为了方便每次传送数据时地址的修改,送片内RAM数据区首地址送R0,片外RAM数据区首地址送DPTR。程序流程图如右图所示。,程序如下: ORG 1000H START: MOV R0, #30H MOV DPTR, #2000H MOV R2, #20H LOOP: MOV A, R0 MOVX DPTR, A INC R0 INC DPTR DJNZ R2, LOOP SJMP $ END,例 编制程序设计50ms延时程序。 解:延时程序与MCS-51指令执行时间(机器周期数)和晶振频率fOSC有直接的关系。当fOSC=12MHz时,机器

14、周期为1s,执行一条DJNZ指令需要2个机器周期,时间为2s。 50ms 2s255,因此单重循环程序无法实现,可采用双重循环的方法编写50ms延时程序。,定义:若循环中还包括有循环,称为多重循环(或循环嵌套)。,多重循环程序,程序如下: ORG 1000H DELAY: MOV R7, #200 ; 设置外循环次数(此条指令需要1个机器周期) DLY1: MOV R6, #123 ; 设置内循环次数 DLY2: DJNZ R6, DLY2 ;(R6)1=0,则顺序执行,否则转回 DLY2继续循环,延时时间为2s123=246s NOP ; 延时时间为1s DJNZ R7,DLY1 ;(R7)

15、1=0,则顺序执行, 否则转回DLY1继续循环,延时时间为 (246211)20021=50.003ms RET ; 子程序结束 END,(1)循环程序是一个有始有终的整体,它的执行是有条件的,所以要避免从循环体外直接转到循环体内部。,(2)多重循环程序是从外层向内层一层一层进入,循环结束时是由内层到外层一层一层退出的。在多重循环中,只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部。,(3)编写循环程序时,首先要确定程序结构,处理好逻辑关系。一般情况下,一个循环体的设计可以从第一次执行情况入手,先画出重复执行的程序框图,然后再加上循环控制和置循环初值部分,使其成为一个完整的循环程序。,(4)循环体是循环程序中重复执行的部分,应仔细推敲,合理安排,应从改进算法、选择合适的指令入手对其进行优化,以达到缩短程序执行时间的目的。,循环程序时应注意的问题,查表程序设计,查表:根据存放在ROM中数据表格的项数来查找与它对应的表中值。,适用场合:主要应用于数码显示、打印字符的转换、数据转换等场合。,查表程序设计,1. 采用 MOVC A, A+DPTR 指令查表程序的设计方法,(1)建立相应的函数(设自变量为X)。,(2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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