51系列汇编语言程序设计.ppt

上传人:s****8 文档编号:68964330 上传时间:2022-12-30 格式:PPT 页数:55 大小:736.50KB
返回 下载 相关 举报
51系列汇编语言程序设计.ppt_第1页
第1页 / 共55页
51系列汇编语言程序设计.ppt_第2页
第2页 / 共55页
点击查看更多>>
资源描述

《51系列汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《51系列汇编语言程序设计.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、中南大学信息院自动化系第第五五章章MCS51汇编语言程序设计汇编语言程序设计刘建成刘建成14.1 4.1 汇编语言程序设计概述汇编语言程序设计概述&汇编语言是面向机器硬件的语言汇编语言是面向机器硬件的语言,要求程序设计者,要求程序设计者 对对MCS-51MCS-51单片机具有很好的单片机具有很好的“软、硬结合软、硬结合”的功底。的功底。&MCS-51单片机的编程语言可以是汇编语言也可以是高级语单片机的编程语言可以是汇编语言也可以是高级语言(如言(如C语言),高级语言编程快捷,但程序长,占用存储语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存空间大,

2、执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。无论储空间小,执行快,能充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序都要转换成目标程序是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。(机器语言)单片机才能执行。2连接连接/定位器定位器L51汇编语言汇编语言源程序源程序汇编器汇编器A51符号转换程序符号转换程序OHS51绝对地址绝对地址目标程序目标程序.BINC语言程序语言程序浮浮动动地地址址目目标标程程序序编译器编译器C51HEX图图3-1两种语言源程序转换成目标程序两种语言源程序转换成目标程序1伪指令伪指令(

3、1)起始指令起始指令 ORG nn功能:定义程序或数据块的起始地址。功能:定义程序或数据块的起始地址。指示此语句后面的程序指示此语句后面的程序或数据块以或数据块以nn为起始地址,连续存放在程序存储器中。为起始地址,连续存放在程序存储器中。指令地址指令地址 机器码机器码源程序源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0 ORG 3000H 3000H 23 TAB:DB 23H,100,A 3001H 64 3002H 414.4.2 2 伪指令伪指令与与汇编汇编程序基本格式程序基本格式(2)字节定义字节定义 标号:标号

4、:DB(字节常数,或字符或表达式)(字节常数,或字符或表达式)功功能能:指指示示在在程程序序存存储储器器中中以以标标号号为为起起始始地地址址的的单单元里存放的数为字节数据(八位二进制数)。元里存放的数为字节数据(八位二进制数)。例例如如 LN:DB 32,C,25H,-1;LNLN+2 地地址单元依次存放址单元依次存放20H,43H,25H,FFH地址地址数据数据LN20LN+143LN+225LN+3FF(3)字定义字定义 标号:标号:DW(字常数或表达式)(字常数或表达式)作用:作用:指示在程序存储器中以标号为起始地址指示在程序存储器中以标号为起始地址的单元里存放的数为字数据(即的单元里存

5、放的数为字数据(即16位的二进制数),位的二进制数),例如:例如:GH:DW 1234H,5678H,08GH1234GH+25678GH+40008(5)等值指令等值指令 标号标号 EQU(数值表达式)(数值表达式)表示表示EQU两边的量等值,用于为标号或标识符赋值。两边的量等值,用于为标号或标识符赋值。例如:例如:X1 EQU 2000H X2 EQU 0FH MAIN:MOV DPTR,#X1 ;DPTR=2000H ADD A,#X2 ;A=A+0FH(4)保留字节保留字节标号:标号:DS(数值表达式)(数值表达式)作用:作用:指示在程序存储器中保留以标号为起始地指示在程序存储器中保留

6、以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。址的若干字节单元,其单元个数由数值表达式指定。例如例如L1:DS32;从从L1地址开始保留地址开始保留32个存储单元。个存储单元。(6)位定义位定义 标号标号 BIT 位地址位地址 作用:作用:同同EQU指令,不过定义的是位操作地址。指令,不过定义的是位操作地址。例如例如 AIC BIT P1.1(7)汇编结束汇编结束 END作用:作用:指示源程序段结束。指示源程序段结束。END指令放在程序的最后。指令放在程序的最后。A51汇编程序还有一些其它的伪指令。汇编程序还有一些其它的伪指令。2 2、汇编汇编程序基本格式程序基本格式(1)汇编语

7、言的语句格式 :;(2)汇编程序的一般格式 ORG XXXXH 汇编语句1 汇编语句N END返回本节8第四章第四章 MCS MCS5151汇编语言程序设计汇编语言程序设计本章介绍以下内容本章介绍以下内容汇编语言程序设计概述汇编语言程序设计概述汇编语言伪指令汇编语言伪指令源程序的编辑和汇编源程序的编辑和汇编汇编语言程序基本结构形式汇编语言程序基本结构形式程序设计举例程序设计举例9汇编语言程序基本结构形式汇编语言程序基本结构形式&按结构化程序设计思想,任何复杂程序都可由顺序结构、分支结构、循环结构等构成 10顺序结构&不同的操作顺序执行,没有分支、循环、子程序调用。&多字节无符号数相加&整个系统

8、流程就是顺序结构11顺序程序设计 顺序结构程序是一种最简单、最基本的程序(也称为简单程序),它是一种无分支的直线形程序,按照程序编写的顺序依次执行。【例】两个8位无符号数相加,和仍为8位。假设两个无符号数X1,X2分别存放于内部RAM60H、61H单元中,求其和并将和送入62H单元。程序如下:ORG0000HCLRCMOVR0,#60H;设R0为数据指针MOVA,R0;取X1INCR0ADDCA,R0;X1+X2INCR0MOVR0,A;保存结果END12&由于MCS-51指令系统中只有单字节加法指令,因此对多字节相加时运算,必须从低位字节开始分字节进行。&最低字节可以使用ADD指令&其它字节

9、相加时要把低字节的进位考虑进去因此应使用ADDC指令。顺序程序设计 13 【例】两个无符号双字节数相加。设被加数存放在内部存储器30H(高位字节)、31H(低位字节)单元,加数存放在内部存储器40H(高位字节)、41H(低位字节)单元,和存入30H(高位字节)、31H(低位字节)单元。ORG0000HCLRC;将C清零MOVR0,#31H;送被加数首址MOVR1,#41H;送加数首址MOVA,R0;取被加数低字节ADDA,R1;两个低字节相加MOVR0,A;低字节和存人被加数低字节DECR0;修改指针,指向被加数高字节DECR1;修改指针,指向加数高字节MOVA,R0;取被加数高字节ADDCA

10、,R1;高字节相加MOVR0,A;存结果END顺序程序设计 14&没有专门循环指令&通过条件判断控制循环&区分先执行后判断先判断后执行循环控制15循环程序设计循环程序一般由4部分组成。(1)置循环初值。(2)循环体。(3)循环修改。(4)循环控制。图(a)结构是“先执行后判断”,适用于循环次数已知的情况。图(b)结构是“先判断后执行”,适用于循环次数未知的情况。16循环程序设计17多字节无符号数相加设被加数与加数分别在以ADR1与ADR2为初址的片内数据存储器区域中,自低字节起,由低到高依次存放;它们的字节数为L,要求加得的和放回被加数的单元。18参考程序如下MOVR0,#ADR1MOVR1,

11、#ADR2MOVR2,#LCLRCLOOP:MOVA,R0;通过R0间址,取得被加数的一;个字节ADDCA,R1;通过R1间址,取得加数的一个字;节,与被加数的相应字节相加MOVR0,A;加得的和通过R0间址放回原被;加数单元INCR0;修改指针,指向下一个相加的数INCR1DJNZR2,LOOP;循环实现多字节数相加19分支程序&程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断,满足条件则进行程序转移,不满足条件程序就顺序执行。&在MCS-51指令系统中,通过条件到断实现单分支程序转移的指令有JZ、JNZ、CJNE和DJNZ等。&此外还有以位状态作为条件进行程序分支的指令,如

12、JC、JNC、JB、JNB和JBC等。&使用这些指令,可以完成为0、为1、为正、为负以及相等、不相等等各种条件判断。20多分支程序转移&首先把分支程序按序号进行排列,然后按照序号值进行转移。假定分支转移序号最大值为n,则分支转移结构如图21&但MCS51指令系统中没有多分支转移指令,无法使用一条指令完成多分支转移。要实现多分支转移,可采用以下几种方法。使用多条CJNE指令,通过逐次比较,实现多分支程序转移。使用查表方法实现多分支程序转移查表方法,但把转移指令直接放人表中使用堆栈操作实现多分支转移多分支程序转移22使用CJNE指令实现多分支转移分支序号值在A中,则可使用CJNE A,date,r

13、el 指令实现多分支转移这种多分支方法的优点是层次清晰,程序简单易懂。但这种方法分支速度较慢,特别是层次较多时。此外分支入口地址应在8位偏移量的有效范围之内。23使用CJNE指令实现多分支转移多分支转移流程图(与8088之INT21H中断相似)24使用查表方法实现多分支程序转移&在程序中建立一个差值表,并将各分支入口地址与该表首址的差值按序排列其中。&差值表首址送DPTR,分支序号值送A中,查表后就可通过转移指令JMP A+DPTR进行分支。25使用查表方法实现多分支程序转移&例有四个分支程序段,各分支程序段依次是从内部RAM取数从外部RAM低256E范围取数从外部RAM 4KB范围取数从外部

14、RAM 64KB范围取数&R0中存低8位地址,R1中存放高8位地址,R3中存放分支序号值。brtab为差值表首地址,br0_brtab、br3_brtab为差值26使用查表方法实现多分支程序转移27使用查表方法实现多分支程序转移28使用查转移指令表方法实现多分支程序转移假定有多个分支程序,使这些分支程序都通过绝对转移指令AJMP进行转移,并把这些转移指令按序写入表中把分支序号值乘以2的原因是AJMP指令为2字节指令。分支实现过程是根据分支序号值(R3),通过JMP指令转向BRTAB表中的某一条AJMP指令,然后再执行该AJMP指令,而把程序转移到指定分支。因此这种分支方法实际上是通过两次转移而

15、实现29使用查转移指令表方法实现多分支程序转移30使用查转移指令表方法实现多分支程序转移使用这种方法最多可实现128个分支程序的转移由于AJMP指令的转移范围是2KB,可以在2KB范围内安排分支程序因此分支范围较大,便于分支数目较多时应用如把表中的AJMP改为长转移LJMP楷今,则分支程序可以在64KB范围内转移长转移LJMP为3字节指令。31使用堆栈操作实现多分支转移&把分支程序入口地址存放在转移表中(低8位在前,高8位在后)&先把分支程序人口地址进栈然后利用返回指令RET把分支程序入口地址装入PC,所以接着就转去执行分支程序32使用堆栈操作实现多分支转移33第四章第四章 MCS MCS51

16、51汇编语言程序设计汇编语言程序设计本章介绍以下内容本章介绍以下内容汇编语言程序设计概述汇编语言程序设计概述汇编语言伪指令汇编语言伪指令源程序的编辑和汇编源程序的编辑和汇编汇编语言程序基本结构形式汇编语言程序基本结构形式程序设计举例程序设计举例344.3 汇编语言程序设计举例&算术运算程序加减法乘法除法&数制转换ASCII码与16进制相互转换BCD码与16进制相互转换354.3 汇编语言程序设计举例&定时程序在单片机的控制应用中,常有定时的需要如定时中断、定时检测和定时扫描等定时功能除可以使用定时器计数器实现之外更多地是使用定时程序完成。定时程序是典型的循环程序,它是通过执行一个具有固定延迟时

17、间的循环程序来实现延时的。因此也把定时程序称之为延时程序。定时程序只能使用汇编语言编写。364.3 汇编语言程序设计举例&定时程序短时间长时间调整定时时间一个程序多种定时37定时程序1单循环定时程序MOV R5,#TlME LOOP:NOP;1机器周期 NOP;1机器周期 DJNZ R5,LOOP;2机器周期如单片机的晶振颇率为6MHz,则一个机器周期是2uS。因此一次循环的延迟时间为8uS,程序总的延迟时间为8xtime(uS)。本程序的实际延迟时间决定于装入寄存器R5的定时时间常数。R5是8位寄存器,因此这个程序的最长定时时间为256X8=2048(uS)。即定时范围是2048uS(2.0

18、48mS)-时间延迟比较小384.3 汇编语言程序设计举例&短时间定时程序12M晶振晶振,50ms延时延时Delay:MOVR7,#125DEL1:MOVR6,#200DEL2:DJNZR6,DEL2DJNZR7,DEL1RET调用调用CALLDelayMOVR7,#?CALLDelay39定时程序2.较长时间的定时程序 为了加长定时时间,通常采用多重循环的方法。例如下列双重循环的定时程序,最长可延时262658个机器周期,6Mhz晶振时,即525316uS(525mS或0.5S)MOV R5,#TIME1LOOP2:MOV R4,#TIME2LOOP1:NOPNOP DJNZ R4,LOOP

