第四章 单片机程序设计基础_第1页
第四章 单片机程序设计基础_第2页
第四章 单片机程序设计基础_第3页
第四章 单片机程序设计基础_第4页
第四章 单片机程序设计基础_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章单片机程序设计基础主讲教师:高田第四章

单片机程序设计基础汇编语言概述汇编语言程序的基本结构汇编语言程序设计举例第四章

汇编语言概述汇编语言特点用助记符及标号地址、标号等符号来书写的程序设计语言称汇编语言,用汇编语言编写的程序称为汇编语言程序指令采用助记符而不是使用指令码表示地址采用标号地址,而不是真正的实际地址采用助记符和标号地址为使用者提供了方便,不必记忆指令的机器码,也不必进行实际的地址计算。将助记符翻译成机器码和将标号地址换算成实际地址的工作称为汇编第四章

汇编语言概述汇编的2种方式手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。机器汇编:用汇编程序进行汇编汇编过程源程序(汇编语言程序)目的程序(机器语言程序)汇编程序(完成源程序到目的程序的翻译工作)第四章

汇编语言概述汇编语言的特点:助记符指令和机器指令一一对应,因此使用汇编语言编写的程序代码效率高,占用存储空间小,运行速度快。使用汇编语言能编写出最优化的程序汇编语言能直接与存储器和接口电路打交道,也能申请中断,因此汇编语言程序能直接管理和控制硬件设备汇编语言是面向计算机的,不是独立于CPU的,每种微处理器都有专门的指令系统,有自己的汇编语言,彼此之间不能通用。程序设计人员必须对计算机硬件有相当深入的了解,才能使用汇编语言编写程序,由于汇编语言与机器有关,因此汇编语言程序不易移植,但是掌握一种汇编语言有助于学习其他的汇编语言。第四章

汇编语言概述汇编语言程序的语句格式MCS—51汇编语言程序的语句格式为[标号:]操作码[操作数][;注释]有方括号的部分是可选择部分,可有可无,视需要而定第四章

汇编语言概述标号标号是语句地址的标志符号,汇编语言程序的语句通过标号才能访问到该语句。对于标号的使用有以下规定:标号由8个或8个以下ASCII字符组成,头1个字符必须是字母,其余字符可以是字母、数字和特定字符不能使用汇编语言中已经定义的符号作为标号,如指令助记符、伪指令、SFR的符号名称等标号后必须紧跟一个冒号同1标号在1个程序只能定义1次,不能重复定义1条语句有无标号是任选的,根据程序中是否访问该语句而定第四章

汇编语言概述例:正确的标号:LOOP:TABLE:THLS$:LT_1:错误的标号:11T:LST+2:MOV:TMOD:第四章

汇编语言概述2.操作码用于规定语句执行的操作,它是指令助记符或伪指令操作码是汇编语言语句中唯一不可空缺的部分3.操作数操作数是参加运算与操作的数据或数据的地址,它和操作码之间用空格分开在一条语句中,操作数根据指令的不同,可以是空白或一至三个若有二个以上操作数,各操作数之间用逗号分隔4.注释注释不用于语句的功能部分,它只是对语句功能和性质的说明性文字注释可有可无,不是必须的注释用分号“;”开头,以后为注释的内容使用注释可以使程序结构清楚,可读性好,方便软件的维护、修改与扩充功能,因而一个完整的汇编语言程序应该附有必要的注释第四章

汇编语言概述汇编语言的伪指令伪指令是属于指令系统之外的,是程序员发给汇编程序的命令。汇编程序在这些命令的指导下将汇编语言程序汇编,生成机器码伪指令没有对应的机器语言代码,对程序本身的算法和流程控制没有作用MCS-51汇编语言程序中常用的伪指令有第四章

汇编语言概述1.ORG(汇编起始命令)功能是规定生成的机器语言程序代码的起始地址格式:[标号:]ORG地址其中[标号:]是任选项地址项为16位二进制地址。例:ORG1000H START:MOVSP,#60H规定了这个程序的START标号所在地址为1000H,程序机器码从1000H地址开始第四章

汇编语言概述2.END(汇编终止命令)功能是终止源程序的汇编工作,在END之后的指令,汇编程序都不予处理END是汇编语言程序的结束标志,1个程序只能有1个END命令格式:[标号:]END[表达式]其中标号和表达式两项均是可选项表达式项表示该程序的可执行段的首地址例:END START第四章

