欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    MCS51汇编语言程序设计.docx

    • 资源ID:12279317       资源大小:104.68KB        全文页数:19页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MCS51汇编语言程序设计.docx

    1、MCS51汇编语言程序设计第四章MCS-51汇编语言程序设计重点及难点:单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。教学基本要求:1、掌握汇编语言程序设计的基本概念;2、掌握伪指令的格式、功能和使用方法;3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法;4、掌握常用汇编语言程序设计步骤和方法。教学内容4.1 汇编语言程序设计概述一、汇编语言的特点(1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。(2)使用汇编语言编程比使用高级语言困难,因为汇编语言是

    2、面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。(3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。(4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。二、汇编语言的语句格式 : ;三、汇编语言程序设计的步骤与特点(1)建立数学模型 (2)确定算法(3)制定程序流程图(4)确定数据结构(5)写出源程序(6)上机调试程序4.2 伪 指 令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。

    3、MCS- 51常见汇编语言程序中常用的伪指令:1ORG (ORiGin) 汇编起始地址命令 ORG 2END (END of assembly) 汇编终止命令 END 3EQU (EQUate) 赋值命令 EQU 4DB (Define Byte) 定义字节命令 DB 5DW (Define Word) 定义数据字命令 DW 6DS (Define Stonage ) 定义存储区命令 DW 7BIT位定义命令 BIT 8DATA数据地址赋值命令 DATA 4.3 单片机汇编语言程序的基本结构形式一、顺序程序例4-1 三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数

    4、在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOVR0 ,# 52H;被加数的低字节地址MOVR1 ,# 55H;加数的低字节地址MOVA , R0ADDA , R1;低字节相加MOV R0 ,A;存低字节相加结果DECR0DECR1MOVA , R0ADDCA , R1;中间字节带进位相加MOV R0 ,A;存中间字节相加结果DECR0DECR1MOVA , R0ADDCA , R1;高字节带进位相加MOV R0 ,A;存高字节相加结果CLRAADDCA ,# 00H;存放进位的单元地址MOV R0 ,A;

    5、进位送00H位保存二、分支程序1单分支程序 例4-2 变量X存放在VAR单元内,函数值Y存放在FUNC单元中,试按下式的要求给Y赋值。本题的程序流程见图4-1(a)。参考程序: ORG1000HVARDATA30HFUNCDATA31HMOVA ,VAR;A XJZDONE;若X=0,则转DONEJNBACC.7 ,POSI;若X0,则转POSIMOVA ,# 0FFH;若X0,则Y = 1DONE:MOVEFUNC ,A;存函数值SJMP$END图4-1 例4-2的分支流程图这个程序的特征是先比较判断,然后按比较结果赋值,这实际是三分支而归一的流程图,因此,至少要用两个转移指令。初学者很容易

    6、犯的一个错误是:漏掉了其中的SJMP DONE语句,因为流程图中没有明显的转移痕迹。这个程序也可以按图4-1(b)的流程图来编写,其特征是先赋值,后比较判断,然后修改赋值并结束。参考程序: ORG1000HVARDATA30HFUNCDATA31HMOVA ,VAR;A XJZDONE;若X=0,则转DONEMOVR0 ,# 0FFH;先设X0,R0 = FFHJNBACC.7 ,NEG;若X0,R0 = 1NEG:MOVA ,# 01H;若X0,则Y = 1DONE:MOVFUNC ,A;存函数值SJMP$END2多分支程序图4-2 多分支程序转移三、循环程序循环程序一般由4部分组成:(1)

    7、置循环初值,即确立循环开始时的状态。(2)循环体(工作部分),要求重复执行的部分。 (3)循环修改,循环程序必须在一定条件下结束,否则就要变成死循环。(4)循环控制部分,根据循环结束条件,判断是否结束循环。以上4个部分可以有两种组织方式。例4-3 从BLOCK单元开始存放一组无符号数,一般称为一个数据块。数据块长度放在LEN单元,编写一个求和程序,将和存入SUM单元,假设和不超过8位二进制数。在置初值时,将数据块长度置入一个工作寄存器,将数据块首地址送入另一个工作寄存器,一般称它为数据块地址指针。每做一次加法之后,修改地址指针,以便取出下一个数来相加,并且使计数器减1。到计数器减到0时,求和结

    8、束,把和存入SUM即可。参考程序:各单元的地址是任意的。LENDATA20HSUMDATA21HBLOCKDATA22HCLRA;清累加器MOVR2 ,LEN;数据块长度送R2MOVR1 ,# BLOCK;数据块首址送RlLOOP:ADDA ,R1;循环做加法INCR1;修改地址指针DJNZR2 ,LOOP;修改计数器并判断MOVSUM ,A;存和 以上程序在计数器初值不为零时是没有问题的,但若是数据块的长度有可能为零,则将出现问题。当R2初值为零,减1之后将为FFH,故要做256次加法之后才会停止,显然和题意不符。若考虑到这种情况,则可按图4-3(b)的方式来编写程序。在做加法之前,先判断一

    9、次R2的初值是否为零。整个程序仍基本套用原来的形式:CLRA;清累加器MOVR2 ,LEN;数据块长度送R2MOVR1 ,# BLOCK;数据块首址送RlINCR2SJMPCHECKLOOP:ADDA ,R1;循环做加法INCR1;修改地址指针CHECK:DJNZR2 ,LOOPMOVSUM ,A;存和4.4 MCS-51单片机汇编语言程序设计举例一、算术运算程序 例4-4 假定R2、R3和R4、R5分别存放两个16位的带符号二进制数,其中R2和R4的最高位为两数的符号位。请编写带符号双字节二进制数的加减法运算程序,以BSUB为减法程序入口,以BADD为加法程序入口,以R6、R7保存运算结果。

    10、参考程序:BSUB:MOVA ,R4;取减数高字节CPLACC.7;减数符号取反以进行加法MOVR4 ,ABADD:MOV A ,R ;取被加数MOVC ,ACC.7MOVF0 ,C;被加数符号保存在F0中XRLA , R4;两数高字节异或MOVC ,ACC.7;两数同号CY=0,两数异号CY=1MOVA , R2CLRACC.7;高字节符号位清“0”MOVR2 ,A;取其数值部分MOVA ,R4CLRACC.7;低字节符号位清“0”MO VR4 ,A;取其数值部分JCJIAN;两数异号转JIANJIA:MOVA , R3;两数同号进行加法ADDA , R5;低字节相加MOVR7 ,A;保存和

    11、MOVA , R2ADDCA , R4;高字节相加MOVR6 ,A;保存和JBACC.7 ,QAZ;符号位为“1”转溢出处理QWE:MOVC ,F0 ;结果符号处理MOVACC.7,C MOVR6 ,ARETJIAN:MOVA , R3;两数异号进行减法CLRCSUBBA , R5;低字节相减MOVR7 ,A;保存差MOVA ,R2SUBBA , R4;高字节相减MOVR6 ,A;保存差JNBACC.7 ,QWE;判断差的符号,为“0”转QWEBMP:MOVA , R7;为“1”进行低字节取补CPLAADDA ,#1MOVR7 ,AMOVA , R6;高字节取补CPLAADDCA ,# 0MO

    12、VR6 ,ACPLF0;保存在F0中的符号取反SJMPQWE;转结果符号处理QAZ:;溢出处理二、数制转换程序 例4-5 在内部RAM的hex单元中存有2位十六进制数,试将其转换为ASCII码,并存放于asc和asc+1两个单元中。主程序(MAIN): MOVSP ,# 3FHMAIN:PUSHhex;十六进制数进栈ACALLHASC;调用转换子程序POPasc;第一位转换结果送asc单元MOVA ,hex;再取原十六进制数SWAPA;高低半字节交换PUSHACC ;交换后的十六进制数进栈ACALLHASCPOPasc+l ;第二位转换结果送asc+l单元子程序(HASC):HASC:DECS

    13、P;跨过断点保护内容DECSPPOPACC;弹出转换数据ANLA ,# 0FH;屏蔽高位ADDA ,# 7;修改变址寄存器内容MOVCA ,A+PC;查表PUSHACC;查表结果进栈INCSP;修改堆栈指针回到断点保护内容INCSPRETSPASCTAB:DB“0,1,2,3,4,5,6,7”;ASCII码表DB“8,9,A,B,C,D,E,F”三、定时程序有多个定时需要,我们可以先设计一个基本的延时程序,使其延迟时间为各定时时间的最大公约数,然后就以此基本程序作为子程序,通过调用的方法实现所需要的不同定时。例如要求的定时时间分别为5s 、l0s和20s并设计一个1s延时子程序DELAY,则不

    14、同定时的调用情况表示如下:MOVR0 ,# 05H;5s延时LOOP1:LCALLDELAYDJNZR0 ,LOOP1MOVR0 ,# 0AH;10s延时LOOP2:LCALLDELAYDJNZR0 ,LOOP2MOVR0 ,# 14H;20s延时LOOP3:LCALLDELAYDJNZR0 ,LOOP3四、查表程序一个查表程序的例子。假定有44键盘,键扫描后把被按键的键码放在累加器A中,键码与处理子程序入口地址的对应关系为:键码入口地址0RK01RKl2RK2并假定处理子程序在ROM64KB的范围内分布。要求以查表方法,按键码转向对应的处理子程序。参考程序如下:MOVDPTR ,# BS;子

    15、程序入口地址表首址RLA;键码值乘以2MOVR2 ,A;暂存AMOVCA ,A+DPTR;取得入口地址低位PUSHA;进栈暂存INCAMOVCA ,A+DPTR;取得入口地址高位MOVDPH ,APOPDPLCLRAJMPA+DPTR;转向键处理子程序BS:DBRK0L;处理子程序入口地址表DBRK0HDBRK1LDBRK1HDBRK2LDBRK2H五、数据极值查找程序 例4-6 内部RAM20H单元开始存放8个无符号8位二进制数,找出其中的最大数。极值查找操作的主要内容是进行数值大小的比较。假定在比较过程中,以A存放大数,与之逐个比较的另一个数放在2AH单元中。比较结束后,把查找到的最大数送

    16、2BH单元中。程序流程如图所示。图4-8 极值查找程序流程 图4-8 极值查找程序流程参考程序如下:MOVR0 ,# 20H;数据区首地址MOVR7 ,# 08H;数据区长度MOVA ,R0;读第一个数DECR7LOOP:INCR0MOV2AH ,R0;读下一个数CJNEA ,2AH ,CHK;数值比较CHK:JNCLOOP1;A值大转移MOVA ,R0;大数送ALOOP1:DJNZR7 ,LOOP;继续MOV2BH ,A;极值送2BH单元HERE:AJMPHERE;停止六、数据排序程序例4-7 假定8个数连续存放在20H为首地址的内部RAM单元中,使用冒泡法进行升序排序编程。设R7为比较次数

    17、计数器,初始值为07H。TR0为冒泡过程中是否有数据互换的状态标志,TR0 = 0表明无互换发生,TR0 = 1表明有互换发生。 冒泡法排序程序流程参考程序:SORT:MOVR0 ,# 20H;数据存储区首单元地址MOVR7 ,# 07H;各次冒泡比较次数CLRTR0;互换标志清“0”LOOP:MOVA ,R0;取前数MOV2BH ,A;存前数INCR0MOV2AH ,R0;取后数CLRCSUBBA ,R0;前数减后数JCNEXT;前数小于后数,不互换MOVR0 , 2BHDECR0MOVR0 ,2AH;两个数交换位置INC.R0;准备下一次比较SETBTR0;置互换标志NEXT:DJNZR7 ,LOOP;返回,进行下一次比较JBTR0 , SORT;返回,进行下一轮冒泡HERE:SJMP$;排序结束本章小结:本章首先介绍了单片机汇编语言程序设计的基本概念,单片机汇编语言伪指令;详细的讲述了三种汇编语言程序设计的基本结构,即:顺序结构、分支结构和循环结构程序设计的步骤和方法;然后介绍了几种汇编语言程序设计实例。


    注意事项

    本文(MCS51汇编语言程序设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开