19、1 DJNZ R5,LOOP2定时时间微调:时间系数、循环时间长度40定时程序3.以一个基本的延时程序满足不同的定时要求如果一个系统中有多个定时需要,我们就可以设计一个基本的延时程序,使其延迟时间为各定时时间的最大公约数最大公约数,然后就可以以此基本程序作为子程序,通过调用的方法实现所需要的不同定时。例如:设计一个1秒延时子程序,可以实现定时时间分别为5秒、10秒和20秒等的定时41数字滤波算法数字滤波算法由于工业生产的现场环境非常恶劣,各种干扰源很多,计算机系统通过输入通道采集到的数据信号,虽经硬件电路的滤波处理,但仍会混有随机干扰噪声。因此,为了提高系统性能,达到准确的测量与控制,一般情况

20、下还需要进行数字滤波。数字滤波数字滤波:计算机系统对输入信号采样多次,然后用某种计算方法进行数字处理,以削弱或滤除干扰噪声造成的随机误差,从而获得一个真实信号的过程。根据预定的滤波算法编制相应的程序,实质上是一种程序滤波。因而可靠性高,稳定性好,修改滤波参数也容易,而且一种滤波子程序可以被多个通道所共用,因而成本很低。另外,数字滤波可以对各种干扰信号,甚至极低频率的信号进行滤波。它的不足之处是需要占用CPU的机时。42数字滤波算法数字滤波算法常用的方法有以下几种:平平均均值值法法:对一点数据连续采样多次(可取35次),以平均值作为该点的采样结果。这种方法可以减少系统的随机干扰对采集结果的影响。

