您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 第4章80C51单片机汇编语言程序设计资料
课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础第4章MCS-51汇编语言程序设计教学基本要求:(1)、了解MCS-51汇编语言程序设计的特点;(2)、熟悉MCS-51汇编语言伪指令的功能及用法;(3)、掌握顺序、分支、循环程序的设计方法;(4)、掌握KEIL软件的使用方法。教学重点:(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位)52H单元高字节(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)程序清单;ORG0000HLJMPMAINORG0100HMAIN:MOVRO,#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、N2中间字节和课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础DECR0;修改加数N1的地址指针内容DECR1;修改加数N2的地址指针内容MOVA,@R0;取N1的高字节ADDCA,@R1;N1、N2高字节带中间字节和进位相加MOV@R0,A;保存N1、N2高字节和MOV00H,C;高字节和的进位送00H位保存END思考题:1)上述程序中,如果只采用ADDC指令,应如何修改程序?2)如果N1、N2,N3均为十进制数,应如何修改程序?3)如果加数N1在内部RAM50H、51H和52H单元中,而加数N2与和N3均在外部RAM0053H、0054H和0055H单元中,其它条件不变,应如何修改程序?4)如果N1、N2,N3均存放在外部RAM单元,应如何修改程序?课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础例:设内部RAM40H,41H单元中分别存放8位二进制数,现分别取这两个单元中的半个字节,合并成一个新字节存放在42H单元中。要求如下:42H单元新字节的低半字节取自40H单元的低半字节,而高半字节取自41H单元的低半字节。解:(1)分析任务:拆字、合字内部RAMN140H单元N2内部RAMN442H单元N2内部RAMN341H单元N4课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础(2)算法:逻辑运算(3)程序结构:顺序(4)数据类型:单字节、二进制、无符号数(5)数据结构:升序或降序排列(6)程序设计流程框图;(7)程序清单;开始取40H单元内容取41H单元内容保留40H单元低半字节保留41H单元低半字节结束合字并保存课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础ORG0000HLJMPSTARTORG0100HSTART:MOVR1,#40H;初始化数据指针R1的内容MOVA,@R1;取40H单元内容送AANLA,#0FH;保留40H单元内容低4位INCR1;修改数据指针R1的内容XCHA,@R1;(A)与@R1内容互换ANLA,#0FH;保留41H单元内容低四位SWAPA;41H单元内容高低半字节互换ORLA,@R1;合字生成新字节INCR1;修改数据指针R1的内容MOV@R1,A;新字节送42H单元保存END作业题:上例中其它条件不变,要求如下:42H单元新字节的低半字节取自40H单元的低半字节,而高半字节取自41H单元的高半字节。课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础(1)单分支程序单分支程序是通过条件转移指令实现的,即根据条件对程序的执行进行判断,满足条件则进行程序转移,不满足条件程序就顺序执行。在MCS-51指令系统中,可利用JZ,JNZ,CJNE,DJNZ,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返回课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础ORG0000HLJMPSTARTORG0100HSTART:CLRC;进位清0MOVDPTR,#ST1;设数据指针MOVXA,@DPTR;A←((ST1)),取N1MOVR2,A;暂存N1INCDPTR;DPTR←ST2(指向N2单元)MOVXA,@DPTR;取N2存于A中SUBBA,R2;N1,N2比较(N2-N1,差在A中)JNCBIG1;N2≥N1,转BIG1,N2<N1,顺序执行XCHA,R2;N1,N2互换,A←N1SJMPBIG0BIG1:MOVXA,@DPTR;A←N2BIGO:INCDPTR;DPTR←ST3(指向N3单元)MOVX@DPTR,A;ST3←大数END返回课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础(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指令,应如何修改程序?011y000xxx课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础开始取数据X结束X=0Y=0YNX<0Y=-1Y=1NY保存数据Y返回课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础AREEQU1000H;BUFEQU2000H;ORG0000HLJMPSTARTORG0100HSTART:MOVDPTR,#ARE;数据X的地址送数据指针DPTRMOVXA,@DPTR;A←取数据XJZSUL;X=0转SULJBACC.7,NEG;X<0转NEG,否则,X>0MOVA,#01H;SJMPSUL;NEG:MOVA,#0FFH;(0FFH为-1补码)SUL:MOVDPTR,#BUF;数据Y的地址送数据指针DPTRMOVX@DPTR,A;保存Y值END返回课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础首先,在程序中建立一个转移指令表,在表格中存放转移指令,然后,通过查转移指令表的方式实现多分支程序转移。这种方法主要利用散转指令JMP@A+DPTR,此指令采用变址寻址方式,操作过程:(PC)←((A)+(DPTR)),CPU根据PC的内容来实现多分支程序转移。DPTR中送转移指令表的表首地址(常用转移指令表的名称标号代替),而A中送转移指令表中存放的转移指令的序号(常常从第0条开始)。例如,有多个分支程序,如要通过AJMP转移指令进行转移,则应把这些转移指令按序写入转移指令表中,并设置一个序号指针(例如R3),序号往往从0开始,然后可使用以下查表程序实现程序转移。(b)使用查转移指令表的方法实现多分支程序转移课程:单片机技术教材:单片机基础课程:单片机技术教材:单片机基础MOVA,R3;分支程序
本文标题:第4章80C51单片机汇编语言程序设计资料
链接地址:https://www.777doc.com/doc-4005274 .html