第4章-80C51单片机汇编语言程序的设计课件-

PPT
  • 阅读 46 次
  • 下载 0 次
  • 页数 70 页
  • 大小 900.030 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第4章-80C51单片机汇编语言程序的设计课件-
可在后台配置第一页与第二页中间广告代码
第4章-80C51单片机汇编语言程序的设计课件-
可在后台配置第二页与第三页中间广告代码
第4章-80C51单片机汇编语言程序的设计课件-
可在后台配置第三页与第四页中间广告代码
第4章-80C51单片机汇编语言程序的设计课件-
第4章-80C51单片机汇编语言程序的设计课件-
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 70
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】第4章-80C51单片机汇编语言程序的设计课件-.ppt,共(70)页,900.030 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44646.html

以下为本文档部分文字说明:

课程:单片机技术教材:单片机基础第4章MCS-51汇编语言程序设计教学基本要求:(1)、了解MCS-51汇编语言程序设计的特点;(2)、熟悉MCS-51汇编语言伪指令的功能及用法;(3)、掌握顺序、分支、循环程序的设计方法;(4)、掌握KEI

L软件的使用方法。教学重点:(1)、KEIL软件的使用方法;(2)、分支、循环程序的设计方法;(3)、定时、查表程序的设计方法;教学难点:(1)、KEIL软件调试程序的方法;(2)、利用JMP@A+DPTR指令实现程序多分支;(3)、查表程序的设计方法;(4)、子程

序结构与堆栈的关系。课程:单片机技术教材:单片机基础4.1单片机程序程序设计语言概述4.1.1机器语言和汇编语言4.1.2单片机使用的高级语言(1)BASIC语言(2)C语言(3)PL/M语言4.1.380C51单片机汇

编语言的语句格式课程:单片机技术教材:单片机基础汇编语言程序设计必须注意如下特点:(1)设计人员必须详细了解单片机的硬件结构,以便在程序设计中熟练使用;(2)必须熟悉汇编语言指令的功能和用法;(3)在程序设计前,必须分析设计任务,确定所用算法,确定程序

结构,确定数据的类型、数据的结构,必须对数据的存放、寄存器和工作单元的使用以及所用硬件资源等作出具体安排;(4)根据分析,画出程序设计流程图;(5)根据程序设计流程图编写程序。课程:单片机技术教材:单片机基础4.2汇编语言程序的基本结构形式单片机汇编语言程序设计的基本结构形式一般

分为以下4种形式,即顺序结构、分支结构、循环结构和子程序结构。4.2.1顺序程序结构顺序程序是最简单的程序结构,在顺序程序中,既无分支,循环,也不调用子程序,程序执行时一条一条地按顺序执行指令例:假定三字节无符号数相加,其中一个加数在内部RAM的50H、51H和52H单元中,另一

个加数在内部RAM的53H、54H和55H单元中,要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。解:(1)分析任务:求两数之和(2)算法:加法运算(ADD或ADDC)课程:单片机技术教材:单片机基础(3)程序结

构:顺序或循环结构(4)数据类型:三字节、二进制、无符号数(5)数据结构:升序或降序排列(6)RAM单元安排:(内部RAM字节单元、位地址空间)(7)采用寄存器间接寻址方式(R0、R1)加数(N1)高字节(8位)中字节(8位)低字节(8位)加数(N2)高

字节(8位)中字节(8位)低字节(8位)加数(N1)加数(N2)和(N3)52H单元低字节(8位)55H单元低字节(8位)52H单元低字节(8位)51H单元中字节(8位)54H单元中字节(8位)51H单

元中字节(8位)50H单元高字节(8位)53H单元高字节(8位)50H单元高字节(8位)00H位进位位课程:单片机技术教材:单片机基础(8)程序设计流程框图;常用流程框图符号开始结束进程判断判断开始加数N1和加数N2的低字节相

加加数N1和加数N2的高字节相加加数N1和加数N2的中字节相加处理进位位结束开始取N1低字节取N2低字节N1和N2低字节相加保存N1和N2低字节和取N1中字节取N2中字节N1和N2中字节相加保存N1和N2中字节和取N1高字节取N2高字节N1和N2高字节相加保

存N1和N2高字节和处理进位位结束课程:单片机技术教材:单片机基础(9)程序清单1;MOVA,52H;(A)=被加数N1低字节ADDA,55H;(A)=被加数N1低字节+加数N2低字节低字节和的进位在CY中MOV52H,A;(52H)=和N3低字

节MOVA,51H;(A)=被加数N1中字节ADDCA,54H;(A)=被加数N1中字节+加数N2中字节+低字节和的进位,中字节和的进位在CY中MOV51H,A;(51H)=和N3中字节MOVA,50H;(A

)=被加数N1高字节ADDCA,53H;MOV50H,A;(50H)=和N3高字节MOVA,#00H;ADDCA,#00H;高字节和的进位位处理MOV00H,A;保存处理后的高字节和的进位课程:单片机技术教材:

