您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 计算机常用的编程语言 程序设计是为解决某个问题而用计算机所能接...
计算机常用的编程语言程序设计是为解决某个问题而用计算机所能接受的语言描述其操作过程的语句序列。除了汇编语言外,单片机程序设计语言还有两类:机器语言和高级语言。机器语言(MachineLanguage)是指直接用机器码编写程序、能够为计算机直接执行的机器级语言。机器码是一串由二进制代码“0”和“1”组成的二进制数据,其执行速度快,但是可读性极差。机器语言一般只在简单的开发装置中使用,程序的设计、输入、修改和调试都很麻烦,在实训实验中直接固化或输入的程序都是机器语言程序。第4章汇编语言程序设计4.1概述汇编语言(AssemblyLanguage)是指用指令助记符代替机器码的编程语言。汇编语言程序结构简单,执行速度快,程序易优化,编译后占用存储空间小,是单片机应用系统开发中最常用的程序设计语言。汇编语言的缺点是可读性比较差,只有熟悉单片机的指令系统,并具有一定的程序设计经验,才能研制出功能复杂的应用程序。高级语言(High-LevelLanguage)是在汇编语言的基础上用自然语言的语句来编写程序,例如PL/M-51、FranklinC51、MBASIC51等,程序可读性强,通用性好,适用于不熟悉单片机指令系统的的用户。高级语言编写程序的缺点是实时性不高,结构不紧凑,编译后占用存储空间比较大,这一点在存储器有限的单片机应用系统中没有优势。汇编语言程序的伪指令伪指令:控制汇编程序的指令,但不是控制单片机操作的指令,没有机器码。1.定位伪指令ORG格式:ORGXXXX或标号地址。作用:说明下面紧接的程序段或数据段存放的起始地址。例如:ORG1000H;指示后面的程序或数据块以1000H为起始地址连续存放。若省略ORG伪指令,则该程序段从ROM中0000H单元开始存放。在一个源程序中,可以多次使用ORG伪指令,但地址值由小到大依序排列,不允许空间重叠。汇编语言程序的伪指令2.字节数据定义伪指令DB格式:[标号:]DB字节数据表。作用:从标号指定的地址单元开始,在ROM中存放8位字节数据。将字节数据根据从左到右的顺序依次存放在指定的存储单元中,一个数据占一个存储单元。字节数据表可以是字符、十进制、十六进制、二进制等。该伪指令常用于存放数据表格。汇编语言程序的伪指令3.字数据定义伪指令DW格式为:[标号:]DW字数据表。作用:从标号指定的地址单元开始,在ROM中定义字数据。将数据根据从左到右的顺序依次存放在指定的存储单元中。应特别注意:16位的二进制数,高8位存放在低地址单元,低8位存放在高地址单元。汇编语言程序的伪指令例如:ORG1000HSEG1:DB53H,78H,“2”SEG2:DB‘DAY’END则(1000H)=53H(1001H)=78H(1002H)=32H;32H为“2”的ASCII码(1003H)=44H;44H为“D”的ASCII码(1004H)=41H;41H为“A”的ASCII码(1005H)=59H;59H为“Y”的ASCII码如果操作数为数值,其取值范围应为00H~FFH;若为字符串,其长度应限制在80个字符内。汇编语言程序的伪指令4.数据地址赋值伪指令DATA格式为:符号名DATA数或表达式DATA伪指令与EQU类似。但有些差别:(1)用DATA定义的标识符可以先使用后定义,而EQU定义的必须先定义后使用。(2)用EQU可以把一个汇编符号赋给字符名,而DATA只能把数据赋给字符名。(3)DATA可以把一个可求值表达式赋给字符名。【例】MAINDATA2000H汇编后MAIN的值为2000H。汇编语言程序的伪指令5.赋值伪指令EQU格式为:符号名EQU表达式。作用:将表达式的值或特定的某个汇编符号定义为一个指定的符号名。【例】SGEQUR0;SG与R0等值DEEQU40H;DE与40H等值MOVA,SG;(A)←(R0)MOVR7,#DE;(R7)←40H汇编语言程序的伪指令6.位地址符号定义伪指令BIT格式为:符号名BIT位地址表达式作用:将位地址赋给指定的符号名。其中,位地址表达式可以是绝对地址,也可以是符号地址。【例】MNBITP1.7G5BIT02H汇编后,位地址P1.7、02H分别赋给变量MN和G5。汇编语言程序的伪指令7.汇编结束伪指令END格式:END。作用:结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇编程序软件将不处理。4.2程序设计步骤与方法目前,大多数用户仍然使用汇编语言进行单片机应用系统的软件设计,本章将介绍MCS-51单片机汇编语言的程序设计方法。单片机汇编语言程序设计的基本步骤如下:(1)分析问题抽象出描述问题的数学模型。熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法等。(2)确定解决问题的算法。算法是进行程序设计的依据,它决定程序的正确性和程序的质量。同一数学模型,可以有不同的算法。(3)画出程序流程图。编写较复杂的程序,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试(4)分配内存工作区及有关端口地址。分配内存工作区,要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。(5)编制汇编源程序。(6)仿真、调试程序。(7)固化程序。4.2.1程序设计步骤与方法汇编语言源程序设计通常采用结构化设计方法,任何复杂的程序都可分解为:顺序结构部分分支结构部分循环结构部分子程序部分4.2.2顺序程序设计【例】【功能】求变量X()的平方。【入口参数】X值存放在片内RAM的30H单元【出口参数】X2值存放在片内RAM的31H单元程序框图如图4.1所示。ORG1000HSTART:MOVDPTR,#2000HMOVA,30HMOVCA,@A+DPTRMOV31H,ASJMP$ORG2000HTABLE:DB00,01,04,09,16,25END特点:从第一条指令开始顺序执行,直到最后一条指令图4.1顺序程序流程图4.2.3分支程序设计分支:根据某种标志改变程序执行的顺序。一般分为单分支、多分支。分支流程图如图4.2所示。(a)单分支(b)多分支图4.2分支程序流程图4.2.3分支程序设计1.单分支【例】【功能】某装置有自动/手动控制按键,按键状态由P1.0口输入;高电平为自动控制,低电平为手动控制【入口参数】P1.0CY:JBP1.0,AUTOHC:……LJMPCYAUTO:……LJMPCY4.2.3分支程序设计2.多分支包括一般多分支和散转多分支。1)一般多分支【例】【功能】x、y均为8位二进制数,求解:【入口参数】(R0)=x。【出口参数】(R1)=y。101000xyxx4.2.3分支程序设计START:CJNER0,#00H,SUL1;判断R0是否为0,为0转SUL1MOVR1,#00HSJMPSUL2SUL1:JCNEG;小于0转NEGMOVR1,#01HSJMPSUL2NEG:MOVR1,#0FFHSUL2:RET4.2.3分支程序设计2)散转多分支程序根据某种输入或运算的结果转向各个处理程序称为散转多分支,即散转程序。(1)利用转移指令表实现转移将转移到不同程序的转移指令列成表格,判断条件后查表,执行表中的转移指令。【例】【功能】某菜单有9项。根据输入数码转去执行相应的子程序。即输入“1”,执行子程序1;输入“2”,执行子程序2;依次类推。4.2.3分支程序设计【分析】用直接转移指令组成一个转移表,然后把菜单号读入累加器(A),转移表首地址放入DPTR中,利用JMP@A+DPTR实现散转。【入口参数】(R3)=存输入键盘码1~9。【出口参数】转移到相应的子程序入口。ORG0030HKEY_JMP:MOVDPTR,#TAB1;子程序入口首地址送DPTRMOVA,R3;把键盘输入缓冲区内容送累加器(A)DECA;由于输入数码为1~9,因此需减1MOVB,#03H4.2.3分支程序设计MULAB;由于长跳转指令LJMP占用3B,;各子程序入口地址相距3BJMP@A+DPTR;根据输入码,执行相应的子程序ORG2000H;程序入口地址表TAB1:LJMPNO1LJMPNO2LJMPNO3LJMPNO4LJMPNO5LJMPNO6LJMPNO7LJMPNO8LJMPNO9END4.2.3分支程序设计(2)利用转向地址表实现转移这种方法将转移地址列成表格,将表格的内容作为转移的目标地址。【例】【功能】根据R3(0~n)的内容转向对应的程序;处理程序的入口符号地址分别为PR0~PRn(n<256)【分析】①将PR0~PRn入口地址列在表格中,每一项占两个单元;②PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn在表中的偏移地址;③从偏移地址2n和2n+1两个单元分别取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即转移到PRn入口执行。4.2.3分支程序设计【入口参数】(R3)=0~n转移。【出口参数】转移到相应的子程序入口。PR0EQU0110HPR1EQU0220HPR2EQU0330H·······················ORG0030HKEY_JMP:MOVDPTR,#TABMOVA,R3ADDA,R3;(A)←(R3)*2JNCNADDINCDPH;(R3*2)2564.2.3分支程序设计NADD:MOVR3,AMOVCA,@A+DPTRXCHA,R3;转移地址高8位INCAMOVCA,@A+DPTRMOVDPL,A;转移地址低8位MOVDPH,R3CLRAJMP@A+DPTRTAB:DWPR0,PR1,PR2,···········PRnPR0:处理程序0PR1:处理程序1··PRn:处理程序nEND4.2.3分支程序设计(3)利用地址偏移量表实现散转这种方法将转移目标地址与表首地址差列表,作为转移目标地址。【例】【功能】有5个按键0,1,2,3,4,根据按下的键转向不同的处理程序,分别为PR0,PR1,PR2,PR3,PR4。【分析】汇编时,利用了伪指令的数学计算功能,标首地址加上处理程序与标首地址差转到处理程序。【入口参数】(B)=转向程序号(键盘编码)。【出口参数】转移到相应的子程序入口。4.2.3分支程序设计ORG0030HKEY_JMP:MOVA,BMOVDPTR,#TABMOVCA,@A+DPTRJMP@A+DPTRTAB:DBPR0-TABDBPR1-TABDBPR2-TABDBPR3-TABDBPR4-TABPR0:处理程序0PR1:处理程序1PR2:处理程序2PR3:处理程序3PR4:处理程序4END在单片机汇编语言程序设计中,查表程序的应用非常广泛,在LED显示程序和键盘接口程序设计中都用到了查表程序段。【例】在程序中定义一个0~9的平方表,利用查表指令找出累加器A=05H的平方值。(1)题意分析。所谓表格是指在程序中定义的一串有序的常数,如平方表、字型码表、键码表等。因为程序一般都是固化在程序存储器(通常是只读存储器ROM类型)中,因此可以说表格是预先定义在程序的数据区中,然后和程序一起固化在ROM中的一串常数。4.2.4查表程序查表程序的关键是表格的定义和如何实现查表。(2)汇编语言源程序。ORG0000HMOVDPTR,#TABLE;表首地址→DPTR(数据指针)MOVA,#05;05→AMOVCA,@A+DPTR;查表指令,25→A,A=19HSJMP$;程序暂停TABLE:DB0,1,4,9,16,25,36,49,64,81;定义0~9平方表END(3)程序说明。从程序存储器中读数据时,只能先读到累加器A中,然后再送到题目要求的地方。单片机提供了两条专门用于查表操作的查表指令:MOVCA,@A+DPTR;(A+DPTR)→AMOVCA,@A+PC
本文标题:计算机常用的编程语言 程序设计是为解决某个问题而用计算机所能接...
链接地址:https://www.777doc.com/doc-3586665 .html