《单片机第四章80c51单片微机的程序设计》由会员分享,可在线阅读,更多相关《单片机第四章80c51单片微机的程序设计(110页珍藏版)》请在金锄头文库上搜索。
1、第四章 80C51单片微机的程序设计,4.1概述 4.1.1 汇编语言格式,1. 计算机语言机器语言、汇编语言与高级语言 程序:为计算某一算式或完成某一工作的若干指令的有序集合。计算机的全部工作概括起来,就是执行这一指令序列的过程。 程序设计:为计算机准备这一指令序列前的过程。 机器语言 机器语言系统:用二进制代码表示的指令系统,简称为机器语言。 直接用机器语言编写的程序称为手编程序或机器语言程序。, 汇编语言 在机器语言,这些英文字符被称为助记符。用这种助记符表示指令系统的语言称为汇编语言或符号语言,用汇编语言编写的程序称为汇编语言程序。特点: 助记符指令与机器指令是- -对应的,用汇编语言
2、编写的程序效率高,占用存储空间小,运行速度快,而且能反映计算机的实际运行情况,所以用汇编语言能编写出最优化的程序。 汇编语言是“面向机器”的语言,编程比使用高级语言困难。 汇编语言能直接访问存储器、输入与输出接口及扩展的各种芯片(比如A/D、D/A等) ,也可直接处理中断,汇编语言能直接管理和控制硬件设备。, 汇编语言通用性差,汇编语言和机器语言一样,都面向一台具体的机器,不同的单片微机具有不同的指令系统,并且不能通用。 不能直接识别在汇编语言中出现的字母、数字和符号,需要将其转换成用二进制代码表示的机器语言程序,才能够识别和执行。通常把这一转换(翻译)工作称为汇编。 人工汇编:由程序员通过查
3、指令表把汇编指令程序转换为机器语言程序的过程。 由专门的程序来进行汇编,这种程序称为汇编程序。经汇编程序汇编而得到的机器语言程序,计算机能够识别和执行,这一机机器语言程序称为目的程序或目标程序,而汇编语言程序称为源程序。这3者之间的关系如图41所示。, 高级语言 比如BASIC、FORTRAN、COBOL及PASCAL等,都是一些参照数学语言而设计的、近似于人们日常用语的语言。通用性强,易于移植到不同类型的机器中去。计算机也不能直接识别和执行高级语言,需要将其转换为机器语言才能识别和执行。对于高级语言,这一转换工作通常称为编译或者解释。进行编译或者解释的专用程序称为编译程序或者解释程序。由于高
4、级语言不受具体机器的限制,而且使用了许多数学公式和习惯用语,从而简化了程序设计的过程,因此是一种面向问题或者面向过程的语言。 比如,APT、PROLOG、LISP、PL/M以及C语言等。而80C51系列单片微机作为工业标准地位,从1985年开始就有C语言编译器,简称C51。, 汇编语言 汇编语言语句的种类和格式 汇编语言语句的种类指令语句:每1个指令语句都在汇编时产生1个目标代码,对应着机器的1种操作。例如:MOV A,#0伪指令语句:主要是为汇编语言服务的,在汇编时没有目标代码与之对应。例如:ONE EQU 1宏指令语句:用以代替汇编语言源程序中重复使用的程序段的1种语句,由汇编程序在汇编时
5、产生相应的目标代码。, 汇编语言语句的格式 指令语句的格式为:【标号(名字)】:助记符(操作码)【操作数(参数)】;【注释】伪指令语句的格式:名字 定义符 参数 ;注释 各字段之间用1个空格或字段定界符分隔,常用的字段定界符有冒号“:” 、逗号“,”和分号“;”。其中方括号括起来的是可选择部分。,标号域:说明指令的地址。标号可以作为LJMP、AJMP、LCALL及ACALL等指令的操作数。在指令语句中,标号位于一个语句的开头位置,由字母和数符组成,字母打头,冒号“:”结束。标号中的字符个数一般不超过8个,若超过8个,则以前面的8个为有效,后面字符不起作用。不能使用本汇编语言中已经定义了的符号作
6、标号,比如指令助记符(如ADD) 、伪指令 (如END)一条语句可以有标号,也可以没有标号,操作码域:是指令的助记符或定义符,用来表示指令的性质,规定这个指令语句的操作类型。伪指令语句中的定义符规定这个指令语句的伪操作功能。对于标号缺省的语句,操作码域作为一行的开始。但在书写时,应与上一行的操作码对齐。,操作数域:给出的是参与运算或进行其它操作的数据或这些数据的地址。操作数与操作码之间用空格“”分隔,若有两个操作数,这两个操作数之间必须用逗号“,”分开。 对于操作数域出现的常数:若采用十六进制数表示,其末尾必须加“H”说明;若十六进制数以A、B、C、D、E、F开头,其前面必须添1个“0”进行引
7、导说明。 若采用二进制数表示,其末尾必须用“B”说明。 若采用十进制数表示,可以不加后缀或加“D”说明。,注释域 由分号“;”引导开始,是说明语句功能、性质以及执行结果的文字。以分号“;”引导。,例:把片外存储器2200H单元中的数送入片内70H单元中。标号域 操作码域 操作数域 注释域BEGIN:MOV DPTR,#2200H ;(DPTR)=2200HMOV R0,#70H ;(R0)=70HMOVX A,DPTR ;(A)=(DPTR)MOV R0,A ;(R0)=(A),伪指令:为了便于编程和对汇编语言程序进行汇编,各种汇编程序都提供一些特殊的指令,供人们编程使用。 由伪指令确定的操作
8、称为伪操作。 伪指令又称汇编程序控制译码指令。“伪”体现在汇编时不产生机器指令代码,不影响程序的执行,仅指明在汇编时执行一些特殊的操作。,4.1.2 伪指令语句, ORG(ORiGIN) 汇编起始地址伪指令指令格式为: ORG 表达式含义:向汇编程序说明,下述程序段的起始地址由表达式指明。表达式通常为16进制地址码。 一般规定,在由ORG伪指令定位时,其地址应当由小到大,不能重叠。它的有效范围一直到下一条ORG伪指令出现为止。跟在ORG伪指令后面的程序段或数据段是绝对地址还是浮动地址段,依赖于ORG右边的表达式性质。,ORG 1000HSTART:MOV A,12H含义:通知汇编程序,从 ST
9、ART开始的程序段,其起始地址由1000H开始。由于1000H是立即数型地址码,所以还隐含地指明该程序段是绝对地址段。 假定ORG右边的表达式是浮动程序段中定义的标号RELOCA,则 ORG RELOCA SUBROU: 表明 SUBROU起始于 RELOCA(它是相对地址)浮动地址的程序段。, END(END of assembly) 汇编结束伪指令汇编结束伪指令一般有以下两种格式:主程序模块:标号 END 表达式子程序模块: 标号 END含义:通知汇编程序,该程序段汇编至此结束。 END语句应设置在整个程序(包括伪指令在内)的后面。当源程序为主程序时,END伪指令中可有标号,这个标号应是主
10、程序第一条指令的符号地址。若源程序为子程序,则在 END伪指令中不需要带标号。, EQU(EQUate)赋值伪指令指令格式为:标号 EQU 表达式含义:把表达式赋值于标号,这里的标号和表达式是必不可少的。例如:LOOP EQU 2002H 是向汇编程序表明,标号LOOP的值为2002H。又如:LOOP1 EQU LOOPLOOP已赋值为2002H,则相当于LOOP1LOOP,即LOOPI也为2002H,在程序中LOOP和LOOP1可以互换使用。用EQU语句给一个标号赋值以后,在整个源程序中该标号的值是固定的,不能更改。, DL定义标号值伪指令指令格式为: DL 含义:说明标号等值于表达式。同样
11、,标号和表达式是必不可少的。例如;COUNT DL 3000H ;S定义标号COUNT的值为 ;3000H COUNT DL COUNT十1 ;重新定义COUNT的值为 ;3000Hl可用DL语句在同一源程序中给同一标号赋予不同的值,即可更改已定义的标号值;而用EQU语句定义的标号,在整个源程序中不能更改。, DB(Define Byte) 定义字节伪指令指令格式为:标号 DB 表达式或表达式表含义:将表达式或表达式表所表示的数据或数据串存入从标号开始的连续存储单元中。标号为可选项,它表示数据存储单元地址。表达式或表达式表是指一个字节或用逗号分开的字节数据。可以是用引号括起来的字符串。字符串中
12、的字符按ASCII码存于连续的ROM中。例如:ORG 2000HTABLE DB 73H,04,100,32,00,2,“ABC” 表示字节串数据存入由TABLE标号为起始地址的连续存储器单元中。即从2000H存储单元开始依次连续存放数据为:73H,04H,64H,20H,00H,FEH,41H,42H,43H。,若不采用ORG伪指令专门规定数据区的起始地址,则数据区的起始地址即根据DB命令前一条指令的地址确定。这时DB所定义的数据字节的起始地址为DB命令前一条指令的地址加上该指令的字节数。, DW(Define Word) 定义字伪指令 指令格式为:标号 DW 表达式或表达式表含义:把字或字
13、串值存入由标号开始的连续存储单元中,且把字的高字节数存入低地址单元,低字节数存入高地址单元。按顺序连续存放。DW 100H,3456H,814表示按顺序存入01H,00H,34H,56H,03H,2EH 注:DB和DW定义的数表,数的个数不得超过80个。若数据的数目较多时,可以使用多个定义命令。 一般以DB来定义数据,以DW来定义地址。, DS(Define Storage) 定义存储区伪指令指令格式为: DS 含义:通知汇编程序,在目标代码中,以标号为首地址保留表达式值的若干存储单元以备源程序使用。汇编时,对这些单元不赋值。例如:BASE DS 100H通知汇编程序,从标号BASE开始,保留
14、100H个存储单元,以备源程序另用。注意,对于80C51单片微机,DB、DW、DS等伪指令只能应用于程序存储器,而不能对数据存储器使用。, BIT 位定义伪指令命令格式为: BIT 含义:给字符名称赋予位地址。其中,位地址可以是绝对地址,也可以是符号地址。例:ABC BIT P3.1把P3.1位地址赋值给ABC,在后面的编程中,ABC即可作为位地址P3.1使用。,例1. 伪指令应用ORG 8100HBUFFER DS 10H DW “A B” DW 100H,1ACH,-814 说明: 从8100H至810FH为缓冲区空间 (8110H)=41H (A)(8111H)=42H (B) 8112
15、H单元起存放01H、00H、01H、ACH、FCH、D2H,4.2 80C51汇编语言程序设计,汇编语言程序设计,就是采用汇编指令来编写计算机程序。在实际编程中,如何正确选择指令、寻址方式和合理使用工作寄存器,包括数据存储器单元,如何对扩展的I/O端口进行操作等,都是基本的汇编语言程序设计技巧。程序结构一般采用以下3种基本控制结构,即顺序结构、分支结构和循环结构来组成,再加上使用广泛的子程序及中断服务子程序,共有5种基本结构。,按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。 例2. 数据传送和交换。 将R0与R7内容互换,R4与内存20H单元内容互换。XCHR:MOV A
16、,R0XCH A,R7XCH A,R0 ;R0与R7内容互换MOV A,R4XCH A,20HXCH A,R4 ;R4与20H单元内容互换,4.2 .1 顺序结构程序设计,设被加数存放于片内RAM的20H(低位字节)、21H(高位字节),加数存放于22H(低位字节)和23H(高位字节),运算结果的和数存放于20H(低位字节)和21H(高位字节)中。实现16位相加。 START:PUSH ACC ;将A中内容进栈保护MOV R0,20H ;将20H地址送R0MOV R1,22H ;将22H地址值送R1MOV A,R0 ;被加数低字节内容送AADD A,R1 ;低字节数相加 MOV R0,A ;低字节数和存20H中,