单片机基础程序清单2;ORG1000HMOVRO,#52H;加数N1的低字节地址送地址指针R0MOVR1,#55H;加数N2的低字节地址送地址指针R1MOVA,@R0;取N1的低字节ADDA,@R1;N1、N2低

字节相加MOV@R0,A;保存N1、N2低字节和DECR0;修改加数N1的地址指针内容DECR1;修改加数N2的地址指针内容MOVA,@R0;取N1的中间字节ADDCA,@R1;N1、N2中间字节带低字节和进位相加MOV@R0,A;保存N1、N

2中间字节和DECR0;修改加数N1的地址指针内容课程:单片机技术教材:单片机基础DECR1;修改加数N2的地址指针内容MOVA,@R0;取N1的高字节ADDCA,@R1;N1、N2高字节带中间字节和进位相加MOV@R0,A;保存N1、N2高字节和M

OV00H,C;高字节和的进位送00H位保存END思考题(补充作业题):1)如果N1、N2,N3均为十进制数,应如何修改程序?2)如果加数N1在内部RAM50H、51H和52H单元中,而加数N2与和N3均在外部RAM0053H、0054H和005

5H单元中,其它条件不变,应如何修改程序?3)如果N1、N2,N3均存放在外部RAM单元,应如何修改程序?课程:单片机技术教材:单片机基础例:设内部RAM40H,41H单元中分别存放8位二进制数,现分别取这两个单元中的半个字节,合并成一个新字节存放

在42H单元中。要求如下:42H单元新字节的低半字节取自40H单元的低半字节,而高半字节取自41H单元的低半字节。解:(1)分析任务:拆字、合字内部RAMN140H单元N2内部RAMN442H单元N2内部RAMN341H单元N4课程:单片机技术教材:单片机基础(2

)算法:逻辑运算(3)程序结构:顺序(4)数据类型:单字节、二进制、无符号数(5)数据结构:升序或降序排列(6)程序设计流程框图;开始取40H单元内容取41H单元内容保留40H单元低半字节保留41H单元低半字节结束合字并保存课程:单片机技术教材:单片机基础(7)程序清单;ORG2000

HSTART:MOVR1,#40H;初始化数据指针R1的内容MOVA,@R1;取40H单元内容送AANLA,#0FH;保留40H单元内容低4位INCR1;修改数据指针R1的内容XCHA,@R1;(A)与@R1内容互换ANLA,#0F

H;保留41H单元内容低四位SWAPA;41H单元内容高低半字节互换ORLA,@R1;合字生成新字节INCR1;修改数据指针R1的内容MOV@R1,A;新字节送42H单元保存END思考题(补充作业题):上例中其它条件不变,要求如下:42H单元新字节的低半字节取自40

H单元的低半字节,而高半字节取自41H单元的高半字节。课程:单片机技术教材:单片机基础(1)单分支程序单分支程序是通过条件转移指令实现的,即根据条件对程序的执行进行判断,满足条件则进行程序转移,不满足条件程序就顺序执行。在MCS-51指令系统中,可利用JZ,JNZ,CJNE,DJ

NZ,JC,JNC,JB,JNB,JBC等指令,完成为0、为1、为正、为负以及相等、不相等等各种条件判断。例:两个8位无符号二进制数比较大小。假设在外部RAM中有ST1、ST2和ST3共3个连续单元(单元地址从小到大),其中ST1

、ST2单元中存放着两个8位无符号二进制数N1,N2,要求找出其中的大数并存入ST3单元中。4.2.2分支程序结构课程:单片机技术教材:单片机基础解:(1)分析任务:比较两个数的大小(2)算法:算术运算、控制转移(3)程序结构:单分支(4)数据类型:单字节、二进制、无符号数

(5)数据结构:单元地址升序排列(6)RAM单元安排:外部RAM单元(7)采用寄存器间接寻址方式(R0、R1或DPTR)(8)程序设计流程框图;(9)程序清单;思考题(补充作业题):上例中,如果采用CJNEA,direct,rel指令,应如何修改程序?课程:单片机技术教材:单片机基础开始设

置数据指针取数据N2取数据N1并暂存结束N1保存于A中N2≥N1修改数据指针保存大数N2保存于A中YN返回返回课程:单片机技术教材:单片机基础ORG8000HSTART:CLRC;进位清0MOVDPTR,#ST1;设数据指针MOVXA,@DPTR;A←((ST1)),取N

1MOVR2,A;暂存N1INCDPTR;DPTR←ST2(指向N2单元)MOVXA,@DPTR;取N2存于A中SUBBA,R2;N1,N2比较(N2-N1,差在A中)JNCBIG1;N2≥N1,转BIG1,N2<N1,顺序执行XCHA,R2;A←N1SJ