汇编语言概述3.EQU(等值指令)功能是将一个特定值赋与一个标号格式:字符名称EQU表达式字符名称不同于标号,不加冒号表达式可以是常数、地址、标号等赋值以后的字符名称既可以作地址使用,也可以作立即数使用,并且其值在整个程序中是固定的第四章

汇编语言概述4.DB(定义字节命令)从指定的地址单元开始,定义若干个字节的数据格式:[标号:]DB数据表标号是可选项数据表是1字节数据或用逗号分隔的1组字节数据例:

CONST:DB30HTBL:DB0C0H,0F9H,0A4H DB0B0H,99H,92H第2个例子定义了1个常数表,起始地址为TBL,表中数据按的指令中数据的顺序排列第四章

汇编语言概述5.DW(定义字命令)从指定地址开始,连续存放16位的字数据格式:[标号:]DW字数据表1个字数据占两个字节在MCS-51系统中,字数据是按照高字节在先,低字节在后的顺序存入例:WTBL:DW1234H,279H,20H将按顺序存入12H,34H,02H,79H,00H,20H第四章

汇编语言概述6.DS(定义存储器命令)从指定地址开始保留若干字节的存储单元格式:[标号:]DS表达式表达式的值决定了保留多少字节的存储单元例:BASE:DS100将从BASE标号地址开始保留100个存储单元第四章

汇编语言概述汇编语言程序设计特点用汇编语言进行程序设计与使用高级语言进行程序设计过程是类似的,同样需要按照分析问题、确定算法、设计流程图和编写程序的步骤来进行。但是,汇编语言程序设计也有自己的特点。汇编程序设计时,设计者要对数据的存放、寄存器和工作单元的使用作出计划安排汇编语言程序设计要求设计人员必须对所使用的计算机的硬件结构有较为详细的了解,尤其对寄存器、I/O端口、定时器/计数器、中断系统等更应深入了解,从而能够在程序设计中熟练应用汇编语言程序设计的技巧性较高,且有软硬件结合的特点第四章

汇编语言程序的基本结构汇编语言程序的基本结构 和大多数高级语言程序类似,汇编语言程序有四种结构形式顺序结构分支结构循环结构子程序结构第四章

汇编语言程序的基本结构一、顺序结构程序

顺序结构是最简单的程序结构,顺序结构的程序中既无分支、循环,也无调用子程序,一条条顺序执行。例:第四章

汇编语言程序的基本结构二、分支结构程序程序的分支是通过条件转移指令实现的,根据条件对程序执行中的状态进行判断,满足条件则进行程序转移,否则按顺序执行指令系统中有多种条件转移指令,包括JZ、JNZ、CJNE、DJNZ以及位状态条件转移指令JC、JNC、JB、JNB、JBC等分支结构程序可分为单分支程序和多分支程序第四章

汇编语言程序的基本结构1.单分支程序 单分支程序是只使用一次条件转移指令的分支程序例:一位十六进制数转换为ASCII码。设十六进制数在A中,转换结果仍存在于A中。HTOA:CJNE A,#0AH,NOEQ;==10?NOEQ:JC LT10;C==1,<10,转移 ADD A,#07H;>=10,+7LT10:ADD A,#30H;+30HHERE:SJMP HERE‘0’~‘9’的ASCII码为30H~39H(48~57)两者相差30H‘A’~‘F’的ASCII码为41H~47H(65~70)两者相差37H第四章

汇编语言程序的基本结构2.N路分支程序在多分支程序中,因为可能的分支会有N个,若采用多条CJNE指令逐次比较,程序的执行效率会降低很多,特别是分支较多时。一般采用跳转表的方法,两次转移实现多分支结构K=?转向0分支转向1分支转向N-1分支转向N分支K=0K=1K=2K=3第四章

汇编语言程序的基本结构例:设内部RAM的30H有一个数,根据该值的不同转移到不同的程序段进行处理,设数值的范围是0~10的无符号数。

MOV A,30H ;取数 RL A ;×2 MOV DPTR,#JMPTBL ;跳转表首地址 JMP @A+DPTR ;一次跳转JMPTBL:AJMP BRCH0 ;转至分支0 AJMP BRCH1 ;转至分支1 : AJMP BRCH10 ;转至分支10BRCH0:....AJMP是2字节指令第四章

汇编语言程序的基本结构使用跳转表最多可实现128路分支的转移AJMP指令的转移范围是2KB,分支处理程序的位置受到了限制。跳转表使用LJMP指令,分支程序可分布在整个64KB范围内,但要对分支数值进行乘3处理 MOV A,30H ;取数 RL A ;×2 ADD A,30H ;×2再+1等于×3 MOV DPTR,#JMPTBL ;跳转表首地址 JMP @A+DPTR ;一次跳转JMPTBL:LJMP BRCH0 ;转至分支0 LJMP BRCH1 ;转至分支1 : LJMP BRCH10 ;转至分支10BRCH0:....第四章

