单片机应用及控制技术第5章程序设计

上传人:M****1 文档编号:568811959 上传时间:2024-07-27 格式:PPT 页数:22 大小:266KB
返回 下载 相关 举报
单片机应用及控制技术第5章程序设计_第1页
第1页 / 共22页
单片机应用及控制技术第5章程序设计_第2页
第2页 / 共22页
单片机应用及控制技术第5章程序设计_第3页
第3页 / 共22页
单片机应用及控制技术第5章程序设计_第4页
第4页 / 共22页
单片机应用及控制技术第5章程序设计_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《单片机应用及控制技术第5章程序设计》由会员分享,可在线阅读,更多相关《单片机应用及控制技术第5章程序设计(22页珍藏版)》请在金锄头文库上搜索。

1、第第5章章 程序设计程序设计上海电子信息职业技术学院上海电子信息职业技术学院 何永艳主编何永艳主编程序设计就是利用计算机所能识别的语言把解决问题的步骤描述出来,也就是编写程序,在MCS51型单片机的实际应用中,相当多的程序采用汇编语言编写。因此汇编语言程序设计不仅关系到系统的特性和效率,还与系统的硬件有密切的关系 5.1 程序设计的步骤程序设计的步骤汇编语言程序设计有以下几个步骤:1.分析问题,明确所要解决问题的要求,确定算法或解题思路2.画流程图流程图又称为程序框图,它用各种图形、符号、指向线等来说明程序的执行过程,能充分表达程序的设计思路,可帮助设计程序、阅读程序和查找程序中的错误。常用的

2、流程图符号如下: 置位P1.0位程序返回调用延时子程序清零P1.0位调用延时子程序主程序结束图5.1 灯闪烁流程图图2.1 用单片机控制单个LED的电路原理图如图2.1所示的电路图可以让LED灯闪烁。现在用流程图来把这段程序的主程序部分画出来 3.编写源程序根据流程图编写源程序,如上。编写源程序的时候要注意以下3点:1)合理分配存储器单元和了解I/O接口地址。2)按功能设计程序,明确各程序之间的相互关系。3)用注释行说明程序,便于阅读和修改调试和修改4.汇编和调试对已编写好的程序,先进行汇编。再汇编过程中,还可能会出现一些错误,需要对源程序进行修改。汇编工作完成后,就可上机调试运行。 5.2

3、汇编语言程序的书写格式汇编语言程序的书写格式程序书写的格式又两种形式:1.完整的程序格式形式。2.子程序的形式5.3 程序设计方法程序设计方法顺序程序是最简单的一种程序结构,又叫直线程序,它是按照顺序依次执行的程序,也是所有程序设计中最基本、最重要的程序,因为编写程序就是按照逻辑上的顺序来编写的。主要用数据传递类指令和数据运算类指令来实现。主要特点:完全按程序书写顺序,从第一条语句开始顺序执行,直至最后一条语句。5.3.1 顺序程序顺序程序解:先画出流程图如图5.2根据流程图编写源程序如下 : ORG 0040HMOV A,20H ADD A,30H MOV R0,A CLR A ADDC A

4、,#00H MOV R0,A MOV A,30H ADD A,R1 MOV R1,A CLR A ADDC A,R0 MOV R0,A END图5.2 例5.1程序流程图【例例5.1】 将内部将内部RAM中中20H单元和单元和30H单元单元的无符号数相加存入的无符号数相加存入R0(高位)和(高位)和R1(低位)(低位)中。中。5.3.2 循环程序循环程序在许多实际应用中,往往需要多次反复执行某种相同的操作,而只是参与操作的操作数不同,这时就可采用循环程序结构。循环程序常用于求和、统计、寻找、排序、延时、求平均值等程序。循环程序可以缩短程序,减少程序所占的内存空间。主要特点:可对某程序段多次重复

5、执行。比如LED灯闪烁程序的延时子程序:例4.11中的8个LED循环点亮,亮的时间就是用循环程序结构的,也就是一个延时子程序,循环控制 ?循环工作循环结束循环初始化YN图5.4 循环结构程序的流程图如下:DELAY:MOV R7,#250 D1: MOV R6,#250 D2: DJNZ R6,D2 DJNZ R7,D1 RET 【例5.3】从22H单元开始存放一个数据块,其长度存放在20H单元中。将数据块求和,要求将和存放入21H单元中(和不超过255)。解:用计数器控制的单重循环程序源程序如下 ORG 0040H CLR A ;A清0MOV R2,20H ;置数据块长度于R2中MOV R1