MPBIG0BIG1:MOVXA,@DPTR;A←N2BIGO:INCDPTR;DPTR←ST3(指向N3单元)MOVX@DPTR,A;ST3←大数END返回返回课程:单片机技术教材:单片机基础多重单分支结构举例多重单分支结构中,通过一系列条件判断,进行逐级分支。为此可使用比较转移

指令CJNE实现。例:假定采集的温度值Ta放在累加器A中。此外,在内部RAM54H单元存放温度下限值T54,在55H单元存放温度上限值T55。若Ta>T55,程序转向JW(降温处理程序);若Ta<T54,则程序转向SW(升温处理程序);若T55≥Ta≥T54,则程序

转向FH(返回主程序)。课程:单片机技术教材:单片机基础CJNEA,55H,LOOP1;若Ta≠T55,则转向LOOP1AJMPFH;若Ta=T55,则返回LOOP1:JNCJW;若(CY)=0,表明Ta>T55,转降温处理程序C

JNEA,54H,LOOP2;若Ta≠T54,则转向LOOP2AJMPFH;若Ta=T54,则返回LOOP2:JCSW;若(CY)=1,表明Ta<T54,转升温处理程序FH:RET;若T55≥Ta≥T54,则返回主程序课程:单片机技术教材:单片机基础(2

)多分支程序假设多分支程序中,分支序号的最大值为n,则多分支转移结构如图所示:MCS-51指令系统没有多分支转移指令,无法使用单条指令完成多分支转移。要实现多分支转移,可采用以下几种方法:K=?转向0分支转向n分支转向

n-1分支转向1分支K=0K=nK=n-1K=1课程:单片机技术教材:单片机基础假设分支序号值保存在累加器A中,则可使用CJNEA,#data,rel指令,其分支流程如图所示:(A)=0?转向0分支(A)=1?(A)=2?转向2

分支转向1分支YYYNNN(a)使用多条CJNE指令,通过逐次比较,实现分支程序转移课程:单片机技术教材:单片机基础例:已知:127≥X≥-128,求Y。设X,Y分别存放在外部RAM1000H和2000H单

元中。解:(1)分析任务:解方程(2)算法:控制转移(3)程序结构:多分支(4)数据类型:单字节、二进制、有符号数(5)RAM单元安排:外部RAM单元(6)采用寄存器间接寻址方式(R0、R1或DPTR)(7

)程序设计流程框图(8)程序清单;思考题(补充作业题):上例中,如果采用CJNE指令,应如何修改程序?−+=011y000=xxx课程:单片机技术教材:单片机基础开始取数据X结束X=0Y=0YNX<0Y=-1Y=1NY保存数据Y返回返回课程:

单片机技术教材:单片机基础ORG1000HSTART:MOVDPTR,#1000H;数据X的地址送数据指针DPTRMOVXA,@DPTR;A←取数据XJZSUL;X=0转SULJBACC.7,NEG;X<0转NEG,否则,X>0MOVA,#01H;SJMPSUL;

NEG:MOVA,#0FFH;(0FFH为-1补码)SUL:MOVDPTR,#2000H;数据Y的地址送数据指针DPTRMOVX@DPTR,A;保存Y值END返回返回课程:单片机技术教材:单片机基础首先,在

程序中建立一个转移指令表,在表格中存放转移指令,然后,通过查转移指令表的方式实现多分支程序转移。这种方法主要利用散转指令JMP@A+DPTR,此指令采用变址寻址方式,操作过程:(PC)←((A)+(DPTR)),CPU根据PC的内容来实现多分支程序转移。DPTR中送转移指令表的表首地址

(常用转移指令表的名称标号代替),而A中送转移指令表中存放的转移指令的序号(常常从第0条开始)。例如,有多个分支程序,如要通过AJMP转移指令进行转移,则应把这些转移指令按序写入转移指令表中,并设置一个序号指针(例如R3),序号往往从0开始,然后可使用以下查表程

序实现程序转移。(b)使用查转移指令表的方法实现多分支程序转移课程:单片机技术教材:单片机基础MOVA,R3;分支程序序号送ARLA;分支程序序号乘2MOVDPTR,#BRTAB;BRTAB为转移指令表名称标号,JMP@A+DPTR;也为转移指令表首地

址BRTAB:AJMPROUT0;分支程序0的转移指令AJMPROUT1;分支程序1的转移指令AJMPROUT2;┇AJMPROUT127;分支程序127的转移指令ROUT0:………;分支程序0ROUT1:

………;┇ROUT127:………;分支程序127课程:单片机技术教材:单片机基础由于AJMP指令是二字节指令,因此,程序中通过RLA指令将分支序号乘2。转移指令表中最多只能安排128条分支转移指令,如需多于128条,则必须另行修改程序。由于AJMP指令转移范围是2KB,因此,分支程