汇编语言程序的基本结构三、循环结构程序循环程序是指计算机反复执行某一段程序(称为循环体)循环是在一定条件控制下进行,以决定是继续循环执行或是结束循环程序循环是通过条件转移指令进行控制的通常循环结构的程序包含四个组成部分循环准备:设置循环次数、起始地址和初值等参数循环体:循环程序的主体,是要求重复执行的部分循环修改:修改循环次数及有关变量参数等循环控制部分:根据循环结束条件来判断是否结束循环第四章

汇编语言程序的基本结构循环程序的两种组织方式第四章

汇编语言程序的基本结构例:外部RAM之间的数据。把外部RAM2000H开始单元中的数据传送到外部RAM3000H开始的单元中,数据个数在内部RAM的40H单元中访问外部RAM只有1对以DPTR寄存器作为间址方式的指令要完成累加器与外部RAM间的数据传送,源地址指针和目的地址指针都必须使用DPTR必须将源指针和目的指针分别保护,分时占用DPTR来传送数据第四章

汇编语言程序的基本结构 ORG1000HSTART: MOVDPTR,#2000H;源地址 PUSHDPL ;压栈保护 PUSHDPH MOVDPTR,#3000H ;目的地址 MOVR2,DPL ;保护在寄存器中 MOVR3,DPHLOOP: POPDPH ;取源指针 POPDPL MOVXA,@DPTR ;取数据 INCDPTR ;修改源指针 PUSHDPL ;压栈保护 PUSHDPH MOVDPL,R2 ;取出目的地址 MOVDPH,R3 MOVX@DPTR,A ;存数据 INCDPTR ;修改目的指针 MOVR2,DPL ;保护在寄存器中 MOVR3,DPH DJNZ40H,LOOPHERE: SJMPHERE第四章

汇编语言程序的基本结构四、子程序结构子程序结构是汇编语言程序重要的程序组织形式恰当地使用子程序,可以使整个程序结构清楚,便于阅读和理解,并可减小程序代码的长度每调用一次子程序都要附加保护断点现场等操作,增加了程序的执行时间,但从总的方面来说,付出这些代价是值得的第四章

汇编语言程序的基本结构子程序应具备的特性通用性子程序必须适应于各种应用程序的调用,子程序的参数应是可变的。可浮动性子程序可以不加任何修改而放置在存储器的任何区域。这要求在子程序设计中应:避免使用绝对转移指令;子程序的首地址也应该用符号地址;可递归性和可重入性可递归性是指子程序可以调用自己;可重入性是指一个子程序可以同时被多个程序调用;这两个特性是对大规模系统程序的要求,一般应用不要求。第四章

汇编语言程序的基本结构参数传递方法 汇编语言子程序结构中,参数的传递要靠程序设计者自己安排数据的存放和工作单元的选择问题 汇编语言子程序参数的传递一般可采用下面的方法传递数据:将数据通过工作寄存器R0~R7或者累加器A来传送。其具体过程:在调用子程序前把数据送入寄存器中,子程序中就对这些寄存器中的数据进行操作子程序执行后,结果仍由寄存器送回传递地址:数据存放在数据存储器中,参数传递时只通过R0、R1、DPTR传递数据所存放的地址。调用结束时,结果也可存放在数据存储器中,传送回的也是存在寄存器中的地址。第四章

汇编语言程序的基本结构通过堆栈传递参数在调用之前,先把要传送的参数压入堆栈,进入子程序后,再将堆栈中的参数弹出到工作寄存器或其他内部RAM单元。在弹出参数时,应注意栈顶的两个字节数据是断点地址,不应误为传递的参数,也不应抛弃。在子程序返回之前,应保证该两字节数据仍处在栈顶位置,以便正确返回主程序。通过堆栈传递参数时,应注意不能在子程序的开头通过压入堆栈来保护现场,而应在主程序中先保护现场,然后压入要传递的参数在子程序返回后,应使堆栈恢复到原来的深度,保持堆栈与调用前深度一致,这样才能保证后续堆栈操作的正确,并且不会因为每调用一次子程序,堆栈深度就会加深,而使堆栈发生溢出第四章

