单片机程序设计.ppt

上传人:sccc 文档编号:5810499 上传时间:2023-08-22 格式:PPT 页数:35 大小:1MB
返回 下载 相关 举报
单片机程序设计.ppt_第1页
第1页 / 共35页
单片机程序设计.ppt_第2页
第2页 / 共35页
单片机程序设计.ppt_第3页
第3页 / 共35页
单片机程序设计.ppt_第4页
第4页 / 共35页
单片机程序设计.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《单片机程序设计.ppt》由会员分享,可在线阅读,更多相关《单片机程序设计.ppt(35页珍藏版)》请在三一办公上搜索。

1、第三章 单片机程序设计,3-1 程序设计简介3-2 顺序程序的设计3-3 分支程序的设计3-4 循环程序的设计3-5 常用子程序介绍3-6 查表程序的设计,项目引入,1.项目描述将09这十个数循环送P1口七段LED上显示。2.硬件电路与工作原理让学生根据任务分析硬件要求,画出具体电路,并在实验开发板上接线3.程序设计(给出控制程序),8051,START:ORG 0100H MAIN:MOV R0,#00H MOV DPTR,#TABLE DISP:MOV A,R0 MOVC A,A+ADPTR MOVP1,A ACALLDELAY INCR0 CJNER0,#0AH,DISP AJMPMAI

2、N,DELAY:MOVR1,#0FFH LOOP0:MOVR2,#0FFHLOOP1:DJNZR2,LOOP1 DJNZR1,LOOP0 RETTABLE:DB0C0H,0F9H,DB0A4H,0B0H DB99H,92H DB82H,0F8H DB80H,90H END,LED显示电路控制程序,单片机汇编语言程序设计的基本步骤如下:(1)题意分析。熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法等。(2)画出程序流程图。编写较复杂的程序,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。(3)分配

3、内存工作区及有关端口地址。分配内存工作区,要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。,3-1 程序设计简介,(4)编制汇编源程序。(5)仿真、调试程序。(6)固化程序。程序编写做到:占用存储空间少;运行时间短;程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。,按结构化程序设计思想,任何复杂程序都可由顺序结构、分支结构、循环结构等构成。,简单程序也就是顺序程序,它是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。不管多么复杂的程序,总是由若干顺序程序段所组成的。本节

4、通过实例介绍简单程序的设计方法。例3.1 4字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。,3-2 简单顺序程序的设计,(1)题意分析。题目的要求如图3.1所示。,图3.1 例3.1题意分析示意图,ORG 0000H LJMP MAIN MAIN:ORG 0080HMOVA,30HADD A,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDCA,41HMOV41H,A;第二字节加法并送结果,(2)汇编语言源程序。按照双字节加法的思路,实现4字节加法的

5、源程序如下:,MOVA,32HADDC A,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A;第四字节加法并送结果,进位 SJMP$;位在CY中END,例3.2、设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。,ORG 0000HLJMP MAINORG 0030HMAIN:MOV R0,#30HMOV R1,#40HMOV R7,#08HLOOP:MOV A,R0MOV R1,AINC R0INC R1DJNZ R7,L

6、OOPSJMP$,解:核心指令 ANL ORG 1000H MODE:MOV R0,#60H MOVX A,R0 MOV B,A ANL A,#0F0H SWAP A MOVX R0,A MOV A,B ANL A,#0FH INC R0 MOVX R0,A SJMP$END,一、分支结构与分支程序设计结构:根据不同的条件,进行相应的处理。通常用条件转移指令形成简单分支结构。如:判(A)=Z 或 NZ,转移 判(CY)=1 或 0,转移 判(bit)=1 或 0,转移 CJNE 比较不相等转移,3-3 分支程序的设计,例3.3、设a存放在累加器A中,b存放在寄存器B中,要求按下式 计算Y值,并

7、将结果Y存于累加器A中,试编写程序。a-b(a0)Y=a+b(a 0),解:本题关键是判a是正数,还是负数;由ACC.7便知。ORG 1000H BR:JB ACC.7,MINUS CLR C SUBB A,B SJMP DONE MINUS:ADD A,B DONE:SJMP END,分支程序实例 1两分支程序设计 例3.4 两个无符号数比较(两分支)。内部RAM的20H单元和30H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果显示在实验板上:若(20H)(30H),则P1.0管脚连接的LED发光;若(20H)(30H),则P1.1管脚连接的LED发光。如何让LED发光?给该引