序应安排在以JMP@A+DPTR指令为中心的2KB范围之内,否则会出错。如果转移指令表中的转移指令是LJMP指令,则分支程序可安排在64KBROM空间的任何地方。但转移指令表中的转移指令的条数最多为85条(LJMP指令是三字节指令),上述程序应作相应的修改。MOVA,R3

;MOVB,#03H;MULAB;课程:单片机技术教材:单片机基础MOVDPTR,#BRTAB;BRTAB为转移指令表名称标号,JMP@A+DPTR;也为转移指令表首地址BRTAB:LJMPROUT0;分支程序0的转移指令LJMPROUT1;分支程序1的转移指令

LJMPROUT2;┇LJMPROUT85;分支程序85的转移指令ROUT0:………;分支程序0ROUT1:………;┇ROUT85:………;分支程序85课程:单片机技术教材:单片机基础JMP@A+DPTRER分支程序CR分支程序XS分支程序

DS分支程序序号=00HDPTR←表首地址A←分支序号×2序号=03H序号=02H序号=01H返回返回课程:单片机技术教材:单片机基础4.2.3循环程序结构MCS-51汇编语言指令系统没有专用的循环指令,但可以使

用条件转移指令通过条件判断来控制循环是继续还是结束。循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。(2)处理部分:为反复执行的程序段,是循环程序的实体,也是循环程序的主体。(3)循环控制部分:其作用是修改循环变量和控制变量

,并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。课程:单片机技术教材:单片机基础单循环程序一般有以下两种典型结构:课程:单片机技术教材:单片机基础双重循环

程序的结构:开始外循环初始化结束外循环结束否NY内循环初始化内循环处理内循环变量修改外循环处理外循环变量修改结束处理内循环结束否NY课程:单片机技术教材:单片机基础在应用系统程序设计时,有时经常需要将数据存储器中各部分地址单元作

为工作单元,以存放程序执行的中间值或执行结果,因此,在使用这些工作单元之前,必须将工作单元清零。工作单元清零可用循环程序完成。例:假设在内部RAM区,开辟96个工作单元,工作单元首地址为20H,则工作单元清零程序子程序如下:ORG1000HCLR0:MOVR0,#20H;循环初始化部分MOVR7,

#96;CLRALOOP:MOV@R0,A;循环体部分INCR0;修改变量DJNZR7,LOOP;循环控制部分RETEND思考题(补充作业题):如采用CJNE指令,应如何修改程序?课程:单片机技术教材

:单片机基础例:两个三字节二进制无符号数相加,被加数放在内部RAM20H~22H单元(低字节存放在低地址单元,高字节存放在高地址单元,即低位在前,高位在后),加数放在2AH~2CH单元,和放在20H~22H单元,最高位如有进位

,则放在23H单元中。解:数据类型(二、十进制数,有、无符号数);数据结构(升、降序排列)被加数(N1)高字节(8位)中字节(8位)低字节(8位)加数(N2)高字节(8位)中字节(8位)低字节(8位)被加数(N1)加数(N2)和(N3)20H单元低字节(8位)2AH单元

低字节(8位)20H单元低字节(8位)21H单元中字节(8位)2BH单元中字节(8位)21H单元中字节(8位)22H单元高字节(8位)2CH单元高字节(8位)22H单元高字节(8位)23H单元进位位课程:单片机技术教材:单片机基础被加数N1高字节(8位)中字节(8位)低字节(8位)加数

N2高字节(8位)中字节(8位)低字节(8位)+)进位位(CY)进位位(CY)进位位(CY)和N3进位高字节(8位)中字节(8位)低字节(8位)程序流程框图程序清单思考题:统计正数、负数、零的个数。课程:单片机技术教材:单片机基础开始初始化数据指针结

束两数加完否NY初始化控制变量取加数N1取加数N2两数相加并保存修改指针变量数据处理课程:单片机技术教材:单片机基础ORG0030HADDDUO:MOVR0,#20H;循环初始化部分MOVR1,#2AH;

MOVR7,#03H;循环次数CLRC;LOOP:MOVA,@R0;循环体部分ADDCA,@R1;MOV@R0,A;INCR0;修改指针变量INCR1;DJNZR7,LOOP;循环控制部分CLRA;循环结束处理部分ADDCA,#00H;MOV@R0,A;RET;E

ND课程:单片机技术教材:单片机基础例:把内部RAM中起始地址为DATA的数据串传送到外部RAM以BUFFER为首地址的区域,直到发现“$”字符的ASCⅡ码为止,同时规定数据串最大长度为32个字节。解:(1)分析任务:数据传送

;(2)算法:比较、控制转移(3)程序结构:分支、循环(4)数据类型:多字节字符串(5)RAM单元安排:内部RAM单元、外部RAM单元(6)采用寄存器间接寻址方式(R0、R1或DPTR)外部RAMXX内部RAMDAT