6、,22H;置数据块首地址 LOOP:ADD A,R1 ;加数INC R1 ;依次取数据块的地址DJNZ R2,LOOP ;循环控制,判断求和的数据块个数到了吗?没到,继续执行求和MOV 21H,A ;求和的数据块个数到了,把结果放入21HEND 【例5.6】 根据图4.4的线路设计灯亮程序,要求8只发光二极管间隔分二组,即1、3、5、7为一组,0、2、4、6为一组,二组交叉轮流发光,反复循环不止,变换时间为100ms,已知时钟频率为6MHz。 源程序如下:ORG 0040H MOV A,#55H L1:MOV P1,A ;初始化为1、3、5、7位先亮 LCALL DELAY ;亮100 ms

7、CPL A ;各位取反 SJMP L1 ;反复循环DELAY:MOV R0,#100 ;毫秒数R0DL2:MOV R1,#250 ;1ms延时的预定值250R1DL1:DJNZ R1,DL1 ;1ms延时循环 DJNZ R0,DL2 ;毫秒数未到,继续RET ;子程序返回END5.3.3 分支程序分支程序在许多情况下,需要根据不同的条件转向不同的处理程序,这种结构的程序称为分支程序分支程序。也就是本条指令执行完后并不是象顺序结构那样执行下一条指令,而是看本条指令所给的条件是否满足,如果满足条件就跳转到其他的指令,如果不满足就顺序执行。条件满足?N影响条件Y处理段条件满足?N影响条件Y处理1处理

8、2图 5.7 单分支结构的流程图主要特点:主要特点:能根据条件进行判断,并根据判断结果选择对应的程序入口。 在分支结构的程序设计中必须注意:执行一条判断指令只可以形成两路分支,如果要形成多路分支就必须进行多次判断,也就是多条指令连续判断。例4.1 的源程序就是一个单分支程序。 【例5.8】如图4.4所示,单片机P1端口接8只LED,每次点亮两只,先从右边向左边移动点亮;再从左边向右边移动点亮,然后闪烁两次,重复循环。程序流程图如图5.8所示源程序如下:源程序如下: START: MOV R0, #7 ;设左移;设左移7次次 MOV A,#0FCH ;存入开始亮灯位置;存入开始亮灯位置 LOOP

9、: MOV P1, A ;传送到;传送到P1并输出并输出 ACALL DELAY ;调延时子程序;调延时子程序 RL A ;左移一位;左移一位 DJNZ R0, LOOP ;判断移动次数;判断移动次数 MOV R1, #7 ;设右移;设右移7次次 LOOP1: RR A ;右移一位;右移一位 MOV P1, A ;传送到;传送到P1并输出并输出 ACALL DELAY ;调延时子程序;调延时子程序 DJNZ R1, LOOP1 ;判断移动次数;判断移动次数 MOV R2, #3 ;设置闪烁次数;设置闪烁次数 MOV A, #00H ;设初始值;设初始值 LOOP2: MOV P1, A ;P1

10、端口灯亮端口灯亮 ACALL DELAY ;调用延时子程序;调用延时子程序 CPL A ;A取反值取反值 DJNZ R2, LOOP2 ;判断闪烁次数;判断闪烁次数 JMP START ;重新设定显示值;重新设定显示值 DELAY: MOV R5, #25 DLY1: MOV R6, #100 DLY2: MOV R7, #100 DJNZ R7, $ DJNZ R6, DLY2 DJNZ R5, DLY1 RET ;子程序返回;子程序返回 END ;程序结束;程序结束图5.8 程序流程图单分支流程单分支流程【例5.10】 设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编程