8、脚送低电平即可。,(1)题意分析。本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),程序可以选择两个流向之中的某一个,分别点亮相应的LED。比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则XY;若CY=1,有借位,则XY。程序的流程图如图3.2所示。,图3.2 两数比较流程图,(2)汇编语言源程序。X DATA 20H;数据地址赋值伪指令DATA Y DATA 30H ORG0080H MOV A,X;(X)A CLRC;CY=0 SUBBA,Y;带借位减法,A-(Y)-CYA JC L1;CY=1,转移到L1 CLR P1.0;CY=0,(2

9、0H)(30H),点亮P1.0连接的LED SJMP FINISH;直接跳转到结束等待 L1:CLR P1.1;(20H)(30H),点亮P1.1连接的LED FINISH:SJMP$,例3.5:内部RAM30H和31H中分别存有2个8位无符号数,编程找出其中的大数存入内部32H单元中。ORG0040H MOV A,30H CLR C SUBBA,31H JC L1;CY=1,转移到L1 ADD A,31H MOV 32H,ASJMP FINISH;直接跳转到结束等待 L1:MOV A,31H MOV 32H,A FINISH:SJMP$,(3)执行结果。执行该程序之前,利用单片机开发系统先往

10、内部RAM的20H和30H单元存放两个无符号数(可以任意设定),执行后观察点亮的LED是否和存放的数据大小相一致。可以通过伟福仿真软件看到程序执行的结果。必须注意:要有初始值。,循环结构不但使程序简练,而且大大节省存储空间。循环程序包含四部分:、初始化部分(循环计数器、地址指针初始化)、循环处理部分(主体,需要重复执行的部分)、循环控制部分(修改地址指针、修改变量、检测循环结束条件)、循环结束部分(对结果分析、处理,存放结果),3-4 循环程序的设计,先处理,后判断:,先判断,后处理:,循环有:单循环、多重循环。循环次数已知,可用计数器控制循环次数;循环次数未知,按问题条件控制循环是否结束。,

11、1、单循环程序(1)循环次数是已知的程序例3.6、已知片内RAM的40H单元开始依次存放10个8位无符号二进制数,要求找出其中的最大数存入3FH单元中,试编程。解:先将第一个数和第二个数比较,大者送入累加器A中,然后拿累加器中A的数与第三个数比较,依次比较下去。最后累加器A中剩下的是最大数。比较大小用减法指令,注意恢复累加器A中的原来的大数。,START:MOV R2,#09H;循环计数初值(循环次数已知)MOV R0,#40H;地址指针初值 MOV A,R0;取数 LOOP:INC R0;调整地址指针 CLR C SUBB A,R0 JC NEXT1;CY1(后者大)转NEXT1 ADD A

12、,R0;恢复A中的原来大数 SJMP NEXT2 NEXT1:MOV A,R0;大数送给A NEXT2:DJNZ R2,LOOP;控制循环次数 MOV 3FH,A SJMP$,P101页延时程序例子,延时50毫秒的子程序。DEL:MOV R7,#200DEL1:MOV R6,#123 NOP DEL2:DJNZ R6,DEL2;2001232us 49.2ms DJNZ R7,DEL1 RET,DEALY:MOV R7,#20DEL3:MOV R6,#123DEL2:MOV R5,#200 NOP DEL1:DJNZ R5,DEL1 DJNZ R6,DEL2 DJNZ R7,DEL3 RET,

13、约为延时1秒子程序,START:MOVR2,#08H;设置循环次数 MOVA,#0FEH;从P1.0P1.7使LED逐;个亮过去NEXT:MOVP1,A;点亮LED LCALL DEALY RL A DJNZR2,NEXT;次数减1,不为零,继续;点亮下一个LED SJMPSTARTDEALY:MOV R7,#20H,P1口循环点亮发光二极管程序,3-5 常用子程序介绍,步骤:1、确定子程序名称,即入口标号。2、确定子程序的输入/输出参数。3、确定所用的寄存器和存储单元,以便现场保护。断点保护由指令自动完成。4、确定子程序的算法,编写源程序。,例3.7:多字节BCD数加法。子程序:ADDB:P

14、USH PSW PUSH ACC CLR CLOOP:MOV A,R0 ADDC A,R1 DA A MOV R0,A INC R0 INC R1 DJNZ R2,LOOP POP ACC POP PSW RET,4字节BCD数相加主程序:MOVR0,#20HMOVR1,#30HMOVR2,#04HLCALLADDB,3-6 查表程序,1、查表用指令 MOVC A,A+DPTR MOVC A,A+PC,例3.8:用查表发求(09)的平方MOV DPTR,#TABMOVC A,A+DPTRRETTAB:DB 00,01,04,09,16DB 25,36,49,64,81ADD A,#1MOVC A,A+PCRETTAB:DB 00,01,04,09,16DB 25,36,49,64,81,本章小结,1、汇编程序的三种基本结构和各自特点2、分支程序常用的判断语句3、循环程序设计的思路和组成4、延时程序设计的思路,作业,P1182、5、7、8、9、16,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号