A单元ABUFFER单元YY(A)≠$(A)=$结束课程:单片机技术教材:单片机基础(7)程序流程框图;开始初始化数据指针结束数传送完否NY初始化控制变量取数数据传送修改指针变量是$吗?YN课程:单片机技术教材:单片机基础ORG0030HDATACS:MOVR0,#DATA;DATA数据区

首地址MOVDPTR,#BUFFER;BUFFER数据区首地址MOVR1,#20H;最大数据串长LOOP:MOVA,@R0;取数据SUBBA,#24H;判是否为“$”字符JZLOOP1;是“$”字符,转结束MOVA,@R0;MOVX@

DPTR,A;数据传送INCR0;INCDPTR;DJNZR1,LOOP;循环控制LOOP1:RET;结束END课程:单片机技术教材:单片机基础在外部RAM首地址为table的数据表中,有10字节数据。试编程实现将每个字节的最高位无条件置1。ORG0030HMOVD

PTR,#tableMOVR6,#10LOOP:MOVXA,@DPTRSETBACC.7MOVX@DPTR,AINCDPTRDJNZR6,LOOP课程:单片机技术教材:单片机基础试编程实现两个ASCII码字符串是否相等。字符串的长度在内部RAM41H单元中,第1

个字符串的首地址为42H,第2个字符串的首地址为52H。如果两个字符串相等,则置内部RAM40H单元为00H;否则置40H单元为FFH。课程:单片机技术教材:单片机基础ORG0030HASCE:MOVR0,#42HMOVR1,#52HMOVR7,41HLOOP:MOVA,@R0MOV3

0H,@R1CJNEA,30H,LKINCR0INCR1DJNZR7,LOOPMOV40H,#00HSJMPLOOP1LK:MOV40H,#0FFHLOOP1:RETEND课程:单片机技术教材:单片机基础4.380C51

单片机汇编语言程序设计举例4.3.2定时程序在单片机的控制应用中,常有定时的需要,如定时中断、定时检测和定时扫描等。定时功能除可以使用纯硬件电路、可编程定时/计数器实现外,还可以使用软件程序(定时程序)完成。定时程序是典型的循环程序,它是通过执行一个具有固定延迟时间的循环体来实现

定时的。(1)单循环定时程序MOVR5,#TIME;LOOP:NOP;NOP;DJNZR5,LOOP;开始初始化部分结束循环控制部分NY循环体课程:单片机技术教材:单片机基础假设单片机晶振频率fosc=6MHz,则一个机器周期为2μs,NO

P、DJNZ指令分别是单、双机器周期指令。定时程序的总延迟时间是循环程序段延时时间的整数倍,由于R5是8位寄存器,因此,这个定时程序的最长定时时间为:256(28)×8=2048(μs)(2)较长时间的定时程序(多重循环定时子程序)TIME:MOVR5,#TTME1;LOOP:MOVR4

,#TEME2;LOOP1:NOP;NOP;DJNZR4,LOOP1;DJNZR5,LOOP2;RET;开始外循环初始化结束内循环控制NY内循环初始化外循环控制内循环体NY课程:单片机技术教材:单片机基础这个定时子程序的最长定时时间为:[256(28)×

4+2+1]×256(28)×2+4=525828(μs)(3)调整定时时间在定时程序中可通过在循环程序段中增减指令的方法对定时时间进行微调。例:MOVR0,#TTME;LOOP:ADDA,R1;INCDPTR;DJNZR0,LOOP;由于A

DD、INC、DJNZ指令的机器周期分别为1、2、2,所以,该程序定时时间为=(1+2+2)×2μs×Time(μs)。课程:单片机技术教材:单片机基础假定要求定时时间为24us。对于这个定时程序,只须增加一条NOP指令即可实现

。MOVR0,#TIME;LOOP:ADDA,R1;INCDPTR;NOP;DJNZR0,LOOP;只须TIME取2,即可得到精确的24μs定时。(4)以一个基本的延时程序满足不同的定时要求如果一个系统有多个定时需要,我们就可以设计一个基本延时程序,使其延时时间为各定时时间的最大公约数,

然后可以以此基本程序作为子程序,通过调用的方法实现所需不同定时。课程:单片机技术教材:单片机基础例:在单片机应用系统中,假设需要的定时时间分别为5S、10S、20S,可设计一个1S延时子程序DELAY,则5S、10S、20S的定时时间可通过调用DELAY实现

。MOVR0,#05H;5S定时LOOP:LCALLDELAY;DJNZR0,LOOP1;┋MOVR0,#0AH;10S定时LOOP2:LCALLDELAY;DJNZR0,LOOP2;┋MOVR0,#14H;20S定时LOOP3:LCALLDELAY;DJNZR0,LOOP3;┋

课程:单片机技术教材:单片机基础4.3.3查表程序所谓查表程序,就是指预先把数据以表格形式存放在程序存储器中,然后使用程序读出,这种能读出表格数据的程序就称之为查表程序。查表操作对单片机的控制应用十分重要,查

