2014单片机应用技术铁道版课件教学课件:程序结构设计知识

上传人:繁星 文档编号:88218532 上传时间:2019-04-21 格式:PPT 页数:50 大小:533KB
返回 下载 相关 举报
2014单片机应用技术铁道版课件教学课件:程序结构设计知识_第1页
第1页 / 共50页
2014单片机应用技术铁道版课件教学课件:程序结构设计知识_第2页
第2页 / 共50页
2014单片机应用技术铁道版课件教学课件:程序结构设计知识_第3页
第3页 / 共50页
2014单片机应用技术铁道版课件教学课件:程序结构设计知识_第4页
第4页 / 共50页
2014单片机应用技术铁道版课件教学课件:程序结构设计知识_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《2014单片机应用技术铁道版课件教学课件:程序结构设计知识》由会员分享,可在线阅读,更多相关《2014单片机应用技术铁道版课件教学课件:程序结构设计知识(50页珍藏版)》请在金锄头文库上搜索。

1、,项目1信号灯控制,单片机应用技术精品课程组,单片机应用技术,本讲主要内容,6 项目考核,【教学目标】,1、终极目标: 制作一个彩灯闪烁的单片机控制系统。 2、促成目标: (1) 了解单片机的基本概念及MCS系列单片机结构特点;了解典型单片机系列的基本情况;了解MCS系列单片机的发展及应用领域; (2) 了解MCS-5l单片机内部结构和功能; (3) 掌握MCS-5l单片机引脚功能以及工作方式和单片机的存储器结构的特点、性能; (4) 熟练掌握单片机的指令系统特点; (5) 理解单片机应用系统开发的基本方法和设计流程;掌握MCS系列单片机的开发工具;掌握编程软件、编程器、虚拟设备和仿真器的基本

2、操作方法; 了解单片机开发过程中的操作技巧和注意事项; (6) 掌握简单的顺序、分支、循环程序结构和子程序的编写和调用方法; (7) 掌握延时子程序等典型程序的设计方法; (8) 初步掌握单片机应用系统分析和软硬件设计的基本方法,建立单片机系统设计的基本概念;,【第五部分】程序结构设计知识,汇编语言程序有四种结构形式,即:顺序结构、分支结构、循环结构和子程序结构。 一、循环程序结构设计 在程序设计中,只有简单程序和分支程序是不够的。因为简单程序,每条指令只执行一次,而分支程序则根据条件的不同,会跳过一些指令,执行另一些指令。它们的特点是,每一条指令至多执行一次。在处理实际事务时,有时会遇到多次

3、重复处理的问题,用循环程序的方法来解决就比较合适。循环程序中的某些指令可以反复执行多次。采用循环程序,使程序缩短,节省存储单元。重复次数越多,循环程序的优越性就越明显。但是程序的执行时间并不节省。由于要有循环准备、结束判断等指令,速度要比简单程序稍慢些。 循环程序一般由五部分组成:,【相关知识】,1、初始化部分:为循环程序做准备。如:设置循环次数计数器的初值,地址指针置初值,为循环变量赋初值等。 2、处理部分:为反复执行的程序段,是循环程序的实体。 3、修改部分:每执行一次循环体后,对指针作一次修改,使指针指向下一数据所在位置,为进入下一轮处理作准备。 4、控制部分:根据循环次数计数器的状态或

4、循环条件,检查循环是否能继续进行,若循环次数到或循环条件不满足,应控制退出循环,否则继续循环。 通常2、3、4部分又称为循环体。,【相关知识】,5、结束部分:分析及存放执行结果。 循环程序的结构一般有两种形式: (1)先进入处理部分,再控制循环。即至少执行一次循环体。如图1.40(a)所示。 (2)先控制循环,后进入处理部分。即先根据判断结果,控制循环的执行与否,有时可以不进入循环体就退出循环程序。如图1.40(b)所示。 循环结构的程序,不论是先处理后判断,还是先判断后处理,其关键是控制循环的次数。根据需要解决问题的实际情况,对循环次数的控制有多种,循环次数已知的,用计数器来控制循环,循环次

