单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录116:18单片机原理与接口技术第4章MCS-51汇编语言程序设计单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录216:18(1)了解汇编语言编程的基础知识。(2)了解汇编语言程序设计的基本步骤和方法。(3)了解汇编语言目标程序效率高、占存储空间少、运行速度快、实时性强等特点。(4)掌握MCS-51汇编语言的顺序、分支、循环、查表及子程序的结构。(5)掌握算术运算、数制转换及标度变换等实用汇编程序的编程方法。本章教学要求单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录316:184.1程序设计概述4.1.1程序设计的步骤4.1.2程序设计的方法4.1.3汇编语言的规范4.1.4汇编语言程序编辑和汇编4.2结构化程序设计方法本章目录4.2.1顺序结构程序4.2.2分支结构程序4.2.3循环结构程序4.2.4查表程序4.2.5子程序4.3汇编语言程序设计实例习题与思考题单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录416:184.1程序设计概述本章介绍使用MCS-51指令系统编写汇编程序的方法。与高级语言相比,汇编语言具有实时性好、代码效率高、执行速度快以及节约内存空间等优点,同时还可以充分利用机器的硬件结构与功能来操作硬件端口。本章介绍汇编语言程序编写的一般知识、程序设计的基本步骤和格式,以及各种类型的程序设计,包括顺序程序、分支程序、循环程序、查表程序和子程序等。单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录516:184.1.1程序设计的步骤MCS-51单片机提供111条指令,它们以指令助记符的形式出现,指令助记符的集合称为汇编语言。由汇编语言编写的程序称为汇编语言源程序。汇编语言源程序必须翻译成机器代码组成的目标程序,机器才能执行。用汇编语言编制程序的过程,称为汇编语言程序设计。单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录616:18使用汇编语言设计一个程序,大致可分为以下几个步骤:1)分析题意,明确要求。2)确定算法。3)画程序流程图,用图解来描述和说明解题步骤。4)分配内存单元,确定程序与数据区的存放地址。5)编写源程序。6)程序优化。7)上机调试、修改和最后确定源程序。4.1.1程序设计的步骤单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录716:184.1.2程序设计的方法1.模块化程序设计2.尽量采用循环及子程序结构3.自上而下的程序设计单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录816:184.1.3汇编语言的规范汇编语言源程序由汇编指令和伪指令两者构成。用汇编语言编写的源程序通常需经过微机汇编程序编译(汇编)成机器码后才能被单片机执行。为了对源程序汇编,在源程序中必须使用一些“伪指令”。伪指令是便于程序阅读和编写的指令,它即不控制机器的操作也不能被汇编成机器代码,只是为汇编程序所识别的常用符号,并指导汇编如何进行,故称为伪指令。单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录916:18[标号:]助记符[操作数1[,操作数2][,操作数3]][;注释]标号:标号是指令地址的标识符号。有了标号,程序中的其它语句才能访问该语句。有关标号的规定如下。1)标号由1~8个ASCII字符组成。第一个字符必须是字母,其余字符可以是字母、数字或其它特定字符;2)标号不能使用该汇编语言已经定义了的符号。如指令助记符、伪指令以及寄存器符号名称等;3)标号后边必须跟以冒号。1.汇编指令格式4.1.3汇编语言的规范----标号单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1016:18操作数:操作数用于给指令的操作提供数据或地址。在一条汇编语句中操作数可能是空白的,也可能包括两项或三项。各操作数间用逗号分隔。操作数字段的内容可能包括工作寄存器、特殊功能寄存器、标号、常数和表达式。注释:对程序加以说明,是不可执行部分。注释字段必须以分号“;”开头,长度不限,当一行书写不下时,可以换行接着书写,但换行时应注意在开头使用分号“;”。4.1.3汇编语言的规范----操作数单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1116:18MCS-51系列单片机的常用伪指令有:ORG、END、EQU、DB、DW、DS和BIT等。2.伪指令4.1.3汇编语言的规范---伪指令ORG格式:[标号:]ORG16位地址功能:规定程序块或数据块存放的起始地址。如:ORG8000H;规定下面的第一条指令从地址8000H单元开始存放,即标号START的值为8000HSTART:MOVA,#30H…..(1)汇编起始伪指令ORG单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1216:18格式:[标号:]END[表达式]功能:结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇编程序不予处理。(2)汇编结束伪指令END4.1.3汇编语言的规范---伪指令END如:ORG2000HSTART:MOVA,#00H…ENDSTART;表示标号START开始的程序段结束。单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1316:18格式:字符名称EQU操作数功能:将操作数赋予规定的字符名称。(3)等值伪指令EQU4.1.3汇编语言的规范---伪指令EQU如:ABEQU16HDELYEQU1234HMOVA,ABLCALLDELY单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1416:18格式:[标号:]DB8位二进制数表功能:DB指令是在程序存储器(ROM)中,从指定的地址单元开始,定义若干个8位内存单元的内容。用来在程序存储器的某一部分存入一组8位二进制数,或者是将一个数据表格存入程序存储器。这个伪指令在汇编以后,将影响程序存储器的内容。(4)定义字节伪指令DB4.1.3汇编语言的规范---伪指令DB单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1516:18以上伪指令经汇编以后,将从1010H开始的若干内存单元赋值:(1010H)=20H(1011H)=43H(1012H)=25H(1013H)=FFH其中43H是字符C的ASCII码,FFH是数值-1的补码,十进制数32也换算为16进制数20H。4.1.3汇编语言的规范----伪指令DB的应用如:ORG1010HTAB:DB32,‘C’,25H,-1单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1616:18[标号:]DW16位二进制数表功能:DW指令是在程序存储器(ROM)中,从指定的地址单元开始,定义若干个16位数据。一个16位数要占两个存储单元,其中高8位存入低地址单元,低8位存入高地址单元。例如:ORG1100HTAB:DW1234H,0ABH10以上伪指令经汇编以后,将对从1100H开始的若干内存单元赋值。(5)定义字伪指令DW4.1.3汇编语言的规范---伪指令DW单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1716:18(1100H)=12H(1101H)=34H(1102H)=00H(1103H)=ABH(1104H)=00H(1105H)=0AH其数据存储格式如右表所示。DB、DW伪指令都只对程序存储器(ROM)起作用,不能对数据存储器(RAM)的内容进行赋值或进行初始化工作。例如:ORG1100HTAB:DW1234H,0ABH104.1.3汇编语言的规范----伪指令DW的应用单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1816:18[标号:]DS表达式功能:从指定(标号)地址开始(无标号时从顺序地址开始),保留指定数目(表达式的值)的字节单元作为备用存储区,供程序运行使用(用于程序存储器)。这些单元的初值均为0。例如:ORG2000HTAB:DS05H经汇编后,从地址2000H开始预留5个存储单元。(6)定义存储区伪指令DS4.1.3汇编语言的规范----伪指令DS单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录1916:18字符名称BIT位地址功能:将位地址赋给字符名称。例如:SBITP1.0经汇编后,S符号的值是P1.0的地址90H。(7)位定义伪指令BIT4.1.3汇编语言的规范----伪指令BIT单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录2016:184.1.4汇编语言程序编辑和汇编1.汇编语言源程序编辑----编写规范DATA0EQU30H;将30H赋予字符名称DATA0ORG4000H;规定下面程序从4000H单元开始存放MOVR0,#DATA0;30H→R0MOVR1,DATA0;(30H)→R1CJNER1,#00H,NEXT;R10≠00H,则转NEXTHERE:SJMPHERENEXT:CLRA;0→ALOOP:INCR0;(R0)+1→R0ADDA,@R0;(A)+((R0))→ADJNZR1,LOOP;(R1)-1→R1,R10,则转LOOPSJMPHEREEND;汇编到此结束单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录2116:18源程序地址目标码DATA0EQU30HORG4000HMOVR0,#DATA0;40007830MOVR1,DATA0;4002A930CJNER1,#00H,NEXT;4004B90002HERE:SJMPHERE;400780FENEXT:CLRA;4009E4LOOP:INCR0;400A08ADDA,@R0;400B26DJNZR1,LOOP;400CD9FCSJMPHERE;400E80F7END2.汇编语言源程序的汇编4.1.4汇编语言程序编辑和汇编----源程序汇编单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录2216:184.2结构化程序设计方法在汇编语言程序设计中,普遍采用结构化程序设计方法。采用这种设计方法的主要依据是任何复杂的程序都可由顺序结构、分支结构及循环结构程序等构成。每种结构只有一个入口和出口,整个程序也只有一个入口和出口。结构程序设计的特点是程序的结构清晰、易于读写和验证、可靠性高。下面主要介绍结构化程序设计的基本程序设计方法。----程序结构单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录2316:184.2.1顺序结构程序例4-1将片内RAM的20H单元中的压缩BCD码拆成两个ACSII码存入21H、22H单元。低4位存在21H单元,高4位存在22H单元。----顺序结构实例ORG2000HMOVA,20HMOVB,#10H;除以10HDIVABORLB,#30H;低4位BCD码转换为ASCII码MOV21H,BORLA,#30H;高4位BCD码转换为ASCII码MOV22H,AEND单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录2416:18例4-2设有16位二进制数存放在内部RAM的50H及51H单元中,要求将其算术左移一位(即原数各位均向左移1位,最低位移入0)后仍存放在原单元。试编制相应的程序。4.2.1顺序结构程序----顺序结构实例ORG4000HBIHROL:CLRC;Cy清零MOVA,51H;低8位向左环移1位RLCAMOV51H,AMOVA,50H;高8位向左环移1位RLCAMOV50H,AEND单片机原理与接口技术(第2版).李晓林.电子工业出版社返回目录2516:184.2.2分支程序分支程序可根据要求无条件或有条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转)。编写程序,根据x的值求y的值,并放回原单元中。----分支结构例4-3设变量x以补码形式存放在片内RAM的30H单元中,变量y与x的关系是:单片机原理与接口技术(第2版).李