表程序常用于实现非线性修正,非线性函数转换以及代码转换等场合。MCS-51单片机指令系统中有两条专用查表指令:(1)MOVCA,@A+DPTR;A←((A)+(DPTR))(2)MOVCA,@A+PC;A←((A)+(PC))这两条查表指

令的功能是完全相同的,其共同优点是:能在不改变PC和DPTR的状态下,只根据A的内容就可以取出表格中的数据。注意:A的内容均为8位无符号数。课程:单片机技术教材:单片机基础对于第一条指令,适用于64K

BROM范围内查表(即数据表格的大小和位置可以在64KB程序存储器中任意安排,一个数据表格可以被多个程序块使用),编写查表程序时,首先把表的首地址送入DPTR中,再要将查表的数据序号(或下标值)送入A中,然后就可以使用该指令进行查表操作,并把结果送A中。对于第二条指令,常用于“本地”范围

查表(即数据表格只能放在该指令后面256个地址单元之内,而且表格只能被本程序使用),编写查表程序时,首先把查表数据的序号送入A中,再把从查表指令的下一条指令的首地址到表的首地址间的偏移量与A值相加,然后再使用该指令进行查表操作,并把结果送

入A中。课程:单片机技术教材:单片机基础例:设计一个子程序,其功能为根据x的内容(0~9之间)查平方表,求出相应的结果y(y=x2)。假设x的内容已存放在内部RAM30H单元中,求出y的内容存放在内部RAM40H单元中。ORG1000H1000HSQR:MOVA,30H;A←x1

002HPUSHDPH;现场保护1004HPUSHDPL;1006HMOVDPTR,#TAB1;DPTR←表首地址TAB11009HMOVCA,@A+DPTR;查表得y100AHMOV40H,A;40H←y100CHPOPDP

L;现场恢复100EHPOPDPH;1010HRET1011HTAB1:DB00H,01H,04H,09H,10H,19HDB24H,31H,40H,51H课程:单片机技术教材:单片机基础上例中,如果使用MOVCA,@A+PC指令,则编程如下:ORG1

000H1000HSQR:MOVA,30H;A←x1002HPUSHDPH;现场保护1004HPUSHDPL;1006HADDA,#07H;加偏移量1008HMOVCA,@A+PC;查表得y1009HMOV40H,A;40H←y100BHPO

PDPL;现场恢复100DHPOPDPH;100FHRET1010HTAB1:DB00H,01H,04H,09H,10H,19HDB24H,31H,40H,51H此题中,偏移量=1010H-1009H=07H课程:单片机技术教材:单片机基础4.4单片机汇编语言源程序的编辑和汇编4.580C51

单片机汇编语言伪指令汇编语言程序必须转换为二进制的机器代码程序,单片机才能够执行。汇编语言程序转换为机器代码程序的过程,称之为汇编。汇编的方法有两种:即机器交叉汇编和手工汇编。所谓手工汇编,就是指程序设计人员通过查指令编码表,逐个把助记符指令“翻译”成

机器码。手工汇编方法通常用于短、小程序的汇编。长程序则必须通过机器交叉汇编的方法进行汇编。所谓机器交叉汇编,就是指程序设计人员使用一种计算机的汇编程序去汇编另一种计算机的源程序,具体地说就是运行汇编程序进行汇编的是一种计算机,而运行汇编得到的目标程序的则是另一种计算机。单片机只能采用机器交

叉汇编的方法对汇编语言程序进行汇编课程:单片机技术教材:单片机基础对汇编语言程序进行机器交叉汇编时,必须告诉计算机的汇编程序应该如何完成汇编工作,这一任务就是通过使用伪指令来实现的。伪指令是程序设计人员发给汇编程序的指

令,也称汇编命令或汇编程序控制指令。它具有控制汇编程序的输入输出、定义数据和符号、条件汇编、分配存储空间等功能。伪指令没有与之相对应的二进制机器代码,因此,在汇编语言指令系统汇总表中,查不到相对应的二进制机器代码。不同汇编语言的伪指令也有所不同,但一些基本指令是相同的。手工汇编不需要伪指令,

但机器交叉汇编必须使用伪指令。在对汇编语言程序进行机器交叉汇编前,伪指令存在于汇编语言程序中,但汇编后得到的机器代码程序中不存在伪指令相对应的二进制机器代码,这一点请特别注意。课程:单片机技术教材:单片机基础(1)ORG(ORiGin)汇编起始地址命令

本命令总出现在汇编语言源程序的开头位置,用于规定目标程序的起始地址,即此命令后面的程序或数据块的起始地址。命令格式:[〈标号:〉]ORG〈地址〉其中[〈标号:〉]是选择项,根据需要选用,〈地址〉项,通常为16位绝对地址,但也可以使用标号或表达

