单片机原理与接口技术课件MCS-51汇编语言程序设计.ppt
《单片机原理与接口技术课件MCS-51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《单片机原理与接口技术课件MCS-51汇编语言程序设计.ppt(72页珍藏版)》请在三一办公上搜索。
1、1,*,单片机原理与接口技术,第4章 MCS-51汇编语言程序设计,2,*,(1)了解汇编语言编程的基础知识。(2)了解汇编语言程序设计的基本步骤和方法。(3)了解汇编语言目标程序效率高、占存储空间少、运行速度快、实时性强等特点。(4)掌握MCS-51汇编语言的顺序、分支、循环、查表及子程序的结构。(5)掌握算术运算、数制转换及标度变换等实用汇编程序的编程方法。,本章教学要求,3,*,4.1 程序设计概述4.1.1 程序设计的步骤4.1.2 程序设计的方法4.1.3 汇编语言的规范4.1.4 汇编语言程序编辑和汇编4.2 结构化程序设计方法,本 章 目 录,4.2.1 顺序结构程序4.2.2
2、分支结构程序4.2.3 循环结构程序4.2.4 查表程序4.2.5 子程序4.3 汇编语言程序设计实例习题与思考题,4,*,4.1 程序设计概述,本章介绍使用MCS-51指令系统编写汇编程序的方法。与高级语言相比,汇编语言具有实时性好、代码效率高、执行速度快以及节约内存空间等优点,同时还可以充分利用机器的硬件结构与功能来操作硬件端口。本章介绍汇编语言程序编写的一般知识、程序设计的基本步骤和格式,以及各种类型的程序设计,包括顺序程序、分支程序、循环程序、查表程序和子程序等。,5,*,4.1.1 程序设计的步骤,MCS-51单片机提供111条指令,它们以指令助记符的形式出现,指令助记符的集合称为汇
3、编语言。由汇编语言编写的程序称为汇编语言源程序。汇编语言源程序必须翻译成机器代码组成的目标程序,机器才能执行。用汇编语言编制程序的过程,称为汇编语言程序设计。,6,*,使用汇编语言设计一个程序,大致可分为以下几个步骤:1)分析题意,明确要求。2)确定算法。3)画程序流程图,用图解来描述和说明解题步骤。4)分配内存单元,确定程序与数据区的存放地址。5)编写源程序。6)程序优化。7)上机调试、修改和最后确定源程序。,4.1.1 程序设计的步骤,7,*,4.1.2 程序设计的方法,1模块化程序设计2尽量采用循环及子程序结构3自上而下的程序设计,8,*,4.1.3 汇编语言的规范,汇编语言源程序由汇编
4、指令和伪指令两者构成。用汇编语言编写的源程序通常需经过微机汇编程序编译(汇编)成机器码后才能被单片机执行。为了对源程序汇编,在源程序中必须使用一些“伪指令”。伪指令是便于程序阅读和编写的指令,它即不控制机器的操作也不能被汇编成机器代码,只是为汇编程序所识别的常用符号,并指导汇编如何进行,故称为伪指令。,9,*,标号:助记符 操作数1,操作数2,操作数3;注释标号:标号是指令地址的标识符号。有了标号,程序中的其它语句才能访问该语句。有关标号的规定如下。1)标号由18个ASCII字符组成。第一个字符必须是字母,其余字符可以是字母、数字或其它特定字符;2)标号不能使用该汇编语言已经定义了的符号。如指
5、令助记符、伪指令以及寄存器符号名称等;3)标号后边必须跟以冒号。,1汇编指令格式,4.1.3 汇编语言的规范,-标号,10,*,操作数:操作数用于给指令的操作提供数据或地址。在一条汇编语句中操作数可能是空白的,也可能包括两项或三项。各操作数间用逗号分隔。操作数字段的内容可能包括工作寄存器、特殊功能寄存器、标号、常数和表达式。注释:对程序加以说明,是不可执行部分。注释字段必须以分号“;”开头,长度不限,当一行书写不下时,可以换行接着书写,但换行时应注意在开头使用分号“;”。,4.1.3 汇编语言的规范,-操作数,11,*,MCS-51系列单片机的常用伪指令有:ORG、END、EQU、DB、DW、
6、DS和BIT等。,2伪指令,4.1.3 汇编语言的规范,-伪指令ORG,格式:标号:ORG 16位地址功能:规定程序块或数据块存放的起始地址。如:ORG8000H;规定下面的第一条指令从地址8000H单元开始存放,即标号START的值为8000HSTART:MOVA,#30H.,(1)汇编起始伪指令ORG,12,*,格式:标号:END 表达式功能:结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇 编程序不予处理。,(2)汇编结束伪指令END,4.1.3 汇编语言的规范,-伪指令END,如:ORG2000HSTART:MOVA,#00H END START;表示标号STA
7、RT开始的程序段结束。,13,*,格式:字符名称 EQU 操作数功能:将操作数赋予规定的字符名称。,(3)等值伪指令EQU,4.1.3 汇编语言的规范,-伪指令EQU,如:ABEQU 16HDELYEQU 1234HMOV A,ABLCALL DELY,14,*,格式:标号:DB 8位二进制数表功能:DB指令是在程序存储器(ROM)中,从指定的地址单元开始,定义若干个8位内存单元的内容。用来在程序存储器的某一部分存入一组8位二进制数,或者是将一个数据表格存入程序存储器。这个伪指令在汇编以后,将影响程序存储器的内容。,(4)定义字节伪指令DB,4.1.3 汇编语言的规范,-伪指令DB,15,*,
8、以上伪指令经汇编以后,将从1010H开始的若干内存单元赋值:,(1010H)=20H(1011H)=43H(1012H)=25H(1013H)=FFH,其中43H是字符C的ASCII码,FFH是数值-1的补码,十进制数32也换算为16进制数20H。,4.1.3 汇编语言的规范,-伪指令DB的应用,如:ORG1010H TAB:DB32,C,25H,-1,16,*,标号:DW 16位二进制数表功能:DW指令是在程序存储器(ROM)中,从指定的地址单元开始,定义若干个16位数据。一个16位数要占两个存储单元,其中高8位存入低地址单元,低8位存入高地址单元。例如:ORG 1100HTAB:DW123
9、4H,0ABH 10以上伪指令经汇编以后,将对从1100H开始的若干内存单元赋值。,(5)定义字伪指令DW,4.1.3 汇编语言的规范,-伪指令DW,17,*,(1100H)=12H(1101H)=34H(1102H)=00H(1103H)=ABH(1104H)=00H(1105H)=0AH,其数据存储格式如右表所示。DB、DW伪指令都只对程序存储器(ROM)起作用,不能对数据存储器(RAM)的内容进行赋值或进行初始化工作。,例如:ORG1100HTAB:DW1234H,0ABH 10,4.1.3 汇编语言的规范,-伪指令DW的应用,18,*,标号:DS 表达式功能:从指定(标号)地址开始(无
10、标号时从顺序地址开始),保留指定数目(表达式的值)的字节单元作为备用存储区,供程序运行使用(用于程序存储器)。这些单元的初值均为0。例如:ORG 2000H TAB:DS 05H经汇编后,从地址2000H开始预留5个存储单元。,(6)定义存储区伪指令DS,4.1.3 汇编语言的规范,-伪指令DS,19,*,字符名称BIT 位地址功能:将位地址赋给字符名称。例如:SBITP1.0经汇编后,S符号的值是P1.0的地址90H。,(7)位定义伪指令BIT,4.1.3 汇编语言的规范,-伪指令BIT,20,*,4.1.4 汇编语言程序编辑和汇编,1汇编语言源程序编辑,-编写规范,DATA0EQU 30H
11、;将30H赋予字符名称DATA0ORG4000H;规定下面程序从4000H单元开始存放MOVR0,#DATA0;30HR0MOVR1,DATA0;(30H)R1CJNER1,#00H,NEXT;R1000H,则转NEXTHERE:SJMPHERENEXT:CLRA;0ALOOP:INCR0;(R0)+1R0ADDA,R0;(A)+(R0)ADJNZR1,LOOP;(R1)-1R1,R1 0,则转LOOPSJMPHEREEND;汇编到此结束,21,*,源程序 地址 目标码DATA0EQU30HORG4000HMOVR0,#DATA0;40007830MOVR1,DATA0;4002A930CJN
12、ER1,#00H,NEXT;4004B90002HERE:SJMPHERE;400780FENEXT:CLRA;4009E4LOOP:INCR0;400A08ADDA,R0;400B26DJNZR1,LOOP;400CD9FCSJMPHERE;400E80F7END,2汇编语言源程序的汇编,4.1.4 汇编语言程序编辑和汇编,-源程序汇编,22,*,4.2 结构化程序设计方法,在汇编语言程序设计中,普遍采用结构化程序设计方法。采用这种设计方法的主要依据是任何复杂的程序都可由顺序结构、分支结构及循环结构程序等构成。每种结构只有一个入口和出口,整个程序也只有一个入口和出口。结构程序设计的特点是程序
13、的结构清晰、易于读写和验证、可靠性高。下面主要介绍结构化程序设计的基本程序设计方法。,-程序结构,23,*,4.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,24,*,例4-2 设有16位二进制数存放在内部RAM的50H及51H单元中,要求将其算术左移
14、一位(即原数各位均向左移1位,最低位移入0)后仍存放在原单元。试编制相应的程序。,4.2.1 顺序结构程序,-顺序结构实例,ORG 4000HBIHROL:CLR C;Cy清零 MOV A,51H;低8位向左环移1位 RLC A MOV 51H,A MOV A,50H;高8位向左环移1位 RLC A MOV 50H,A END,25,*,4.2.2 分支程序,分支程序可根据要求无条件或有条件地改变程序执行流向。编写分支程序主要在于正确使用转移指令。分支程序有:单分支结构、双分支结构、多分支结构(散转)。,编写程序,根据x的值求y的值,并放回原单元中。,-分支结构,例4-3 设变量x以补码形式存
15、放在片内RAM的30H单元中,变量y与x的关系是:,26,*,4.2.2 分支程序,-分支结构实例,ORG1000HSTART:MOV A,30H JZ NEXT;x=0,转移 ANL A,#80H;保留符号位 JZ ED;x 0,转移MOV A,#05H;x 0,不转移ADD A,30HMOV 30H,ASJMP EDNEXT:MOV 30H,#20HED:SJMP$,程序如下:,27,*,例4-4 128种分支转移程序。根据入口条件转移到128个目的地址。入口:(R3)转移目的地址的序号00H7FH。出口:转移到相应于程序入口。,4.2.2 分支程序,-分支结构实例,JMP-128:MOV
16、 A,R3 RL A MOV DPTR,#JMPTAB JMPA+DPTRJMPTAB:AJMP ROUT00;128个子程序首址 AJMP ROUT01 AJMP ROUT7F,28,*,4.2.3 循环程序,典型循环程序包含四部分:初始化部分、循环处理部分、循环控制部分和循环修改部分。下面分别介绍这四个组成部分。1)初始化部分:设置循环开始的初始值,为循环做准备。2)循环处理部分:循环程序中重复执行的内容。3)循环控制部分:判断是否结束循环。4)循环修改部分:修改循环参数,为执行下一次循环做准备。,-循环结构,29,*,-循环结构,4.2.3 循环程序,先执行后判断,先判断后执行,30,*
17、,例4-5 设有一带符号的数组存放在内部RAM以20H为首址的连续单元中,其长度为90,要求找出其中的最大值,并将其存放到内部RAM的1FH单元中,试编写相应的程序。,-循环结构实例,4.2.3 循环程序,31,*,分析:开始时将第一单元内容送A,接着从第二位起依次将其内容x与A比较,如xA,那么将x送A;如果Ax,那么A值不变,直到最后一个单元内容与A比较、操作完毕,则A中就是该数组中的最大数,这里需要解决如何判别两个带符号数A和x的大小。通常可以采用如下的方法:首先判断A和x是否同号,若是同号则进行A-X操作,如差0,那么AX;如果差X(或A);如为负,则A(或x)x(或A)。程序如下:,
18、-循环结构实例,4.2.3 循环程序,32,*,-循环结构实例,4.2.3 循环程序,ORG1000HSCMPPMA:MOVR0,#20H;置取数指针R0初值 MOVB,#59H;置循环计数器B初值 MOVA,R0;第一个数送ASCLOOP:INCR0;修改指针 MOVR1,A;暂存 XRLA,R0;两数符号相同?JBACC.7,RESLAT;若相异,则转RESLAT:MOVA,R1;若相同,则恢复A中原来值 CLRC;C清零 SUBBA,R0;两数相减,以判断两者的大小,33,*,-循环结构实例,4.2.3 循环程序,JNB ACC.7,SMEXT1;若A中值为大,则转SMEXT1CXAHE
19、R:MOV A,R0;若A中值为小,则将大数送入A SJMP SMEXT2RESLAT:XRL A,R0;恢复A中原值 JNB ACC.7,SMEXT2;若A中值为正,侧转SMEXT2 SJMP CXAHER;若A中值为负,则转CXAHERSMEXT1:MOV R1,A;恢复A中原值SMEXT2:DJNZ B,SCLOOP MOV 1FH,A;最大者送1FH单元 END,34,*,例4-6 将内部RAM中起始地址为data的数据串传送到外部RAM中起始地址为buf的存储区域内,直到发现“$”字符停止传送。本例结束条件为找到“$”停止传送。程序如下:,4.2.3 循环程序,-循环结构实例,35,
20、*,4.2.3 循环程序,ORG8000HMOVR0,#DATA;置源数据区首地址MOVDPTR,#BUF;置目的数据区首地址LOOP0:MOV A,R0;取数据CJNEA,#24H,LOOP1;判断是否为$字符SJMPLOOP2;是$,转结束LOOP1:MOVX DPTR,A;不是$,执行传送INCR0;修改源地址INCDPTR;修改目的地址SJMPLOOP0;传送下一个数据LOOP2:END,-循环结构实例,36,*,例4-7 设8031单片机使用12MHz晶振(机器周期T为ls),试设计延迟100ms的延时程序。,4.2.3 循环程序,ORG4000HDEYPRG:MOV R5,#100
21、;置外循环计数器R5初值为100LOOP1:MOV R6,#200;置2层循环计数器R6初值为200LOOP2:MOV R7,#248;置3层循环计数器R7初值为248LOOP3:DJNZ R7,LOOP3;3层循环计数结束否?DJNZ R6,LOOP2;2层循环计数结束否?DJNZ R5,LOOP1;外循环计数结束否?RET,37,*,在上例程序中采用了多重循环程序,即在一个循环体中又包含了其他的循环程序,这种方法是实现延时程序的常用方法。使用多重循环时,必须注意以下几点。(1)循环嵌套,必须层次分明,不允许产生内外层循环交叉;(2)外循环可以一层层向内循环进入,结束时由里往外一层层退出;(
22、3)内循环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。,4.2.3 循环程序,38,*,4.2.4 查表程序,查表程序是一种常用的程序,它广泛使用于LED显示器控制、打印以及数据补偿、计算、转换等功能程序中,具有程序简单、执行速度快等优点。查表,就是根据变量x在表格中查找y,使y=f(x)。例4-8 试编写程序,将16进制数转换成ASCII码。分析:16进制09的ASCII码为3039H,AF的ASCII码为41H46H,ASCII码表的首地址为ASCTAB。入口:HEX单元的低四位存放16进制数。出口:转换后的ASCII码送回HEX单元。,-查表程序,39,*,-查表程序,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 技术 课件 MCS 51 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-5937858.html