版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章微机系统应用程序设计微机系统的应用程序设计,可以采用汇编语言完成,也可以采用C语言实现。由于汇编语言是面向机器的语言,对单片机的硬件资源操作直接方便、概念清晰,尽管对编程人员的硬件知识要求较高,但对于学习和掌握单片机的硬件结构极为有利。所以,本章首先对汇编语言进行介绍。当系统的规模较大时,设计人员便趋于采用C语言进行程序设计,这是由于C语言具有良好的可读性、可移植性和基本的硬件操作能力。所以本章还介绍了单片机高级语言C51的语法、数据结构、语句函数的分类以及简单的C51程序设计。第3章微机系统应用程序设计3.1汇编语言程序设计
3.1.1汇编语言语句格式及伪指令以助记符书写的指令系统,就是计算机的汇编语言。每一条指令就是汇编语言的一条语句。1.汇编语言的特点汇编语言有如下特点:①助记符指令和机器指令一一对应。所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,而且能反映计算机的实际运行情况。因此汇编语言能编写出最优化的程序。②汇编语言编程比高级语言困难。因为汇编语言是面向计算机的,程序设计人员必须对计算机硬件有相当深入的了解,才能使用汇编语言编写程序。③汇编语言能直接和存储及接口电路打交道,也能申请中断。因此汇编语言程序能直接管理和控制硬件设备。④汇编语言缺乏通用性,程序不易移值。各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。但是掌握了一种计算机的汇编语言,却有助于学习其它计算机的汇编语言。第3章微机系统应用程序设计2.汇编语言的语句格式各种汇编语言的语法规则是基本相同的,且具有相同的语句格式,现结合MCS-51汇编语言作具体说明。MCS-51汇编语言的语句格式表示如下:[<标号>]:<操作码>[<操作数>];[<注释>]即一条汇编语句是由标号、操作码、操作数和注释四个部分所组成。其中方括号括起来的是可选择部分,可有可无,视需要而定。第3章微机系统应用程序设计3.伪指令用汇编语言编写的程序通常需经过机器汇编变成机器码才能被执行。为了对源程序汇编,在源程序中应有向汇编程序发出的指示信息,告诉它应该如何完成汇编工作。这一任务是通过伪指令来实现的。伪指令是程序员发给汇编程序的命令,也称汇编命令或汇编程序控制指令。只有在汇编前的源程序中才有伪指令。汇编得到目标程序后,伪指令已无存在的必要,所以伪指令没有相应的机器代码,在目标程序中见不到与伪指令相对应的机器码。第3章微机系统应用程序设计下面介绍MCS-51汇编语言程序中常用的伪指令。(1)ORG(OriGin)汇编起始地址命令(2)END(ENDofassembly)汇编终止命令(3)EQU(EQUate)赋命令(4)DB(DefineByte)定义数据字节命令(5)DW(DefineWord)定义数据字命令(6)DS(DefineStonage)定义存储区命令(7)位定义命令第3章微机系统应用程序设计3.1.2汇编语言程序设计步骤微型机应用离不开应用程序的设计,设计程序可以使用高级语言也可以使用汇编语言或机器语言。高级语言是一种面向过程(或问题)的、独立于计算机的通用语言。用它来编程,编程的速度快而且编程者不必熟悉具体机器的硬件结构及指令系统等;但程序执行的速度慢且占据存储空间较大。从上章指令系统介绍可知,用汇编语言编程时,编程者可以直接操作到机器内部的寄存器及存储单元,能把处理过程刻画得非常具体。因而通过优化编制出高效率的程序,既可节省存储空间又可提高程序执行的速度。在空间和时间上都充分发挥了微型机的潜力。因此,在实时控制的场合下通常采用汇编语言进行程序设计。微型机的监控程序多采用汇编语言编写。对于单片机应用系统,通常都用汇编语言编写程序。用汇编语言编制程序的过程,称为汇编语言程序设计。第3章微机系统应用程序设计1.建立数学模型2.选择适当的算法3.程序结构的设计4.编制汇编语言程序5.汇编语言程序的调试第3章微机系统应用程序设计3.1.3程序设计结构用汇编语言进行程序设计的过程和用高级语言进行程序设计相类似。对于比较复杂的问题,首先要掌握解决它的方法和步骤——算法,有了合适的算法常常可以起到事半功倍的效果;其次,就是用操作框、带箭头流程线、框内外必要的文字说明所组成的流程图来描述算法;最后是根据流程图用程序设计语言来编制程序。程序的基本算法结构有3种:顺序结构、分支(选择)结构和循环结构。顺序结构如图3-1所示,虚框内A框和B框分别代表不同的操作,而且是A、B顺序执行。第3章微机系统应用程序设计第3章微机系统应用程序设计分支结构如图3-2所示,它又称为选择结构。该结构中包含一个判断框,根据给定条件P是否成立而选择执行A框操作或B框操作。条件P可以是累加器是否为零、两数是否相等,以及测试状态标志或位状态等等。这里需指出的是:无论条件P是否成立,只能执行A框或者B框,不可能既执行A框又执行B框。无论走哪一条路径执行,都经过b点脱离本分支结构。A或B两个框中可以有一个是空的,即不进行任何操作。第3章微机系统应用程序设计第3章微机系统应用程序设计下面将介绍基本结构汇编语言程序设计的一些实例。1.顺序结构程序设计顺序结构是最简单的一种基本结构。如果某一个需要解决的问题可以分解成若干个简单的操作步骤,并且可以由这些操作按一定的顺序构成一种解决问题的算法,则可用简单的顺序结构进行程序设计。例1:单字节压缩BCD码转换成二进制码子程序。解:设两个BCD码d1d0表示的两位十进制数压缩存于R2,其中R2高4位存十位,低4位存个位,要把其转换成纯二进制码的算法为:(d1d0)BCD=d1×10+d0。实现该算法所编制的参考子程序如下:第3章微机系统应用程序设计入口:待转换的BCD码存于R2。出口:转换结果(8位无符号二进制整数)仍存R2。BCD2B:ORG 2000H MOV A,R2 ;A(A)←(d1d0)BCD ANL A,#0F0H ;取高位BCD码d1 SWAP A ;(A)=0d1H MOV B,#0AH ;(B)←10 MUL AB ;d1×10 MOV R3,A ;R3暂存乘积结构
MOV A,R2 ;A(A)←(d1d0)BCD ANL A,#0FH ;取低位BCD码d0 ADD A,R3 ;d1×10+d0 MOV R2,A ;保存转换后果
RET ;子程序返回第3章微机系统应用程序设计2.分支(选择)结构程序设计顺序结构程序设计是最基本的程序设计技术。在实际程序设计中,有很多情况往往还需要程序按照给定的条件进行分支。这时就必须对某一个变量所处的状态进行判断,根据判断结果来决定程序的流向。这就是分支(选择)结构程序设计。在编写分支程序时,关键是如何判断分支的条件。在MCS—51单片机指令系统中,有JZ(JNZ)、CJNE、JC(JNC)及JB(JNB)等丰富的控制转移指令,它们是分支结构程序设计的基本,可以完成各种各样的条件判断、分支。第3章微机系统应用程序设计例2:设变量X存放在VAR单元中,函数Y存在FUNC单元。编写按照下式要求给Y赋值的程序。
1 X>0 Y= 0 X=0 -1 X<0解:由于X为有符号数,因此可以根据它的符号位来决定其正负。判别符号位是0还是1,可利用JB或JNB指令;而判别X是否为0,则可直接用累加器判零指令JZ。完成本例题任务的程序流程框图是由顺序结构加分支结构组成的,并且在分支结构中又嵌套了另一个分支结构,从而形成了三分支而归一的流程,如图3-4所示。第3章微机系统应用程序设计第3章微机系统应用程序设计程序清单:BR1: ORG 2000H MOV A,VAR ;取出X送A JZ COMP ;若X=0则转移到COMP JNB ACC.7,POSI ;若X>0则转移到POSI MOV A,#0FFH ;若X<0则A=-1 SJMP COMP ;转分支结构出口POSI: MOV A,#01H ;X>0时A=1COMP: MOV FUNC,A ;存函数Y值HERE: AJMP HERE ;结束程序第3章微机系统应用程序设计3.循环结构程序设计在解决实际问题时,往往会遇到同样的一组需要重复多次的情况,这时应采用循环结构,以简化程序、缩短程序的长度及节省存储空间。例如,要做1到100的加法,没有必要写100条加法指令,而只需写一条加法指令,使其执行100次,每次执行时操作数亦作相应的变化,同样能完成原来规定的操作。循环结构在图3-3中表示有两种形式,可依据题目的具体要求来选用当型或直到型循环结构。循环结构程序也有单重循环和多重循环的形式。循环程序一般由3部分组成:第3章微机系统应用程序设计(1)置循环初值:即设置循环开始时的状态。如使工作单元清零,置循环次数等等。(2)循环体:即要求重复执行的部分。这部分程序应该特别注意,应尽量简化指令,因为它要重复执行许多次。(3)循环控制部分:它包括循环参数修改和依据循环结束条件判断循环是否结束两部分。如循环次数减1,判循环次数是否为0,若为0则停止循环等等。当然,判断循环结束的条件,可以是设置循环次数计数器,也可以是其它条件,如依据某位状态结束循环等。例3:从BLOCK单元开始有一个无符号数数据块,其长度存于LEN单元,试求出数据块中最大的数并存入MAX单元。第3章微机系统应用程序设计第3章微机系统应用程序设计程序清单:LOOP: ORG 2000H MOV R0,#BLOCK ;数据块首址R0 MOV R1,LEN ;数据块长度送R1 MOV MAX,#00H ;存最大数单元清零LOOP1:MOV A,MAX ;(A)←(MAX)
CLR C ;清C SUBB A,@R0 ;(MAX)—((R0))
JNC NEXT ;若(MAX)>((R0)),则转移
MOV MAX,@R0 ;若(MAX)<((R0)),则(MAX)←((R0))NEXT: INC R0 ;修改地址指针
DJNZ R1,LOOP1 ;若(R1)≠0则循环搜索
RET第3章微机系统应用程序设计例4:设计100ms延时程序。解:计算机执行一条指令需要一定的时间,由一些指令组成一段程序,并反复循环执行,利用计算机执行程序所用的时间来实现延时,这种程序称为延时程序。如当系统使用12MHz晶振时,一个机器周期为1,执行一条双字节双周期DJNZ指令的时间为2,因此,执行该指令50000次,就可以达到延时100ms的目的。对于50000次循环可采用外循环、内循环嵌套的多重循环结构。本例题的程序流程如图3-6所示。程序清单:START:ORG 1000H MOV R6,#0C8H ;外循环200次LOOP1:MOV R7,#0F8H ;内循环248次
NOP ;时间补偿LOOP1:DJNZ R7,LOOP2 ;延时2×248=496 DJNZ R6,LOOP1 ;延时500×200=100ms RET第3章微机系统应用程序设计以上程序执行MOVRn,#data指令的时间为1,DJNZ指令2,NOP指令1,所以,内循环延迟时间:1+1+2×248=498,外循环延迟时间:1+(内环延时+2)×200=100.001ms。对于需要更长时间的延时,可采用更多重的嵌套循环来实现,这种软件延时方法不需要增加硬件,且变化灵活,故常被采用。它的缺点是延时过程中CPU被占用,而且系统中的中断服务会影响定时的精度,所以不宜设计太长的延时程序。以上分别论述了3种基本结构程序设计的方法。在解决复杂的实际问题时,往往存在着相互的嵌套,无论程序如何复杂,都能分解成3种基本结构的组合,所以只要掌握了3种基本结构的设计方法,任何复杂的程序都可以顺利编制成功。第3章微机系统应用程序设计4.子程序结构程序设计在一个程序中,将反复出现的程序段编制成一个个独立的程序段,存放在内存中,这些完成某一特定任务可被重复调用的独立程序段被称为子程序。在前面所举的例子中,已有一些程序段是以带有RET指令的子程序形式出现的。在汇编语言编程时,恰当地使用子程序,可使整个程序的结构清楚,阅读和理解方便,而且还可以减少源程序和目标程序的长度,不必多次重复书写和翻译同样的指令。在汇编语言源程序中使用子程序,需要强调注意两个问题,即子程序中参数传递和现场保护的问题。在调用高级语言子程序时参数的传递是很方便的,通过调用语句的实参数以及子程序中的虚参数之间的对应,很容易完成参数的往返传递。但在调用汇编语言子程序时则会遇到一个参数如何传递的问题。如用指令(ACALL、LCALL)调用汇编语言子程序时并不附带任何参数,参数的互相传递要靠编程者自己安排。其实质就是如何安排数据的存放以及工作单元的选择问题。参数传递的方法很多,同一个问题可以采用不同的方法传递参数,相应的程序也会略有差别。一般在汇编语言中采用的参数传递方法有以下3种。第3章微机系统应用程序设计(1)用累加器或工作寄存器来传递参数。即在调用子程序之前把数据送入寄存器R0~R7或者累加器A。调用返回运算结果仍由寄存器或累加器送回。这种方法的优点是编程简单,也易读懂;缺点是工作寄存器容量有限,不能传递太多的参数。(2)用指针寄存器传递参数。由于数据一般都存放在存储器中,故可用指针来指示数据的位置,这样可大大节省传递数据的工作量,并可实现可变长度传递。若参数存放在内部RAM中,通常可用R0或R1作指针寄存器;若参数存放在外部RAM或程序存储器中,可用DPTR作指针。当进行可变长度传递时,可用一个寄存器来指出数据长度,也可使用结束标记指出其长度。第3章微机系统应用程序设计(3)用堆栈来传递参数。在调用子程序前,主程序可用PUSH指令把参数压入堆栈中,进入子程序后,再将压入堆栈的参数弹出到指定的工作寄存或者其它内存单元。子程序运行结束前,也可把结果送入堆栈中。子程序返回主程序后,再由主程序用POP指令得到结果参数。但要注意,调用子程序时,断点处的地址也要压入堆栈,占用两个单元,故在弹出参数时,注意不要把断点地址送出去。另外在返回主程序时,要把堆栈指针向断点地址,以便能正确地返回。在进入汇编语言子程序,特别是进入中断服务子程序时,还应注意的另一个问题是现场保护问题,即对于那些不需要进行传递的参数,包括内存单元内容、工作寄存器的内容以及各标志的状态等,都不应因调用子程序而改变。这就需要将要保护的参数,在进入子程序时压入堆栈,即保护起来,而空出这些数据所占用的工作单元,供子程序使用。在返回调用程序之前,则将压入堆栈的数据弹出到原有的工作单元,恢复其原来的状态,使调用程序可以继续往下执行。这种现场保护的措施在中断时尤为必要,更加不能忽视。第3章微机系统应用程序设计由于堆栈操作是“先入后出”,因此,先压入堆栈的参数应后弹出,才能保证恢复原来的状态。例如:SUBROU: PUSH A PUSH PSW PUSH DPL PUSH DPH … POP DPH POP DPL POP PSW POP A第3章微机系统应用程序设计3.1.4汇编语言开发环境及汇编过程1.汇编语言开发环境单片机应用系统不具备自开发功能。汇编语言程序的开发必须借助一定的开发工具,因此,汇编语言程序设计、调试过程及难易程序与开发环境密切相关。(1)满足最低要求的汇编语言程序开发环境在满足汇编语言程序开发最低要求时,开发装置的配置应具有以下基本功能:①硬件系统能实现程序指令及相关数据输入(如目的程序指令码、数据表格、常数等)。实现程序调试的单步、连续、设断点运行。能修改程序指令及查询程序运行状态。②有仿真头,实现用户应用系统的仿真调试及用户环境运行。③具有EPROM的程序固化功能。④具有反汇编及汇编程序文本打印功能。⑤能对输入的汇编语言程序指令实现保存、转储。这样,就可将已调好的程序段,或键入而未调试完的程序指令保存起来,不需要再次键入。⑥与以上功能相配合的操作软件。第3章微机系统应用程序设计(2)较完善的汇编语言程序开发环境目前,一个较完善的汇编语言程序开发环境除以上基本要求外,应该是:①有汇编语言编译环境。用汇编语言编辑应用程序,能显示编辑错误,并能自动生成目的程序指令码。②具有通用系统微机的外设,如屏幕编辑、磁盘存储、文本打印。③有丰富的子程序库及功能很强的操作软件。要构成这样的开发环境,除了一些专门研制的开发系统外,大多采取在通用系统微机上配备交叉汇编,组合软件构成汇编程序的编译环境,然后半自动生成的目的程序通过通信接口送到开发装置上去进行调试运行。系统机所有的外设资源可以满足程序的磁盘存储、文本打印等。第3章微机系统应用程序设计(3)模拟的开发手段最理想的开发是具有通用系统微机配置水平的专用开发系统。这些系统一般都是单片机生产厂家推出的开发系统,它具有最完善的汇编语言程序开发环境及软件包,但售价昂贵,一般用户无法配置。用户可按下述方法构成一个较为理想的开发环境。①在通用系统微机上实现应用程序的模拟开发在通用系统微机上利用模拟调试软件实现单片机结构功能模拟、指令模拟、实现程序的模拟运行调试。这样,在通用系统微机中可以完成程序编制、纠错、运行调试的一个完整过程。在微机中配置有方便的EPROM读/写装置时可以完成一个应用程序完整的开发过程。目前国内已推出在微机上使用的模拟开发软件。这种开发环境在已有通用微机配置的用户单位,只要配置模拟开发软件即可。目前广泛使用的开发软件μVision3IDE是Keilsoftware公司的产品,它集项目管理、编译工具、代码编写工具、代码调试以及完全仿真于一体,适合个人开发或人数少、对开发过程的管理还不成熟的开发团体。第3章微机系统应用程序设计②用户应用系统运行调试模拟开发环境不是实时仿真,不能完全模拟用户的应用系统环境。一般还需要少量的应用系统运行调试工作。因为在模拟调试时已完成了主要的调试工作。将经过模拟调试好的应用程序固化到EPROM芯片上,然后放在应用系统中试运行,如果不能执行,则返回修改,直到成功。这种调试方法无法了解应用系统的运行状态,修改程序带有一定的盲目性。但是不需要硬件开发装置,成本最低。一般的方法是除了在通用机上配置模拟软件外,还配备有满足实时仿真要求的开发模板或开发装置,它与通用机可以实现通信。通用机将模拟调试过的应用程序输入开发装置,开发装置通过仿真头与应用系统相连。这样,应用程序可以在应用系统的真实环境下运行,以检查应用程序,弥补模拟调试不足。第3章微机系统应用程序设计2.汇编语言源程序的汇编。汇编语言源程序必须转换为机器码表示的目标程序,计算机才能执行。把这种转换过程称这为汇编。对单片机来说,有手工汇编和机器汇编两种汇编方法。(1)手工汇编所谓手工汇编,即把程序用助记符指令写出后,再以手工方式查指令编码表,逐个把助记符指令“翻译”成机器码,然后再把机器码的程序键入单片机,进行调试和运行。由于手工汇编方法麻烦、工作量大、还容易出错,这种方法现在几乎不再应用。(2)机器汇编所谓机器汇编,就是在计算机上通过汇编程序进行源程序的汇编。汇编工作由机器自动完成,直到最后得到机器码的目标程序。在微型机上使用汇编语言都是采用机器汇编。然而在单片机上,由于软硬件资源的限制无法直接进行机器汇编。为此,只好借助于微型计算机,以交叉汇编的方法实现。使用一种计算机的汇编程序去汇编另一种计算机的汇编语言源程序,即为另一种计算机产生目标程序,这种汇编方式称之为交叉汇编。单片机的源程序通常就是通过这种交叉汇编方法而生成目标程序的。鉴于现在PC机的使用非常广泛,所以通常这种交叉汇编都是在PC机上进行的。汇编完成后,再由PC机把生成的目标程序通过串行传送加载到单片机上。交叉汇编的整个过程可用图3-7来说明。第3章微机系统应用程序设计第3章微机系统应用程序设计3.1.5汇编语言设计规范
软件设计更多地是一种工程,而不是一种个人艺术。如果不统一编程规范,最终写出的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。分析表明,编码阶段产生的错误当中,语法错误大概占20%左右,而由于未严格检查软件逻辑导致的错误、函数(模块)之间接口错误及由于代码可理解度低导致优化维护阶段对代码的错误修改引起的错误则占了一半以上。可见,提高软件质量必须降低编码阶段的错误率。为了有效降低编码阶段的错误,需要制定详细的软件编程规范。第3章微机系统应用程序设计1.排版
程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB和空格缩进。缩进的目的是使程序结构清晰,便于阅读和理解。
2.注释
注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,太少不利于代码理解,太多则会对阅读产生干扰,因此只在必要的地方才加注释,而且注释要准确、易懂、尽可能简洁。注释量一般控制在30%到50%之间。程序在必要的地方必须有注释,注释要准确、易懂、简洁。
3.命名第3章微机系统应用程序设计4.可维护性5.程序正确性、效率6.接口7.代码可测性8.代码编译
第3章微机系统应用程序设计3.1.6程序设计举例1.代码转换程序设计下面的例子完成十六进制数与ASCII码之间的相互转换,BCD码与ASCII码之间转换的基本程序设计方法与之类似。例5:十六进制数到ASCII码的转换子程序设计。例6:ASCII码到十六进制数的转换子程序设计。2.运算子程序设计例7:双字节无符号数乘法子程序设计。例8:双字节无符号数除法子程序设计。3.查表程序设计例9:设有一巡检报警装置,需要对16路值进行比较,当每一路输入值超过该路的报警值时,实现报警。要求编制一个查表子程序,依据路数xi,查表得yi的报警值。第3章微机系统应用程序设计4.散转(多分支)程序设计例10:按R2的内容转向4个分支处理程序。4个分支处理程序总长度小于256个字节。解:入口:(R2)=入口条件(0,1,2,3)。例11:设计可多达128路分支出口的转移程序。第3章微机系统应用程序设计3.2C语言程序设计
单片机应用系统的程序设计,可以采用汇编语言完成,也可以采用C语言实现。汇编语言对单片机内部资源的操作直接、简洁、代码紧凑。但是当系统的规模较大时,设计人员更趋于采用C语言进行程序设计。这是由于C语言具有良好的可读性、可移植性和基本的硬件操作能力。3.2.1C51语言概述1.C51程序开发过程(1)采用C51的优点采用C51进行单片机应用程序设计,编译器能自动完成量的存储单元的分配,编程者可以专注于应用程序的逻辑思想;对常用功能模块和算法编制相应的函数,可以方便地进行算法和应用程序的移植。因此,用C51进行程序设计可以大大提高实际工程的开发效率。目前,C51的代码长度做到了汇编程序水平的1.2~1.5倍。当代码长度超过4KB以上时,C51比汇编语言更具有明显的优势。我们还可以借助仿真器,对应用程序的关键代码进行优化,以减少代码长度,提高运行速度。由于单片机生产工艺的改善,单片机的运行速度和内部存储器容量有了较大的提高,这些都为C51语言的使用创造了有利的条件。第3章微机系统应用程序设计(2)C51程序开发过程首先要编写C51源程序,可以采用μVison集成开发环境的源程序编辑功能完成(为了避免μVison编辑器的兼容性问题,可以采用其他文本编辑软件,如UltraEdit完成源程序的编辑);然后建立工程文件,加入C51源程序;这时就可以利用μVison集成的编译器和连接器生成目标文件(﹒EXE);进而进行软件或硬件仿真调试;最后利用编程器将调试无误的代码写到单片机的程序存储器中。2.C51程序结构C51程序由一个或多个函数构成,其中至少应包含一个主函数main。程序从主函数开始执行,调用其他函数后又返回主函数,被调用函数如果位于主调函数前面,可以直接调用,否则应先说明调用。被调用函数可以是用户自编的函数,或是C51编译提供的库函数。第3章微机系统应用程序设计3.2.2C51关键字和标识符关键字是一类具有固定名称和特定含义的特殊标识符,有时又称为保留字。在编写C语言源程序时一般不允许将关键字另作它用,换句话说,就是对于标识符的命名不要与关键字相同。与其他计算机语言相比,C语言的关键字是比较少的,ANSIC标准一共规定了32个关键字,表3-2按用途列出了ANSIC标准的关键字。第3章微机系统应用程序设计3.2.3C51语言的数据类型1.C51的数据类型编写程序的目的是对数据进行操作,并得到所期望的结果。数据是操作的对象,实际问题中存在着不同的数据类型。数据类型决定其取值范围、占用存储器的大小及可参与哪种运算。程序中使用到的数据要存放在存储单元中,在汇编语言中用DB或DW伪指令对存入数据的存储单进行定义;在C51语言中,编译系统要根据定义的数据类型来预留存储单元,这就是定义数据类型的意义第3章微机系统应用程序设计2.C51数据的存储器类型C51是面向8051单片机的程序语言,应用程序中使用的任何数据(变量和常量)必须以一定的存储器类型定位于单片机的相应的存储区域中。3.80C51硬件结构的C51定义C51是对标准C语言(ANSIC)进行了扩展,从而具有对80C51单片机硬件结构的支持与操作能力。第3章微机系统应用程序设计3.2.4常量、变量和指针1.常量和变量C51语言的数据可以分为常量和变量,常量的值在程序执行过程中不能发生变化,变量值在程序执行过程中可以改变。(1)常量常量是在程序执行过程中不能改变的值。按照数据类型,常量可以分为整型常量、字符型常量等。使用预定义对常量进行定义,使用一个标识符代替一个常量,如例3-6。例3-6:常量定义。#defineCONST10/*在以后的程序中CONST可以使用为常量,数据为10*/说明:为了区别变量,常量一般使用大写,而且常量一旦预定义之后就不能再修改。(2)变量变量是在程序执行过程中可以发生改变的值,变量有3个相关参数,即变量名、变量值和变量地址。第3章微机系统应用程序设计2.指针指针为变量的访问提供了一种特殊的方式。如果有一个变量a,则可以利用&a表示变量a的地址。这时可以执行语句:p=&a;该语句把a的地址赋给了指针变量p,这时可以说“p指向了变量a”。变量的指针就是该变量的地址。为了获得指针所指向对象的内容,可以利用指针运算符“*”来实现,如:*p表示变量a的内容。应该注意的是,指针变量中只能存放指针型数据(即地址),不要将一个非指针型的数据赋给个指针变量。第3章微机系统应用程序设计(2)基本存储量的指针基于存储器的指针在定义时就指定了所指向对象的存储类型。此类可以高效访问对象,类型由C51源代码中存储器类型决定,且在编译时确定。由于不必为指针选择存储器,指针的长度可以为1个字节(idata*,data*,pdata*)或2个字节(eode*,xdata*)。第3章微机系统应用程序设计3.2.5C51的基本运算1.C51的算术和赋值运算算术运算和赋值运算是C51语言的基本运算操作之一,下面详细介绍算术和赋值运算。(1)算术运算符和算术表达式(2)赋值运算符和赋值表达式赋值运算符包括普通赋值运算符和复合赋值运算符两种,普通的赋值运算符使用“=”,复合赋值运算符是在普通赋值运算符之前加上其他运算符所构成的赋值符。使用赋值运算符连接的变量和表达式构成赋值表达式.2.逻辑运算C51语言有3种逻辑运算符。①逻辑与:&&。②逻辑或:‖。③逻辑非:!。使用逻辑运算符将表达式或变量连接起来的表达式称为逻辑表达式,逻辑运算内部运算次序是先逻辑非后逻辑与和逻辑或,相同等级时从左到右,逻辑表达式的值为“真”或“假”,在C51系统中使用“0”代表“假”,使用“非0”代表逻辑“真”,但是逻辑运算表达式结果只能使用“1”来表示“真”.第3章微机系统应用程序设计3.关系运算C51语言有6种关系运算,如下所示。①小于:<。②大于:>。③小于等于:≤。④大于等于:≥。⑤如果等于:==。⑥如果不等于:!=。使用关系运算符连接的表达式或变量称为关系表达式,关系运算符中前两种优先级别高于后两种,同等优先级下遵守从左到右的顺序,关系运算式的运算结果是逻辑真“1”或者是逻辑假“0”.第3章微机系统应用程序设计4.位操作MCS-51系列单片机有位寻址空间,支持位变量操作,恰当的位操作会大大提高单片机程序的运行速度,还能极大地方便用户编程,位操作包括位逻辑运算和移位运算两种类型。(1)位逻辑运算位逻辑运算包括位与、位或、位异或位取反。①位与:关键字“&”,如果两位都为“1”,则结果为“1”,否则为“0”。②位或:关键字“∣”,如果两位其中有一个为“1”,则结果为“1”,否则为“0”。③位异或:关键字“^”,如果两位相等则为“1”,否则为“0”。④位取反:关键字“~”,如果该位为“1”,则取反后为“0”,如果该位为“0”,则该位取反后为“1”。第3章微机系统应用程序设计5.自增减运算、复合运算、逗号运算6.运算符的优先级第3章微机系统应用程序设计3.2.6函数与普通的C语言程序类似,C51程序是由若干模块化的函数构成。函数是C51程序的基本模块,常说的子程序就是由函数来实现的。用户可以根据需要定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流运输管理培训
- 《政府土地推介会》课件
- 《餐饮包房设计方案》课件
- 2024-2025学年山东省临沂市沂水县人教版三年级上册期中考试数学试卷(原卷版)-A4
- 《数学解比例》课件
- 2024学年广东省衡水高三语文(上)12月联考试卷附答案解析
- 项目可行性报告范文
- 重难点03 阴影部分面积求解问题(解析版)
- 物业保养述职报告范文
- 2025年三亚货运从业资格证模拟考试下载题
- 绿色建筑概论学习通超星期末考试答案章节答案2024年
- GB/T 44481-2024建筑消防设施检测技术规范
- 甲状腺超声超声征象及TI-RADS分类
- 《白杨礼赞》知识清单
- 2024年2个娃儿的离婚协议书模板
- 2024年三级公共营养师考前冲刺备考题库200题(含详解)
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
- 《陕西省安全生产条例》培训试题
- Revision Being a good guest(教学设计)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2024七年级历史上册知识点梳理
- 《高危新生儿分类分级管理专家共识(2023)》解读
评论
0/150
提交评论