21、去极值平均去极值平均 加权平均加权平均 比比较较舍舍取取法法:对每个采样点连续采样几次,根据所采样数据的变化规律,确定取舍办法来剔除偏差数据。例如,“采三取二”,即对每个采样点连续采样三次,取两次相同数据作为采样结果。43 中中值值法法:对一个采样点连续采集多个信号,并对这些采样值进行比较,取中值作为该点的采样结果。X1 X2 X3 X4E99,则两数交换,否则不动,然后E99和E98进行比较,按同样的原则,决定是否交换,一直比较下去,最后完成E2和E1的比较及交换。经过N-1次比较后,E1位置必然得到数组中的最大值。犹如一个气泡冒到水顶。如此下去,经过N!次比较便完成N个数据的排序。52例:

22、100个数据(单字节),从小到大进行排序 MOV R2,#100BUB:MOV R0,#20HCLR F0DEC R2BL:CJNE R2,#0,BBMOV 7F,R2MOV 20H,R0MOV A,R0INC R0MOV 21H,R0CJNE A,21H,LOPLOP:JC BMOV R0,20HDEC R0MOV R0,21HINC R0SETB F0B:DJNZ 7FH,BLJB F0,BUBBB:SJMP$数据排序程序53如果数据是双字节数,一次需要比较两个字节,从小到大进行排序。数据排序程序54数据检索程序&数据检索程序是在数据区中查找关键字的操作有两种数据检索方法,即顺序检索和对分检索。&顺序检索:把关键字与数据区中的数据从前向后逐个比较,判断是否相等&对分检索:按对分原则取数进行关键字比较(前提是数据已排好序),具体过程是:取数组中间位置的数与关键字比较,如果相等则检索成功。如果取数大于关键字,则下次对分检索的范围是从数据区起点到本次取数。如果取数小于关键字,则下次对分检索的范围是从本次取数到数据区终点。55

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