单片机-程序的基本结构课件_第1页
单片机-程序的基本结构课件_第2页
单片机-程序的基本结构课件_第3页
单片机-程序的基本结构课件_第4页
单片机-程序的基本结构课件_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MCS—51单片机2.7程序的基本结构MCS—51单片机2.7程序的基本结构12.7

程序的基本结构一、绪论

二、基本结构1.顺序结构2.分支结构3.查表结构4.子程序结构5.循环结构2.7程序的基本结构一、绪论二、基本结绪论在汇编语言程序设计中,普遍采用结构化程序设计方法。任何复杂的程序都可由顺序结构、分支结构、循环结构、子程序结构等程序构成。结构程序设计的特点是程序的结构清晰、易于读写和验证、可靠性高。绪论在汇编语言程序设计中,普遍

不管多么简单或复杂的程序,总离不开若干顺序程序段所组成的。如图1所示,A框和B框分别代表不同的程序段,是A、B顺序执行。它是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。

图2-7-1顺序程序结构

ABab不管多么简单或复杂的程序,总离不开若干顺几种基本结构顺序结构分支结构查表结构子程序结构循环结构基本结构顺序结构分支结构查表结构子程序结构循环结构几种基本结构顺序结构分支结构查表结构子程序结构循环结构基本结顺序结构

程序段A

程序段B

顺序结构程序:是一种最简单、最基本的程序,按照程序编写的顺序逐条依次执行,直到程序结束。这是程序的最基本的形式,任何程序都离不开这种形式。顺序结构顺序结构程序段A程序段B

【例1】将片内RAM的20H单元中的压缩BCD码拆成两个ASCII码存入21H、22H单元。高4位转换后存在21H单元,低4位转换后存在22H单元。图1-2压缩BCD码转换成两个ASCII字符图方法一分析:两个BCD码拼装在一个单元内叫压缩BCD码。设20H内为压缩BCD码59,22H通过变换BCD码“5”为ASCII码“35”;BCD码“9”变换为ASCII码“39”。【例1】将片内RAM的20H单元中的压缩BCD码程序入口:20H程序出口:21H、22H根据分析图设计程序:MOVA,20HANLA,#0FH;屏蔽高4位ADDA,#30H;得到低4位ASCII码MOV21H,A;个位ASCII码送21HANL20H,#0F0H;屏蔽低4位MOVA,20H;送ASWAPA;高位交换到低位ADDA,#30H;得到高4位ASCII码MOV22H,A;十位ASCII码送22H程序入口:20H程序出口:21H、22H分支结构顺序结构程序只能解决一些简单的算术、逻辑运算、传送操作等。实际控制问题往往要求计算机能根据给定的条件进行判断,再选择不同的处理路径,从而表现出某种智能。程序要求改变程序执行顺序,即程序的流向有两个或两个以上时,这种程序结构称为分支程序结构,分支程序的特点是程序中包含有转移指令。根据分支出口的不同分为简单分支程序和多路分支程序。分支结构顺序结构程序只能解决一些简单的算术、分支结构

程序段A

程序段B分支结构:程序中含有转移指令分支结构无条件分支有条件分支单分支结构多分支结构条件YN分支结构分支结构程序段A程序段B分支结构:程

程序段2条件满足吗?YN开始

程序段1

程序段3

结束分支程序2开始

程序段1

结束

数字关键码

分支程序3分支程序1

程序段2

(b)多分支结构分支程序的两类结构(a)单分支结构程序段2条件满足吗?YN开始程序段1

解:单片机中负数一般用补码表示,只要能够判断x=0、x<0和x>0便能够方便实现函数。采用JZ指令进行判断,程序流程图如图2-1所示。图2-7-2程序流程图

解:单片机中负数一般用补码表示,只要能够判断x=0、x<

START:MOVA,30HJZOUT;x=0,转移ANLA#80H;x≠0,判断正负号JZOUT1;x小于0,y=xMOV31H,30H

SJMPOK

OUT:MOV31H,#3;x=0,则y=3OUT1:MOVA,#5;x>0,y=5+xADDA,30HMOV31H,AOK:SJMP$START:MOVA,30H查表结构MCS-51汇编指令系统提供了两条专用的查表指令:MOVCA,@A+DPTR基址寄存器DPTR能提供16位基址,因此查表范围可达64KB空间,且表格的大小和位置也可在64KBROM中任意安排。MOVCA,@A+PC表格只能放在该指令的256个地址单元内,地址需要调整。查表是把事先安排的数据按照一定的顺序编制成表格存放在ROM中,然后根据输入的数据,从表格中查出所需的结果。查表可以将复杂的问题变得简单。查表结构MCS-51汇编指令系统提供了两条专用的查表指令:M

【例3】根据项目一流水灯电路电路,采用查表方法实现相同功能。解:用查表法实现流水灯,要设计一个LED点亮码表格,根据8个LED点亮次序,制作数码表格,为了循环点亮LED,在点亮第8个LED后返回点亮第1个LED,表格可以设置一个结束标志码FFH。当取显示码为结束标志FFH时,返回取第1个显示码。【例3】根据项目一流水灯电路电路,采用查表方法实现ORG0000HLJMPSTRATORG0100HSTRAT:MOVR1,#0

;

R1用于计数,R1清零

MOVDPTR,#TAB