式表示。在汇编语言程序的开始,通常都用一条ORG伪指令来规定程序的起始地址,如果不用ORG规定,则汇编得到的目标程序将从0000H开始。例:ORG8000H即规定标号START代表地址8000H,START:MOVA,#00H

;目标程序的第一条指令从8000H┇开始。课程:单片机技术教材:单片机基础(2)END(ENDofassembly)汇编终止命令本命令用于终止汇编语言源程序的汇编工作,END是汇编语言源程序的结束标志,因此,在整个汇编语言源程序中只能有一个END指令,且位于程序的最后。如果END

命令出现在程序中间,则在END之后的指令,汇编程序将不予处理。命令格式:[〈标号:〉]END[〈表达式〉](3)EQU(EQUate)赋值命令本命令用于给字符名称赋予一个特定值,赋值以后,其值在整个程序中有效。命令格式:〈字符名称〉E

QU〈赋值项〉其中〈赋值项〉可以是常数,地址,标号或表达式,其值为8位或16位二进制数。赋值以后的字符名称既可以作地址使用,也可以作立即数使用。课程:单片机技术教材:单片机基础例:HOUREQU30HORG1000HSTART:MOVHOUR,#40H;等同于START

:MOV30H,#40H;(4)DB(DefineByte)定义数据字节命令本命令用于从指定的地址单元开始,在程序存储器的连续单元中定义字节数据。命令格式:[〈标号:〉]DB〈8位数表〉常使用本命令存放数据表格。例:存放7段数码管(共阳极)显示的十六进制基数(0~F)的十

六进制数的字形代码,可使用多条DB命令定义。课程:单片机技术教材:单片机基础DB0C0H,0F9H,0A4H,0B0H;0,1,2,3DB99H,92H,82H,0F8H;4,5,6,7DB80H,90H,88H,83H;8,9,A,BDB0C6H,0A

1H,86H,84H;C,D,E,F查表时,为确定数据区的起始地址,可采用两种方法:a)根据DB命令前一条指令的地址确定。把该地址加上它的字节数就是DB的定义的数据字节的起始地址。例:8100:MOVA,#49H;一字节指令TAB:DB0COH,0F9H,0A4H,0B0H;┋定义的7段数码管(

共阳极)显示的十六进制基数(0~F)的十六进制数的字形代码从8101H地址单元开始存放。课程:单片机技术教材:单片机基础b)使用0RG命令专门规定。例:ORG8100HTAB:DB0COH,0F9H,0A4H,0B0H;┋定义的7段数码管(共阳极)显示的十六进制基数(0~F)的十

六进制数的字形代码从8100H地址单元开始存放。(5)DW(DefineWord)定义数据字命令本命令用于从指定地址开始,在程序存储器单元中定义16位的数据字。命令格式:[〈标号:〉]DW〈16位数表〉存放时,数据字的高8位在前(

低地址),低8位在后(高地址)。课程:单片机技术教材:单片机基础例:DW“AA”;存入41H,41H。DW“A”;存入00H,41HDB和DW定义的数表,数的个数不得超过80个。如数据的数目较多时,可使用多个

定义命令。在MCS-51程序设计应用中,常以DB来定义数据,以DW来定义地址。(6)DS(DefineStonage)定义存储区命令本命令用于从指定地址开始,保留指定数目的字节单元作为存储器,供程序运行使用,汇编时,对这些单元不赋值。命令格式:[〈标号:〉]DS〈16位数表〉例:ORG8100H

DS08H从8100H地址开始,保留8个连续的地址单元。课程:单片机技术教材:单片机基础(7)BIT位定义命令本命令用于给字符名称赋以位地址命令格式:〈字符名称〉BIT〈位地址〉其中〈位地址〉可以是绝对地址,也可以是符号地址(

即位符号名称)例:AQBITP1.0把P1.0的位地址赋给变量AQ,在其后的编程中,AQ就可以作为位地址使用。课程:单片机技术教材:单片机基础补充内容:子程序结构子程序结构是一种非常重要的程序结构。在一个程序中经常遇

到反复多次某程序段的情况,如果重复书写这个程序段,会使程序变得冗长而杂乱。对此,可采用子程序结构,即把重复的程序段编写为一个子程序,通过主程序调用而使用它。这样不但减少了编程工作量,而且也缩短了程序的长度。调用和返回构成了子程序调用的完整过程。

为了实现这一过程,必须有子程序调用指令和返回指令。调用指令在主程序中使用,而返回指令则应该是子程序的最后一条指令。执行完这条指令后,程序返回主程序断点处继续执行。课程:单片机技术教材:单片机基础(1)子程序的编程原

则在实际的单片机应用系统软件设计中,为了程序结构更加清晰,易于设计,易于修改,增强程序可读性,基本上都要使用子程序结构。子程序作为一个具有独立功能的程序段,编程时需遵循以下原则:a)子程序的第一条指令必须有标号,明确子程序入口地址;b)以返回指令RE

