单片机控制技术与应用(刘靖)课件4

上传人:第*** 文档编号:61114714 上传时间:2018-11-24 格式:PPT 页数:44 大小:359.50KB
返回 下载 相关 举报
单片机控制技术与应用(刘靖)课件4_第1页
第1页 / 共44页
单片机控制技术与应用(刘靖)课件4_第2页
第2页 / 共44页
单片机控制技术与应用(刘靖)课件4_第3页
第3页 / 共44页
单片机控制技术与应用(刘靖)课件4_第4页
第4页 / 共44页
单片机控制技术与应用(刘靖)课件4_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《单片机控制技术与应用(刘靖)课件4》由会员分享,可在线阅读,更多相关《单片机控制技术与应用(刘靖)课件4(44页珍藏版)》请在金锄头文库上搜索。

1、4.1 汇编语言程序设计概述 (1)汇编语言的特点 助记符指令和机器指令一一对应,所以用汇编,语言编写的程序效率高,占用存储空间小,运行速 度快,因此汇编语言能编写出最优化的程序。 使用汇编语言编程比使用高级语言困难,因为 汇编语言是面向计算机的,汇编语言的程序设计 人员必须对计算机硬件有相当深入的了解。 汇编语言能直接访问存储器及接口电路,也能,处理中断,因此汇编语言程序能够直接管理和控 制硬件设备。 汇编语言缺乏通用性,程序不易移植,各种计算 机都有自己的汇编语言,不同计算机的汇编语言 之间不能通用;但是掌握了一种计算机系统的汇 编语言后,学习其他的汇编语言就不太困难了。,(2)汇编语言的

2、语句格式 :; (3)汇编语言程序设计的步骤 建立数学模型。 确定算法。, 制定程序流程图。 确定数据结构。 写出源程序。 上机调试程序。 4.2 伪指令,伪指令是程序员发给汇编程序的命令,也称为汇 编命令或汇编程序控制指令。 Cygnal常见汇编语言程序中常用的伪指令如 下。 (1)ORG (ORiGin) 汇编起始地址命令,在汇编语言源程序的开始,通常都用一条ORG伪 指令来实现规定程序的起始地址。 在十字路口交通灯控制中,用ORG 0000H来开始 程序。,(2)END (END of assembly) 汇编终止命令 汇编语言源程序的结束标志,用于终止源程序的 汇编工作。在整个源程序中

3、只能有一条END命 令,且位于程序的最后。,在十字路口交通灯控制中,用END来结束的程 序。 (3)EQU (EQUate) 赋值命令 (4)DB (Define Byte) 定义字节命令,(5)DW (Define Word) 定义数据字命令 (6)DS (Define Stonage ) 定义存储区命令,(7)BIT位定义命令 (8)DATA数据地址赋值命令 4.3 单片机汇编语言程序的基本结构形式,(1)顺序程序 【例4-1】 三字节无符号数相加,其中被加数在 内部RAM的50H、51H和52H单元中,加数在内部 RAM的53H、5414和55H单元中,要求把相加之 和存放在50H、51

4、H和52H单元中,进位存放在位 寻址区的00H位中。,其中: 在十字路口交通灯控制中,用到MOVR0,#0FFH,MOVA,#01H等。 【例4-2】 从50个字节的无序表中查找一个关 键字“40H”。 (2)分支程序, 单分支程序 【例4-3】 变量X存放在VAR单元内,函数值Y 存放在FUNC单元中,试按下式的要求给Y赋值: Y=,本题的程序流程见图4-1(a)。 参考程序:,图4-1 例4-3的分支流程图,这个程序的特征是先比较判断,然后按比较结果 赋值,这实际是三分支归一的流程图,因此,至少要 用两个转移指令。初学者很容易犯的一个错误 是:漏掉了其中的SJMP DONE语句,因为流程图

5、 中没有明显的转移痕迹。,这个程序也可以按图4-1(b)的流程图来编写,其特 征是先赋值,后比较判断,然后修改赋值并结束。 参考程序: 多分支程序,参见图4-2。 (3)循环程序 循环程序一般由4部分组成:,图4-2 多分支程序转移, 置循环初值,即确立循环开始时的状态; 循环体(工作部分),要求重复执行的部分;, 循环修改,循环程序必须在一定条件下结束,否 则就要变成死循环; 循环控制部分,根据循环结束条件,判断是否结 束循环。 以上4个部分可以有两种组织方式。,【例4-4】 从BLOCK单元开始存放一组无符号 数,一般称为一个数据块。数据块长度放在LEN 单元,编写一个求和程序,将和存入S