;设置表地址指针GO:MOVA,R1LOOP:MOVCA,@A+DPTR

;查表取显示码

CJNEA,#0FFH,OK

;不是结束码显示码送P0口

SJMPSTRAT

;是结束码,重新开始

OK:MOVP0,A

LCALLDEL

;延时1s

INCR1

;循环左移一次

SJMPGO(此处略延时程序DEL)

TAB:DB0FEH,0FDH,0FBH,0F7H,0EFH

DB0DFH,0BFH,7FH,0FFH

;LED点亮码,0FFH为结束码

..........

ENDORG0000H

可以被调用的程序段称为子程序。在实际问题中,常常会遇到在一个程序中有许多相同的运算或操作,例如多字节的加、减、字符处理等。如果每遇到这些运算和操作,都从头做起,则使程序非常繁琐且浪费内存。因此在实际应用中,通常把这些多次使用的程序段,按一定结构编好,存放在内存中,当需要时,程序可以去调用这些独立的程序段。因此,字程序就是一种能完成某一特定任务的程序段。子程序可以被调用的程序段称为子程序。在实际问题中,子程序的设计1、给每个子程序赋予名字2、现场保护与恢复3、参数的正确传递4、子程序说明子程序的设计1、给每个子程序赋予名字2、现场保护与恢复3、参在编写子程序时应注意以下问题1、子程序应有入口地址(用标号)2、主程序调用子程序两个子程序调用指令:(1)绝对调用指令:ACALLaddr11(2)长调用指令:LCALLaddr16在编写子程序时应注意以下问题1、子程序应有入口地址(用标号)在编写子程序时应注意以下问题3、注意设置堆栈指针和现场保护4、最后一条指令必须是RET指令5、子程序可以嵌套,即子程序可以调用子程序(最多8层)6、在子程序调用时,还要注意参数传递的问题在编写子程序时应注意以下问题3、注意设置堆栈指针和现场保护4子程序的基本结构MAIN:┇ ;IN为主程序或调用程序标号┇

LCALLSUB;调用子程序SUB ┇┇SUB: PUSHPSW ;现场保护

PUSHACC

子程序处理程序段

POPACC ;现场恢复

POPPSW RET ;最后一条指令必须为RET子程序的基本结构MAIN:┇ ;I【例4】编写一个通用子程序,实现N个单字节无符号数之和(N<100H)。调用该子程序完成将片内部30H~5FH中存放的单字节无符号数求和,结果存入60H、61H单元中(高位在前)。【例4】编写一个通用子程序,实现N个单字节无符号数之和

ORG 0100HSUB2: PUSH PSW ;保护现场

MOV @R1,#0 ;目的单元清0 INC R1 MOV @R1,#0LOOP: MOV A,@R0 ;取数

ADD A,@R1 ;求和

MOV @R1,A ;存和的低字节数

DEC R1 ;修改指针,指向和的高位地址

CLR A ADDC A,@R1 ;取进位位

MOV @R1,A ;存和的高字节数

INC R1 ;修改指针,指向和的低位地址

INC R0;修改指针,指向下一个单元

DJNZ R2,LOOP POP PSW ;恢复现场

RET(1)子程序如下: ORG 0100H(1)子程序如 ORG 0000HMAIN: MOV R0,#30H ;设置R0为入口指针寄存器

MOV R1,#60H ;设置R1为出口指针寄存器

MOV R2,#2FH ;设置R2传递字节数

ACALL SUB2 ……TOEND:END(2)子程序如下: ORG 0000H(2)子程序如下:在应用程序中,有时需要多次反复执行相同的操作,只是操作的操作数不同,这时就可以采用循环程序结构。循环程序可以显著缩短程序,减少程序所占用的存储空间,使程序结构大大优化。循环结构循环程序一般包括以下几部分:(1)设置循环初值在进入循环之前,要设置循环次数、循环体工作单元的

初值等。(2)循环处理循环体是循环程序需要反复执行的部分,是循环程序结构的

主体部分。(3)循环修改每执行一次循环,要对参数进行修改,使指针指向下一数据

所在的位置,为进入下一轮循环作准备。(4)循环控制应用程序的条件判断循环程序是否结束。在应用程序中,有时需要多次反复执行相同

循环程序有两种基本结构,图2-7-3循环程序基本结构一种是先执行后判断,一种是先判断后执行。循环程序有两种基本结构,图2-7-3循环【例5】设8051使用12MHz晶振,试设计延迟100ms的延时程序。(一般延时程序采用循环程序结构)

DELAY:MOVR2,#200 ;延时一个机器周期T=1msLOOP1:MOVB,#250 ;每循环延时1ms

LOOP2:NOP DJNZB,LOOP2 ;250*2=500ms DJNZR2,LOOP1 ;0.5ms*200=100ms RET延时程序如下:【例5】设8051使用12MHz晶振,试设计延迟100m【例6】对项目一流水灯电路,要求每个LED闪亮5次(亮灭各0.5s)后,再转到下一个LED闪亮,循环不止。

ORG0000H

;程序开始地址

MAIN:MOVA,#0FEH;初值11111110送P0口

;低电平点亮LEDLOOP:MOVR5,#5;闪烁次数设置

MOVP0,ALCALLDEL;延时0.5sLOOP1:MOVP0,#0FFH;LED熄灭0.5s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论