11、统计其中正数、负数、零的个数。解:在本题中设正数、负数、零的个数分别存放在30H、31H、32H单元中。源程序如下:源程序如下: ORG 0040H MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 MOV DPTR,#2000H ;设数据区首地址;设数据区首地址 MOV R1,#100 ;设数据区长度;设数据区长度 L4: MOVX A,DPTR INC DPTR CJNE A,#0,L1 INC 32H SJMP L2 L1: JC L3 INC 30H SJMP L2 L3:INC 31H L2:DJNZ R1,L4 SJMP $ END多分支流程多分支流程5.3.4 查

12、表程序查表程序单片机应用系统中,查表程序是一种常用的程序,它可以完成数据计算、转换、补偿等各种功能,具有程序简单、执行速度快等优点。在80C51中,数据表格是存放在程序存储器ROM中,而不是在RAM中。编程时,可以通过DB伪指令将表格的内容存入ROM中。查表程序查表程序解:源程序如下:ORG 0040HMOV A,R0;把R0中的内容送入A中ANL A,#0FH;屏蔽A中的高4位(低4位保持不变)MOV DPTR,#TAB;表头地址放入DPTR中MOVC A,A+DPTR;MOV R0,ASJMP $TAB:DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39

13、H,41H,42H,43H,44H,45H,46HEND【例例5.13】 已知已知R0中存放着一个十六进制数(中存放着一个十六进制数(0F中的中的某一个)。试编写程序求其对应的某一个)。试编写程序求其对应的ASCII码。码。【例5.15】 如图4.4所示,要求利用查表的方法,使端口P1的LED先一次点亮1只跳跃左移,点亮顺序为P1.0、P1.2、P1.4、P1.6;接着一次点亮2只,从左向右移动2次;一次点亮3只,左右移3次;然后4只灯P1.0、P1.2、P1.4、P1.6 与P1.1、P1.3、P1.5、P1.7交互点亮4次;最后8只灯闪烁6次,不断循环。 图5.10 程序流程图源程序如下:

14、源程序如下:ORG 0040HSTART:MOV DPTR,#TABLE;存表;存表LOOP:CLR A;A清清MOVC A,A+DPTR;取表代码;取表代码CJNE A,#01H,LOOP1;不是;不是01H,循环,循环JMP START;重新设定;重新设定LOOP1:MOV P1,A;将;将A值送入值送入P1口输出口输出ACALL DELAY;调用延时子程序;调用延时子程序INC DPTR;数据指针加;数据指针加1JMPLOOP;跳转到;跳转到LOOP处处DELAY:MOV R5,#25;延时;延时0。5SDEL1: MOV R6,#100DLE2:MOV R7,#100DJNZR7,$D

15、JNZR6,DEL2DJNZR5,DEL1RET;延时子程序结束;延时子程序结束;单灯向左跳移;单灯向左跳移1位控制码位控制码TABLE:DB01H,04H,10H,40H;2灯向右移动灯向右移动2次控制码次控制码DB0C0H,60H,30H,18HDB0CH,06H,03HDB0C0H,60H,30H,18HDB0CH,06H,03H;3灯左右移动灯左右移动3次控制码次控制码DB 07H,0E0H,07H,0E0H;4灯交互移动灯交互移动4次控制码次控制码DB 55H,0AAH,55H,0AAH;8只灯闪烁只灯闪烁6次控制码次控制码DB 00H,0FFH,00H,0FFHDB 00H,0FF

16、H,00H,0FFHDB 00H,0FFH,00H,0FFHDB01H;结束码;结束码END ;程序结束;程序结束 5.3.5 散转程序散转程序散转程序是一种并行多分支程序。它根据系统的某种输入或运算结果,分别转向各个处理程序。与分支程序不同的是,散转程序一般采用JMP A+DPTR指令,根据输入或运算结果,确定A或DPTR的内容,直接跳转到相应的分支程序中去。而分支程序一般是采用条件转移或比较转移指令实现程序的跳转。 【例例5.16】 根据根据A中的内容选择相应的程序段执行。中的内容选择相应的程序段执行。STSRT:MOV DPTR, #TAB;指令表首址送DPTRCLRC;RLC A;A的值乘以2JNCAA ;INCDPH;超过256在DPH加1AA:JMP A+DPTR;散转指令TAB:AJMPLOOP0;无条件转移指令表AJMPLOOP1AJMP LOOPNLOOP0:;分支程序0LOOP1:;分支程序1

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

最新文档


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

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