6、UM单元,假 设和为不超过8位二进制数。 在置初值时,将数据块长度置入一个工作寄存器, 将数据块首地址送入另一个工作寄存器,一般称,它为数据块地址指针。每做一次加法之后,修改 地址指针,以便取出下一个数来相加,并且使计数 器减1。到计数器减到0时,求和结束,把和存入 SUM即可。 参考程序(各单元的地址是任意的):,以上程序在计数器初值不为零时是没有问题的, 但若是数据块的长度有可能为零,则将出现问 题。当R2初值为零,减1之后将为FFH,故要做256 次加法之后才会停止,显然和题意不符。若考虑 到这种情况,则可按下面的方式来编写程序,在做 加法之前,先判断一次R2的初值是否为零。整个 程序仍

7、基本套用原来的形式。,其中: CLR bit;清“0”bit位。 在十字路口交通灯控制中,用到CLR P2.4来熄灭 灯。, 将源操作数(Rn或direct)减1,结果回送到Rn寄存 器或direct中去。如果结果不为0,则转移到标号 为rel的子程序中去。允许程序员把寄存器Rn或 内部RAM的direct单元用作程序循环计数器。主 要用于控制程序循环。以减1后是否为“0”作,为转移条件,即可实现按次数控制循环。 最常见的多重循环是由DJNZ指令构成的软件延 时程序,它是常用的程序之一。 例如:50ms延时程序。 延时程序与Cygnal指令执行时间有很大的关,系。在使用12MHz晶振时,一个机

8、器周期为1s, 执行一条DJNZ指令的时间为2/3,用双重循环方 法写出下面的延时50ms的程序: 以上延时程序不太精确,它没有考虑到除 “DJNZR6,DEL2”指令外的其他指令的执行时,间。如把其他指令的执行时间计算在内,它的延 时时间为: (250+1+2)200+1=50.301ms 如果要求比较精确的延时,可按如下修改:,实际延迟时间为50.001ms。 注意 软件延时程序不允许有中断,否则将严重 影响定时的准确性。 在十字路口交通灯控制中用 Djnz R7,loop9 Djnz R6,loop8 Djnz,R5,loop7 来实现延时。 (4) 子程序的设计 子程序设计原则 子程序

9、是一种能完成某一 特定任务的程序段,其资源要为所有调用程序共,享。因此,子程序在结构上应具有独立性和通用 性。 在编写子程序时应注意以下问题。 子程序的第一条指令的地址称为子程序的入 口地址,该指令前必须有标号。,主程序调用子程序有两条: 绝对调用指令 ACALL addr11 长调用指令 LCALL addr16 注意设置堆栈指针和现场保护。 最后一条指令必须是RET指令。,子程序可以嵌套,即子程序可以调用子程序。 在子程序调用时,要注意参数传递的问题。 子程序的基本结构,4.4 Cygnal单片机汇编语言程序设计举例 (1)算术运算程序 【例4-5】 假定R2、R3和R4、R5分别存放两

10、个16位的带符号二进制数,其中R2和R4的最高位 为两数的符号位。请编写带符号双字节二进制,数的加减法运算程序,以BSUB为减法程序入口, 以BADD为加法程序入口,以R6、R7保存运算结 果。 参考程序:,(2)数制转换程序 【例4-6】 在内部RAM的hex单元中存有两位 十六进制数,试将其转换为ASCII码,并存放于asc 和asc+1两个单元中。,主程序(MAIN): 子程序(HASC):,其中,RET为子程序的返回指令 在十字路口交通灯控制中用RET来实现子程序 的返回。 (3)定时程序 有多个定时需要,可以先设计一个基本的延时程,序,使其延迟时间为各定时时间的最大公约数,然 后就以

11、此基本程序作为子程序,通过调用的方法 实现所需要的不同定时。例如要求的定时时间 分别为5s 、10s和20s并设计一个1s延时子程 序DELAY,则不同定时的调用情况表示如下:,其中: 长调用指令 LCALL addr16 在十字路口交通灯控制中用Lcalldelay1来调用延 时。 (4)查表程序,假定有44键盘,键扫描后把被按键的键码放在 累加器A中,键码与处理子程序入口地址的对应 关系为:,并假定处理子程序在ROM 64KB的范围内分 布。要求以查表方法,按键码转向对应的处理子,程序。参考程序如下: (5)数据极值查找程序 【例4-7】 内部RAM 20H单元开始存放8个无 符号8位二进制数,找出其中的最大数。,极值查找操作的主要内容是进行数值大小的比 较。假定在比较过程中,以A存放大数,与之逐个 比较的另一个数放在2AH单元中。比较结束后, 把查找到的最大数送2BH单元中。,

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

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

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