5、数末知的,可以按条件控制循环,也可以用逻辑尺控制循环。,【相关知识】,循环程序又分单循环和多重循环。下面举例说明循环程序的使用。 1、单循环程序 (1)循环次数已知的循环程序,(a) (b) 图1.40 循环流程图,【相关知识】,【练一练】 工作单元清零:在程序设计时,有时需要将存储器中的部分地址作为工作单元,存放程序执行的中间值和结果,此时常需要对这些工作单元清零。 如:将40H为起点的8个单元清“0” ORG 0000H CLEAR: CLR A ;A清0 MOV R0,#40H ;确定清0单元起始地址 MOV R7,#08 ;确定要清除的单元个数 LOOP: MOV R0,A ;清单元

6、INC R0 ;指向下一个单元 DJNZ R7,LOOP ;控制循环 END 此程序的前2-4句为设定循环初值,5-7句为循环体。 以上是内部RAM单元清零,也可清外部RAM单元。,【相关知识】,【练一练】 设有50个外部RAM单元要清“0”,即为循环次数存放在R2寄存器中,其首址存放在DPTR中,设为2000H。 程序如下: ORG 0000H MOV DPTR,#2000H CLEAR: CLR A MOV R2,#32H ;置计数值 LOOP: MOVX DPTR,A INC DPTR ;修改地址指针 DJNZ R2,LOOP ; 控制循环 END 本例中循环次数是已知,用R2作循环次数

7、计数器。用DJNZ指令修改计数器值,并控制循环的结束与否。 此程序也可写成通用子程序形式: CLEAR: CLR A LOOP: MOVX DPTR,A,【相关知识】,INC DPTR ;修改地址指针 DJNZ R2,LOOP ;控制循环 RET 使用时只要给定入口参数及被清零单元个数,调用此子程序就行: ORG 0000H MOV DPTR,#2000H MOV R2,#50 ACALL CLEAR SJMP $ CLEAR:CLR A LOOP: MOVX DPTR,A INC DPTR ;修改地址指针 DJNZ R2,LOOP ;控制循环 RET END 入口参数是由实际需要而定,若要清

8、4000H为起点的100个单元,只要改动前面两句就行。,【相关知识】,【练一练】 多个单字节数据求和:已知有n个单字节数据,依次存放在内部RAM 40H单元开始的连续单元中。要求把计算结果存入R2,R3中(高位存R2,低位存R3)。 程序如下: ORG 8000H SAD: MOV R0,#40H ;设数据指针 MOV R5,#NUN ;计数值0AHR5 SAD1:MOV R2,#0 ;和的高8位清零 MOV R3,#0 ;和的低8位清零 LOOP:MOV A,R3 ;取加数 ADD A,R0 MOV R3,A ;存和的低8位 JNC LOP1 INC R2 ;有进位,和的高8位+1 LOP1

9、:INC R0 ;指向下一数据地址,【相关知识】,DJNZ R5,LOOP RET NUN EQU 0AH END 上述程序中,用R0作间址寄存器,每作一次加法,R0加1,数据指针指向下一数据地址,R5为循环次数计数器,控制循环的次数。 (2)循环次数末知的循环程序。 以上介绍的几个循环程序例子,它们的循环次数都是已知的,适合用计数器置初值的方法。而有些循环程序事先不知道循环次数。不能用以上方法。这时需要根据判断循环条件的成立与否,或用建立标志的方法,控制循环程序的结果。,【相关知识】,【练一练】 测试字符串长度:设有一串字符依次存放在从50H单元开始的连续单元中,该字符串以回车符为结束标志,

10、测得的字符串长度存入R2中。 测字符串长度程序是将该字符串中的每一个字符依次与回车符相比,若比较不相等,则统计字符串长度的计数器加1。继续比较,若比较相等,则表示该字符串结束,计数器中的值就是字符串的长度。 程序如下: ORG 0000H CONT:MOV R2,#00H ;初始长度设置 MOV R0,#50H ;数据指针R0置初值 NEXT:CJNE R0,#0DH,LOOP RET LOOP:INC R0 INC R2 SJMP NEXT END,【相关知识】,待测字符以ASCII码形式存放在RAM中,回车符的ASCII码为0DH,程序中用一条CJNE R0,#0DH,LOOP指令实现字符

