您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 单片机的程序设计与调试
单片机原理与应用14.1源程序的设计与汇编4.1.0几个概念4.1.1伪指令4.1.2源程序的设计4.1.3源程序的汇编第4章单片机的程序设计与调试单片机原理与应用2二进制形式的机器指令称为机器语言,采用机器语言编写的程序能直接被计算机识别和执行。由于机器语言不容易理解和记忆,所以人们通常用符号指令来编写源程序。采用符号指令编写的程序必须通过编译软件(也叫汇编程序)或手工翻译(汇编)成机器指令的形式才能被计算机执行。前者称为机器汇编,后者称为手工汇编。4.1.0几个概念单片机原理与应用3用符号指令的计算机语言称汇编语言。符号指令也称为汇编语言指令;采用汇编语言指令编写的程序叫做汇编语言源程序。汇编的反过程称为反汇编。几个概念单片机原理与应用4图4-1源程序的汇编与反汇编源程序的汇编与反汇编单片机原理与应用54.1.1伪指令为了使编译软件能按设计者的要求汇编源程序,编写汇编语言源程序时,还要用到伪指令。伪指令是供汇编程序识别和执行并对汇编过程进行某种控制的指令性语句。它不是真正的单片机指令,无对应的机器码。所以汇编后产生的目标程序中不会出现伪指令。单片机原理与应用6指令格式:ORG表达式指令功能:用于向汇编程序说明下面紧接的程序段或数据段从表达式指定的起始地址开始存放。表达式通常为十六位地址或自定义的标号地址。通常每一个汇编语言源程序的开始,都要设置一条ORG伪指令来指定该程序在ROM中存放的起始位置。可以在源程序中使用多条ORG伪指令来规定不同程序段或数据段存放的起始地址,但要求地址值由小到大顺序排列,不允许空间重叠。1.起始汇编伪指令单片机原理与应用71ORG0000H2LJMPMAIN;转主程序3ORG0003H4LJMPBREAK0;转中断5ORG000BH6LJMPCLOCK;转定时器T0中断7ORG0013H8LJMPBREAKl;转中断;②主程序:9ORG0050H10MAIN:MOVA,#03H;8155初始化……;⑨控制字码表:137ORG1010H138DB0FEH,06H,20H,00H,0FFH,06H,20H,15H……INT0INT1【项目应用】以下是应用项目中使用的ORG伪指令,请分析各条ORG指令的作用。单片机原理与应用8解:(1)第一条ORG伪指令用于说明整个程序的起始地址为0000H,其后的LJMPMAIN指令的机器码便从ROM的0000H单元开始存放。这是单片机开机或复位时的PC初值,所以单片机在开机或复位时总是从这个地址开始读出程序。(2)第二至第四条ORG指令中的地址分别对应系统规定的3个中断入口地址,用于使其后的中断服务程序能存放在正确的位置(详见第5章)。(3)第五条ORG伪指令用于说明从标号为MAIN的指令往后的程序存放在0050H开始的ROM单元中。于是应用项目中的主程序,便由0000H单元通过无条件长转移指令LJMPMAIN转移到0050H往后的ROM单元,从而防止系统设定的中断入口地址被占用。(4)第六条ORG伪指令用于指定作为控制字码表的一个数据区的起始地址为1010H。从应用项目的反汇编源程序可以看出,ORG伪指令指定的地址没有发生重叠。单片机原理与应用9指令格式:END指令功能:结束汇编。放置于汇编源程序的末尾,当汇编程序遇到END伪指令时,即结束汇编。处于END之后的程序,汇编程序不会进行处理。2.结束汇编伪指令单片机原理与应用10指令格式:符号名EQU表达式指令功能:将表达式的值赋给指定的符号名。表达式通常是8位或16位的地址、数据或汇编符,如果是位地址,则必须采用位的物理地址。符号的命名与标号的命名规定相同:可以由1~8个ASCII字符组成。首字符必须是字母,其余字符可以是字母、数字或其他特定字符,不能使用汇编语言已经定义了的符号,如指令助记符、寄存器符号名称等。“符号名”必须先赋值后使用,一旦被赋值,就可以在源程序的任意地方使用,汇编时,汇编程序自动用表达式的值进行代真。使用EQU伪指令有两个优点:一是当源程序中有多处引用“符号名”的地方要修改时,只要修改“符号名”赋值的指令即可;二是当“符号名”具有见字明义的名称时,可增加程序的可读性。3.通用赋值伪指令单片机原理与应用11ORG0100H;起始汇编LENEQU10;LEN=“10”SUMEQU20H;SUM=“20H”BLOCKEQU30H;BLOCK=“30H”START:CLRA;A清0MOVR2,#LEN;计数初值送R2MOVR0,#BLOCK;指针初值送R0LOOP:ADDA,@R0;累加INCR0;指针加1DJNZR2,LOOP;未完继续MOVSUM,A;保存结果HERE:SJMP$;动态停机END;结束汇编【例4-1】如下一段程序的功能是将BLOCK单元开始存放的10个无符号数进行求和,并将结果存入SUM单元中(假设结果小于255)。单片机原理与应用12指令格式:符号名BIT位地址指令功能:用于将位地址赋给指定的符号名。其中,位地址可用位名、物理位地址、“字节地址.位序号”、“寄存器名.位序号”等形式表示。例如:MARKBITF0其中的位地址是PSW中的用户标志位F0,它也可以用0D5H、0D0H.5、PSW.5等形式表示。4.位地址赋值伪指令单片机原理与应用13指令格式:[标号:]DB单字节数据表指令功能:用于从标号(即汇编程序为该指令分配的首地址)对应的地址单元开始,将“单字节数据表”中的数据按从左到右的顺序依次存入ROM中,一个数据占一个存储单元。单字节数据表可以是一个或多个单字节数据、字符串或表达式(其值为单字节),表项之间用逗号分隔。项数多于一行时,可使用多条DB伪指令。5.单字节定义伪指令单片机原理与应用14十六进制数:加上后缀H表示,以字母A~F开头时,在它的前面加一个前导“0”。二进制数:加上后缀B表示。十进制数:加上后缀D表示,也可以省略后缀。ASCII码:用“单引号”括起来表示,如‘A’,‘ABC’,‘1’,‘123’。数据的表示方法单片机原理与应用15……134DONE2:RET;⑧字形码表:135SEGTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH136DB07H,7FH,6FH;⑨控制字码表:137CODE:ORG1010H138DB0FEH,06H,20H,00H,0FFH,06H,20H,15H139DB0EFH,06H,25H,00H,0FFH,06H,40H,00H……【项目应用】以下是应用项目中使用的DB伪指令单片机原理与应用16编号为135的DB伪指令的功能是指示汇编程序从上一条指令(RET)存放完成后的下一个ROM单元开始,依次存入10个字形码。该条伪指令一行写不下,所以分成两条DB伪指令来书写;编号为138的DB伪指令的功能则是从它上一条ORG伪指令指定的1010H单元开始,依次存入数据表中的控制码。表项较多,所以用多条DB伪指令来书写。说明:单片机原理与应用17指令格式:[标号:]DW双字节数据表指令功能:与DB伪指令类似,只是指令中数据表的表项应为双字节,即16位二进制数。存入ROM中时,高8位存放在低地址单元中,低8位存放在高地址单元中,对于不足16位的表项数据,存放时在前面补0。例如:ORG0759HDATA:DW3295H,2800H,0BDH,……汇编后,在ROM中的数据为:(0759H)=32H,(075AH)=95H,(075BH)=28H,(075CH)=00H,(075DH)=00H,(075EH)=BDH。6.双字节定义伪指令单片机原理与应用18指令格式:[标号:]DS表达式指令功能:用于从标号对应的地址单元开始,在程序存储器中预留出一段存储单元作为备用空间,预留单元数量由表达式确定。例如:ORG0800HSPARE:DS20H……汇编后,从ROM中地址为0800H的单元开始,预留32个空的存储单元作为备用单元。7.空间定义伪指令单片机原理与应用194.1.2源程序的设计1.源程序设计的步骤2.源程序设计的基本要求3.源程序设计注意事项单片机原理与应用201.源程序设计的步骤(1)明确设计任务(2)选择适当的算法(3)确定系统规划(4)确定程序结构(5)绘制程序流程图(6)编写源程序(7)汇编和调试单片机原理与应用21(1)明确设计任务在开始源程序设计前,首先要对所要设计的单片机应用系统进行深入地分析,明确应用系统所要实现的功能和技术要求,综合考虑应用系统的可行性、先进性、可靠性、可维护性、成本及经济效益等。选择合适的器件,设计出合理的硬件电路。因为单片机的程序设计与硬件电路的结构是紧密联系在一起的,面板的开关、按键、显示、输入/输出引脚的定义等也与程序设计密切相关,所以要事先作好准备。单片机原理与应用22算法是解决具体问题的方法。明确设计任务后,设计者应把应用系统所要实现的功能和技术要求利用严密的数学方法或数学模型来描述,从而把一个实际问题转化成由计算机进行处理的问题。同一个问题的算法可能有多种,实现方案也可能不尽相同,所以应对各种算法进行分析、比较,合理优化,从中找出一种切合实际的最佳算法。(2)选择适当的算法单片机原理与应用23系统规划包括合理地选择和分配内存工作区及有关端口地址,规划好寄存器和存储器的使用;确定数据和工作单元,分配存储单元;对数据暂存区、堆栈区、显示缓冲区、标志单元等作好统一安排;根据程序区、数据区、字形表等预计所占字节的多少,对程序存储器ROM做出空间规划,合理分配并确定每个区域的首地址,以及系统主程序、子程序的入口地址,中断服务程序的存放地址等。(3)确定系统规划单片机原理与应用24程序结构的设计是把算法转化为程序的准备阶段。如果算法比较简单,这一步可以省略,直接按算法编写程序。如果算法比较复杂,则需要进行程序结构的设计。程序的基本结构通常有顺序结构、分支结构、循环结构、子程序及中断服务程序等5类。程序结构的设计一般通过绘制程序流程图来实现。(4)确定程序结构单片机原理与应用25(5)绘制程序流程图程序流程图是用规定的图形符号配以文字说明来表示算法或处理问题的步骤,它具有直观、易懂的特点,是程序结构设计的有力工具。单片机原理与应用26常用的程序流程图符号如图4-2所示。图4-2常用的程序流程图符号程序流程图符号单片机原理与应用27端点框:表示程序的起止。在端点框中可输入开始、结束、程序名、起始地址等相应的文字。处理框:表示一种处理功能或者过程,处理框中的文字简要说明一段程序的功能或处理过程。判断框:表示一个判定点,从该点产生分支,在判断框内应注明测试条件,而测试结果则在各分支流程线上注明。连接框:表示流程中止而并非流程结束,通常用来连接同一页的流程,以避免流程线的交叉,也可以用来连接不同页上的流程,以避免流程线的跨页中断。绘图时,表示连在一起的连接框内的标识符要相同。流程线:表示程序执行的流向。程序流程图符号说明:单片机原理与应用28源程序的编写是根据绘制好的程序流程图,运用单片机指令集中的合法指令和伪指令编写出能实现流程图规定功能的程序。所编写的源程序要力求简单明了、层次清晰、可靠、高效。(6)编写源程序单片机原理与应用29汇编是将源程序翻译成能被单片机识别和执行的目的程序。调试则是检验所编写的程序是否正确,能否正常运行。如果这两步不能通过,则需要重复以上步骤,对程序进行反复修改,直到获得正确的结果为止。(7)汇编和调试单片机原理与应用30(1)正确性:要求严格按指令格式书写指令,不能臆造非法指令。(2)可靠性:由于单片机主要用于控制,所以程序的可靠性很重要。(3)可读性:为了增加程序的可读性,可在程序段前或每条指令后添加注释。(4)有效性:要求程序占用存储空间尽量小,执行时间尽可能短。2.源程序设计的基本要求单片机原理与应用31(1)采用模块化的程序设计方法(2)尽量采用循环结构和子程序(3)合理分配内存单元(4)正确使用转移指令3.源程序设计注意事项单片机原理与应用32模块化的程序设计方法具有如下优点:单个模块的程序功能单一,结构
本文标题:单片机的程序设计与调试
链接地址:https://www.777doc.com/doc-3137041 .html