200 likes | 395 Views
第五章 汇编语言程序设计基础. 5 . 1 汇编语言应用程序设计的一般格式. 5 . 2 简单结构程序. 5 . 3 分支结构程序. 5 . 4 循环结构程序. 5 . 5 子程序结构程序. 5 . 6* 查表程序. 5 . 7* 查键程序. 5 . 8* 显示程序. 5 . 1 汇编语言应用程序设计的一般格式 5.1.1 单片机汇编语言程序设计的基本步骤 1. 设计任务的分析、确定算法或思路 2. 程序的总体设计及流程图 3. 编写源程序。 可在编译软件下编程(如 Wave 、
E N D
第五章 汇编语言程序设计基础 5.1汇编语言应用程序设计的一般格式 5.2简单结构程序 5.3分支结构程序 5.4循环结构程序 5.5子程序结构程序 5.6*查表程序 5.7*查键程序 5.8*显示程序
5.1汇编语言应用程序设计的一般格式 5.1.1单片机汇编语言程序设计的基本步骤 1.设计任务的分析、确定算法或思路 2. 程序的总体设计及流程图 3. 编写源程序。可在编译软件下编程(如Wave、 Medwin、记事本等),要求简练、层次清楚、 字节数少、执行时间少等。 4.源程序的汇编与调试(在编译软件中进行) 5.编写程序说明文件 例如:
N 第一位? 退出 初始化 Y 接收 键扫描 N 未位? N 键按下? Y 延时 60mS Y 判定输出 发送编码 中断 开始 返回
过程框: 表示程序要做的事 判断框: 表示条件判断 开始结束框: 表示流程的开始或终止 连接框: 表示程序流向连接 换页连接框: 表示流程换页连接 程序流向: 表示程序的流向 其中各图标的意义如下:
5.1.2 汇编语言程序的设计方法 掌握三点: 1.汇编程序的基本结构总是由简单程序、分支程序、循环程序、查表程序、子程序、中断程序等结构化的程序模块有机组成的。 2.划分功能模块进行设计。 3.自上而下逐渐求精。
5.1.3常用的伪指令 1.标号等值伪指令——EQU 格式为: 名字 EQU 表达式 意义: 名字 = 表达式 例如:自行车里程车速计中的定义 VSDA EQU P1.5 ; EEP数据传送口 VSCL EQU P1.4 ; EEP时钟传送口 DPHH EQU 62H ; DPTR计数扩展高8位 TH1H EQU 6CH ; 定时器T1扩展高8位 TH1HH EQU 6DH ; 定时器T1扩展高8-16位
5.1.3常用的伪指令 2.标号等值伪指令——DL 格式为: 名字 DL 表达式 DL伪定义可以重复定义 3.数据存储说明伪定义——DB 格式为: (标号) DB (表达式或数据串) 例如: TAB:DB 00H,14H,45H,0FEH,56H,33H,55H,99H DB 89H,0DFH,55H,66H,77H,88H,23H,65H
5.1.3常用的伪指令 4.数据伪定义——DW 格式为: (标号) DW (双字节表达式或数据串) 例如: TAB:DW 0013H,1456H,45DFH,0FE12H,5600H 5.存储区说明伪指令——DS 格式为: (标号) DS (数据表达式) 意义: 从标号开始预留空间 BASE: DS 0100H ;从标号BASE开始空出256个单元
5.1.3常用的伪指令 6.程序起始地址伪定义——ORG 格式:ORG 16位地址 意义: 用来定位程序在ROM中存放的起始地址, 如: ORG 0000H LJMP START ORG 0003H RETI ORG 000BH RETI ORG 0013H RETI ORG 001BH RETI ORG 0023H RETI ORG 002BH RETI
5.1.3常用的伪指令 7.内存命名伪定义——DATA 格式: 名字 DATA 直接地址 意义: 给某一内存单元取名,如: ADDR1 DATA 30H ADDR2 DATA 31H ADDR3 DATA 32H ADDR4 DATA 33H 另外还有IDATA、XDATA伪定义分别给间接寻址空间内存(80H-FFH)和片外(100H-FFFFH)内存单元命名。
5.1.3常用的伪指令 8.位单元命名伪定令——BIT 格式: 名字 BIT 位地址 意义: 给某一位单元取名,如: KEY0 BIT P1.0 KEY1 BIT P1.1 FLAG BIT 00H 9.程序结束伪指令——END 格式: END 意义:表示程序至此结束,以下行内容不再编译。
5.1.4 单片机汇编语言程序的一般格式 ;********************* ;程序说明区 ;********************* 定义说明区 ;要求放在最前面 ;********************* 主程序及中断入口区 ;要求放在第二 ;********************* 主程序区 ;随意位置 ;********************** 各类子程序或功能程序区 ;随意位置 ;********************** ;中断服务程序区 ;随意位置 ;********************** END ; 例子
5.2简单结构程序 简单结构程序又叫顺序程序,程序从第一条指令开始一直执行到最后一条,无分支,无循环。 例如双字节加法程序:
5.3分支结构程序 1.单分支结构程序 单分支结构程序只有一个入口,二个出口,根据条件的判断选择出口。例如: START: ACALL CLEAR ;调用初始化子程序 STAR1: MOV P3,#0FFH ;置P3口为输入状态 JNB P3.0,FUN0 ; P3.0为0转FUN0执行 LJMP FUN1 ; P3.0为1转FUN1执行
5.3分支结构程序 2.多分支结构程序 多分支结构程序指一个入口,多个出口,根据条件选择执行一个程序。例如键功能散转程序: MOV DPTR,#KEYFUNTAB ;装入键功能标号首址 JMP @A+DPTR ;散转 KEYFUNTAB:LJMP KEYFUN00 ;跳到KEYFUN00 LJMP KEYFUN01 ;跳到KEYFUN01 LJMP KEYFUN02 ;跳到KEYFUN02 . RET ;
5.4循环结构程序 循环结构程序用以控制一个程序多次重复执行,当条件条件满足时退出循环。有初始化、循环处理、判断、结束处理等组成。例如采用12MHZ晶振的513μs延时程序: DL513: MOV R2,#0FFH DELAY1: DJNZ R2,DELAY1 RET
5.5子程序结构程序 一些经常要用的程序一般设计成子程序,以便给其它程序经常调用。子程序必须具有程序标号,结束必须用RET指令。调用时用LCALL、ACALL等指令。 例如:延时程序、显示程序等。 DL513UF: MOV R2,#0FFH DELAY1: DJNZ R2,DELAY1 RET
5.6查表程序 查表程序用MOVC指令,用于访问(查)程序存储器中的固定数表,如用于七段LED数码管显示的程序中就用到了查表指令。 例如:
5.7查键程序 具有按键控制功能的单片机应用系统都有查键功能程序,有简单的顺序查键及复杂的行列式查键。 例1:顺序查键程序 START:MOV P3,#0FFH ;置P3口为输入口 JNB P3.0,FUN0 ;P3.0口为0转FUN0 JNB P3.1,FUN1 ;P3.1口为0转FUN1 JNB P3.2,FUN2 ;P3.2口为0转FUN2 JNB P3.3,FUN3 ;P3.3口为0转FUN3 AJMP START ;转START循环 例2:32键行列式查键程序(4×8)
5.8显示程序 LED七段数码管显示程序采用动态扫描法,先将要显示的数据通过查表得到段码数据,然后放入输出口,再将相应的数码管点亮,以此循环。以下是一个四位LED共阳数码管显示程序,用P1口及P3口作显示扫描口,数据在P1口输出,列扫描在P3.0-P3.3口。 显示程序例子