11、比较及控制循环的任务,当循环结束时,R2的内容为字符串长度。 2、循环程序在数据传送方面的应用 数据传送在程序编写中占有很重要的位置,编程离不开数据的处理和传送,初编程时往往是不知道数据怎么处理。例如:一个简单的 1+2 程序,首先应将1与2送到加法指令所规定的单元中,再用一个加法指令将两数相加,加后的结果存放在哪里,全由编写程序时安排好存储单元,若程序运行成功,结果一定在你编程时规定的那个单元,若那个单元被用或被其它的程序占了,数就存不进,读不出。传数的种类很多,数据传送指令也较多,除了用不同的寻址方式,采用不同的传送方法外,就传送的最终目的而言可分为:内部RAM传到内部RAM(简称内传内)

12、、内部RAM传送到外部存储器(简称内传外)、外部存储器传到内部RAM(简称外传内)、外部存储器传到外部存储器(简称外传外)。数据传送程序的编写都离不开循环程序,下面讲解数据传送程序的编写方法。,【相关知识】,【练一练】 将内部RAM以40H为起始地址的8个单元中的内容传到以60H为起始地址的8个单元中。 此程序的编写要用到间接寻址方法,它的基本编程思路是先读取一个单元的内容,将读取的内容送到指定单元,再循环送第二个,反复送,直到送完为止,程序如下: ORG 0000H MOV R0,#40H ;定内部RAM取数单元的起始地址 MOV A,R0 ;读出数送A暂存 MOV R1,#60H ;定内部

13、RAM存数单元的起始地址 MOV R1,A ;送数到60H单元 MOV R7,#08 ;定送数的个数 LOOP: INC R0 ;取数单元加1,指向下一个单元 INC R1 ;存数单元加1,指向下一个单元 MOV A,R0 ;读出数送A暂存 MOV R1,A ;送数到新单元 DJNZ R7,LOOP ;8个送完了吗?未完转到LOOP继续送 END ;送完了顺序执行,结束。,【相关知识】,根据此程序,自已编出程序流程图,编程与程序流程图有一定距离,编程开始前弄清程序要完成的任务是什么?然后安排好数据存储单元,采用什么指令,理顺思路。开始编程序要全力以赴,不让任何人打扰,不中断思路,一气呵成。编程

14、有很大的灵活性,很高的技巧,首先应该多看实例,有些指令的用法比较特殊专一,要记下来,如以上程序,还有查表程序,散转程序等等。常用的就是那么几条,编程方法也就那么几种,掌握了编程基本方法可脱离书本自己编,先编简单程序,再编复杂程序,先编短程序,后编长程序。编好的程序又可作为以后程序中的子程序,持之以恒,你就会成为编程高手。 编完的程序,是否正确,要在仿真软件中调试,调试方法前面活动四中已作全面介绍。调试此程序时要打开WAVE仿真软件的数据窗口(Data View),在窗口中的40H为起点的8个单元中送数,首先全速运行程序,看所有数据是否传到60H为起点的8个单元中,若不正确,单步运行程序,看程序

15、的每一步是否正确,若还不正确,再反复修改,直到正确为止。,【相关知识】,【练一练】 将内部RAM以40H为起始地址的8个单元中的内容传到外部存储器以2000H为起始地址的8个单元中。 此程序与例10的区别就是传到外部存储器,注意外部存储器的地址是16位地址,传送16位地址的数有专门的指令。 读(外部传内部)外部存储器单元的方法是: MOV DPTR,#2000H MOVX A,DPTR 写(内部传外部)外部存储器单元的方法是: MOV DPTR,#2000H MOVX DPTR,A 这是专用语句要记牢,不能错,有了这些知识后我们可编写程序如下: ORG 0000H MOV R0,#40H ;定内部RAM取数单元的起始地址 MOV A,R0 ;读出数送A暂存 MOV DPTR,#2000H ;定外部存储器存数单元的起始地址 MOVX DPTR,A ;送数到2000H单元 MOV R7,#08 ;定送数的个数,【相关知识】,LOOP: INC R0 ;取数单元加1,指向下一个单元 INC DPTR ;存数单元加1,指向下一个单元 MOV A,R0 ;读出数送A暂存 MOVX DPTR,A ;送数到新单元 DJNZ R7,LOOP ;8个送完了吗?未完转到LOOP继续送 END ;送完了顺序执行,结束。 程序初步编好后,在仿真软件中调

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

当前位置:首页 > 办公文档 > 工作范文

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