汇编语言程序的基本结构现场保护进入子程序后,除了要处理的参数数据和要传递回主程序的参数之外,现场保护有关的内部RAM单元的内容工作寄存器的内容各标志的状态现场保护方法进入子程序时,将使用的或被改变的单元内容压堆栈在返回前,把堆栈中数据弹出到原对应的工作单元对所使用的工作寄存器的保护可用改变工作寄存器组的方法第四章

汇编语言程序的基本结构子程序接口说明子程序接口说明对于程序结构没有实质的影响,它是一些说明子程序功能的注释文字,便于程序的使用及调试和修改。专业的编程规范应包含必要的子程序接口说明。子程序接口的说明主要包括子程序名称子程序功能:简单描述完成的工作入口参数及格式:详细说明各入口参数的意义,若传递的地址或通过堆栈传数据,还应说明在内部RAM或堆栈中的参数的格式、顺序、用途出口参数及格式子程序中所使用的寄存器和工作单元调用:本子程序调用的其他子程序名称第四章

汇编语言程序的基本结构例:通过调用子程序实现延时100ms;子程序名称:DELAY;功能:延时1~256ms,fOSC=12MHz,t=1us;入口参数:R3=延时的ms数(二进制表示);出口参数:无;使用寄存器:R2、R3;调用:无DELAY:MOVR2,#0FAH;==250LOOP: NOP ;1t NOP ;1t DJNZR2,LOOP ;2t,内循环250x4us DJNZR3,DELAY;2t RET;主程序 : PUSHPSW ;保护程序状态字 MOVPSW,#08H;选择工作寄存器1 MOVR3,#64H ;入口参数100 ACALLDELAY ;调用延时 POPPSW ;恢复程序状态字 :第四章

汇编语言程序设计举例汇编语言程序设计举例一、查表程序第四章

汇编语言程序设计举例二、数制转换程序例:双字节取补:将R5、R4中的双字节二进制数取补,结果仍放在R5、R4中(LOR5,HIR4)DBCPL: MOV A,R5 ;取低字节 CPL A ;取反 ADD A,#1 ;加一 MOV R5,A ;存结果 MOV A,R4 ;取高字节 CPL A ;取反 ADDC A,#0 ;加进位 MOV R4,A ;存结果第四章

汇编语言程序设计举例三、算术运算程序例:多字节二进制数减法:设被减数首地址存于R0,减数首地址存于R1,两个数的字节长度存于R2,相减结果存于被减数所在单元,多字节二进制数按低字节在前的顺序存放。MSUB: CLR C ;清进位位MSUB1: MOV A,@R0 ;被减数最低字节 SUBB A,@R1 ;减 MOV @R0,A;存 INC R0 ;指向高一个字节 INC R1 DJNZ R2,MSUB1;循环CY位保存减法结果的借位状态第四章

汇编语言程序设计举例例:多字节BCD数减法:设被减数存于30H开始单元,减数存于40H开始单元,字节长度存于2FH,相减结果存于30H开始单元,多字节BCD数按低字节在前顺序存放由于MCS-51指令系统没有提供减法结果的十进制调整功能,只能将其变换为十进制数加法,再进行十进制调整。方法是对减数进行十进制取补后再进行十进制加法运算。99…99–减数+01(-减数)的补码99H…9AH–BCD减数(-BCD减数)的补码第四章

汇编语言程序设计举例BCDSUB: MOV R0,#30H;被减数 MOV R1,#40H;减数 MOV R2,2FH;字长度 MOV A,#9AH;99加1 CLR C ;多字节BCD求补NEGS: SUBB A,@R1 MOV @R1,A INC R1 MOV A,#99H DJNZ R2,NEGS MOVR1,#40H ;多字节BCD加法MADD:CLRCMADD1:MOVA,@R0 ADDCA,@R1 DAA MOV@R0,A INCR0 INCR1 DJNZ2FH,MADD1第四章

汇编语言程序设计举例四、布尔运算程序 例:设有逻辑表达式其中A——P1.0B——P1.4G——TF1D——22H.0E——22H.3F——IE1输出Y——P1.5LOGIC: MOVC,P1.4 ;B ORL C,/TF1 ;+/G CPL C ;/() ANL C,P1.0 ;*A MOV F0,C ;存 MOV C,22H.3 ;E ORL C,/IE1 ;+/F CPL C ;/() ANL C,22H.0 ;*D ORL C,F0 ;+ MOV P1.5,C ;输出 SJMP $第四章

汇编语言程序设计举例五、定时程序例:长时间的定时程序:采用多重循环的延时 MOV R5,#TIME1 ;1tLOOP1: MOV R4,#TIME2 ;1tLOOP2: NOP ;1t NOP ;1t NOP ;1t DJNZ R4,LOOP2 ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论