T结束子程序;c)子程序说明部分;子程序名称:提供给主程序调用的名字,通常用符号或子程序第一条语句的标号来表示。子程序功能:简要说明子程序能完成的主要功能。子程序入口参数:主程序需要向子程序提供的参数。课程:单片机技术教材:单片机基础子程序出口参数:子

程序执行完之后向主程序返回的参数。子程序占用资源:子程序中使用了哪些存储单元、寄存器等子程序堆栈深度:子程序占用堆栈区的最大字节数。子程序嵌套情况:子程序中继续调用子程序的情况。子程序的字节数:子程序中所有指令字节数的总和。子程序执行时间:子程序中所有指令的机器周期数总和。这些说明是写给程

序员看的,供以后使用子程序时参考。d)较强的通用性和可浮动性,尽可能避免使用具体的内存单元和绝对转移地址等。e)注意保护现场和恢复现场。子程序在编制过程中经常会用到一些通用单元,如工作寄存器、累加器、数据指

针DPTR以及PSW等。而这些工作单元在调用课程:单片机技术教材:单片机基础它的主程序中也会用到,为此,需要将子程序用到的这些通用编程资源加以保护,称为保护现场。在子程序执行完后需恢复这些单元的内容,称为恢复

现场。通常保护和恢复现场是在子程序中利用堆栈操作实现的,在子程序的开始部分把子程序中要用到的编程资源都保护起来,在执行返回指令之前恢复现场,这是一种比较规范的方法。另外,保护现场和恢复现场也可以在主程序中实现。在调用子程序前保护现场,子程序返回后恢复现场,

这种方式比较灵活,可以根据当时的需要确定要保护的内容。课程:单片机技术教材:单片机基础(2)参数传递的方法主程序调用子程序时,主程序和子程序之间存在着参数互相传递的问题。参数传递一般有以下几种方法:1)寄存器传递参数通过寄

存器A传递入口参数和出口参数。例:假设a、b均小于10,计算c=a2+b2,其中a事先存在内部RAM的31H单元,b事先存在32H单元,请把c存入33H单元。SQR:y=x2子程序ORG0080H;主程序MAIN:MOVSP,#3FH;设置栈底MOVA,31H;取数a存放到A中作为入口参数LCAL

LSQR;课程:单片机技术教材:单片机基础MOVR1,A;出口参数:a的平方值存放在A中MOVA,32H;取数b存放到A中作为入口参数LCALLSQR;ADDA,R1;MOV33H,A;SJMP$;子程序名称:SQR功能:通过查表求出平方值y=x2入口参数:x存放在累加器A中出口参数

:求得的平方值y存放在A中占用资源:累加器A,数据指针DPTR课程:单片机技术教材:单片机基础SQR:PUSHDPH;保护现场,将主程序中DPTR的高8位入栈PUSHDPL;保护现场,将主程序中DPTR的低8

位入栈MOVDPTR,#TABLE;在子程序中重新使用DPTR,DPTR←表首地址MOVCA,@A+DPTR;查表POPDPL;恢复现场,将主程序中DPTR的低8位从堆栈中弹出POPDPH;恢复现场,将主程序中DPTR的高8位从

堆栈中弹出RETTABLE:DB0,1,4,9,16,25,36,49,64,81END课程:单片机技术教材:单片机基础2)利用堆栈传递参数*ORG0000H;主程序MAIN:MOVSP,#3FH;设置栈底PUSH31H;将数a存放到堆栈中,作为入口参数LCALLS

QR;POPACC;MOVR1,A;出口参数:a的平方值存放在A中PUSH32H;LCALLSQR;POPACC;ADDA,R1;MOV33H,A;SJMP$;课程:单片机技术教材:单片机基础子程序名称:SQR功能:通过查表求出平方值y=x2入口参数

:x存放在堆栈中出口参数:求得的平方值y存放在堆栈中占用资源:累加器A,数据指针DPTRSQR:MOVR0,SP;R0作为参数指针DECR0;堆栈指针退回子程序调用前的地址DECR0;XCHA,@R0;取出参

数MOVDPTR,#TABLE;DPTR←表首地址MOVCA,@A+DPTR;查表XCHA,@R0;查表结果放回堆栈中RETTABLE:DB0,1,4,9,16,25,36,49,64,81课程:单片机技术教材:单片机基础(3)子程序

调用中应注意的问题由于子程序调用过程中,CPU自动使用了堆栈,因此,容易出现以下几种错误:a)忘记给堆栈指针SP赋栈底初值,堆栈初始化位置与第1组工作寄存器重合,如果以不同的方式使用了同一个内存区域,会导致程序乱套。b)程序中的PUSH和POP没有配对使用,使RET指令执行时不能弹出正确的

断点地址,造成返回错误。c)堆栈设置太小,堆栈操作增长太大,使栈区与其它内存单元重合。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?