资源预览内容
第1页 / 共39页
第2页 / 共39页
第3页 / 共39页
第4页 / 共39页
第5页 / 共39页
第6页 / 共39页
第7页 / 共39页
第8页 / 共39页
第9页 / 共39页
第10页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
学习情景四微控制器C51语言程序设计,4. 1任务1 C51语言基础应用 4. 2任务2语句与流程控制 4. 3任务3函数及应用 4. 4任务4简单十字路口交通信号灯的控制 4. 5情景评价 4. 6情景总结,返回,4. 1任务1 C51语言基础应用,4.1.1任务内容 本任务主要介绍C51语言的基本知识,包括标识符、常量、基本数据类型等。 4.1.2任务实施 1.标识符 (1)关键字 关键字是C51语言规定的一批标识符,在源程序中代表固定的含义,不能另作他用。 C51语言除了支持如表4一1所示的ANSI标准C语言中的关键字外,还根据MCS一51系列微控制器的结构特点扩展部分关键字,如表4一2所示。,下一页,返回,4. 1任务1 C51语言基础应用,(2)预定义标识符 预定义标识符是指C51语言提供的系统函数的名字(如scanf, printf)和预编译处理命令(如include, define)等。C51语言语法允许用户把这类标识符另作他用,但将使这些标识符失去系统规定的原意。因此,为了避免误解,建议用户不要把预定义标识符另作他用。 (3)自定义标识符 由用户根据需要定义的标识符,一般用来给变量、函数、数组或文件等命名。程序中使用的自定义标识符除要遵循标识符的命名规则外,还应做到“见名知意”,即选择具有相关含义的英文单词或汉语拼音,以增加程序的可读性。如果自定义标识符与关键字相同,程序在编译时将给出出错信息;如果自定义标识符与预定义标识符相同,系统不报错。,上一页,下一页,返回,4. 1任务1 C51语言基础应用,2.常量 在程序运行过程中其值始终不变的量称为常量。在C51语言中,可以使用整型常量、实型常量、字符型常量。 (1)整型常量 整型常量又称为整数。在C51语言中,整数可以用十进制、八进制和十六进制形式来表示。但是,C51中数据的输出形式只有十进制和十六进制两种。 十六进制数:用数字0和字母x或X开头,如Ox5a、-Ox9c等。,上一页,下一页,返回,4. 1任务1 C51语言基础应用,(2)实型常量 实型常量又称实数。在C51语言中,实数有两种表示形式,均采用十进制数,默认格式输出时最多只保留6位小数。 小数形式:由数字和小数点组成。 指数形式:小数形式的实数E 1整数。 (3)字符型常量 用单引号括起来的一个字符,它代表ASCII字符集中的一个字符称为字符常量。,上一页,下一页,返回,4. 1任务1 C51语言基础应用,3.基本数据类型 数据类型是指变量的内在存储方式,即存储变量所需的字节数以及变量的取值范围。C51语言中变量的基本数据类型如表4一3所示,其中bit 、 shit 、 sfr 、 sfr16为C51语言新增的数据类型,可以有效地利用MCS - 51系列微控制器的内部资源。所谓变量,是指在程序运行过程中其值可以改变的量。,上一页,下一页,返回,4. 1任务1 C51语言基础应用,变量应该先定义后使用,定义格式如下: 数据类型变量标识符=初值 变量定义通常放在函数的开头部分,但也可以放在函数的外部或复合语句的开头。以float为例,变量的定义方式主要有以下3种。 当在一个表达式中出现不同数据类型的变量时,必须进行数据类型转换。C51语言中数据类型的转换有两种方式:自动类型转换和强制类型转换。,上一页,下一页,返回,4. 1任务1 C51语言基础应用,(1)自动类型转换 不同数据类型的变量在运算时,由编译系统自动将它们转换成同一数据类型,再进行运算。自动转换规则:bit char int long float signed unsigned。 自左至右数据长度增加,即参加运算的各个变量都转换为它们之中数据最长的数据类型。当赋值运算符左右两侧类型不一致时,编译系统会按上述规则,自动把右侧表达式的类型转换成左侧变量的类型再赋值。 (2)强制类型转换 根据程序设计的需要,可以进行强制类型转换,强制类型转换是利用强制类型转换符将一个表达式强制转换成所需要的类型。其格式如下: (类型)表达式,上一页,返回,4. 2任务2语句与流程控制,4. 2. 1任务内容 本任务主要学习C51语言赋值语句、函数调用语句、复合语句、空语句、顺序结构、分支结构及循环结构的灵活应用。 4. 2. 2任务实施 1.基本语句 基本语句主要用于顺序结构程序的编写,包括赋值语句、函数调用语句、复合语句、空语句等。在C51语言中,语句的结束符为分号。 (1)赋值语句 在任何合法的赋值表达式的尾部加上一个分号就构成了赋值语句。赋值语句的一般形式为: 变量=表达式;,下一页,返回,4. 2任务2语句与流程控制,(2)函数调用语句 在C51语言中,若函数仅进行某些操作而不返回函数值,这时函数的调用可作为一条独立的语句,称为函数调用语句。其一般形式为: 函数名(实际参数表); (3)复合语句 在C51语言中,把多条语句用一对大括号括起来组成的语句称为复合语句。复合语句又称为“语句块”,其一般格式为: 语句1;语句2;语句n; 注意:大括号之后不再加分号 复合语句虽然可由多条语句组成,但它是一个整体,相当于一条语句,凡可以使用单一语句的位置都可以使用复合语句。在复合语句内,不仅可以有执行语句,还可以有变量定义(或说明)语句。,上一页,下一页,返回,4. 2任务2语句与流程控制,(4)空语句 如果一条语句只有语句结束符号“;”则称为空语句。例如: ; 空语句在执行时不产生任何动作,但仍有一定的作用。比如,预留位置或用来作为空循环体。但是,在程序中随意加分号也会导致逻辑上的错误,需要慎用。 2.流程语句 流程控制语句有顺序结构、分支结构及循环结构三种语句,顺序语句就是按照语句在程序中出现的先后顺序进行执行,相对比较简单。在此就重点介绍分支语句和循环语句。,上一页,下一页,返回,4. 2任务2语句与流程控制,(1)分支语句 C51语言的流程控制语句主要用于编写具有分支结构或循环结构的程序,包括分支语句(if, if-else , if-else-if , switch )、循环语句(while , do-while , for)和辅助控制语句(break continue) 为了便于理解,如图4. 2所示给出一个用简单的微控制器应用系统。微控制器采用89C51,在P1口的低4位P1. 0 P1. 3接了4个发光二极管(DO D3 ),在P3口的中间4位P3. 2P3. 5接了4个具有锁定功能的按键(K1一K4)。,上一页,下一页,返回,4. 2任务2语句与流程控制,if语句的一般形式为:if(表达式)语句; 其中,if是C51语言的关键字,表达式两侧的圆括号不可少,最后的语句可以是C51语言任意合法的语句。 如图4. 3所示给出了if语句的执行过程:先计算表达式,如果表达式的值为真(非零),则执行其后的语句;否则,顺序执行if语句后的下一条语句。可见,if语句是一种单分支语句。 (2)循环语句 在程序设计中经常会遇到需要重复执行的操作,如延时、累加、累乘、数据传递等,利用循环结构来处理各类重复操作既简单又方便。C51语言中提供了3种语句来实现循环结构,分别是while语句、do-while语句和fn:语句。其中,while语句又称为“当”型循环,do-while语句又称为“直到”型循环。,上一页,下一页,返回,4. 2任务2语句与流程控制, while语句。 while语句的一般形式为:while(表达式)循环体 其中,“表达式”可以是C51语言中任意合法的表达式,其作用是控制循环体是否执行;“循环体”是循环语句中需要重复执行的部分,可以是一条简单的可执行语句,也可以是用大括号括起来的复合语句。 do-while语句。 do-while语句的一般形式为:do循环体while(表达式); 其中,“表达式”可以是C51语言中任意合法的表达式,其作用是控制循环体是否执行;“循环体”可以是C51语言中任意合法的可执行语句;最后的“;”不可丢,表示do-while语句结束。,上一页,下一页,返回,4. 2任务2语句与流程控制,for语句。 for语句的一般形式为:for(表达式1;表达式2;表达式3)循环体 其中,“表达式1 ,“表达式2“,“表达式3”可以是C51语言中任意合法的表达式,3个表达式之间用“;”隔开,其作用是控制循环体是否执行;循环体可以是C51语言中任意合法的可执行语句。 for语句的典型应用形式为:for(循环变量初值;循环条件;循环变量增值)循环体,上一页,返回,4. 3任务3函数及应用,4. 3. 1任务内容 C51语言设计程序就是编写函数,下面先介绍C51语言中函数定义的一般格式,格式如下。 函数类型函数名(参数列表)存储模式函数种类 interrupt n using n 局部变量定义 可执行语句 其中,大括号以外的部分称为函数头;大括号以内的部分称为函数体。如果函数体内无语句,则称之为空函数。空函数不执行任何操作,定义它的口的只是为了以后程序功能的扩充。函数头中各部分的含义如下。,下一页,返回,4. 3任务3函数及应用,函数类型( return- t9pe:函数返回值的类型,即函数类型(默认为lnt) 。 函数名(funcname:函数名。在同一程序中,函数名必须唯一。 参数列表(args):函数的参数列表。参数可有可无。若有,则称之为有参函数,各参数之间要用“,”分隔;若无,则称之为无参函数。 存储模式(small, compact/large):指定函数的存储模式。 函数种类(reentrant):指定函数是递归的或可重入的。 interrupt n:指定函数是一个中断函数。n为中断源的编号(04)。 using n: 指定函数所用的工作寄存器组。n为工作寄存器组的编号(03 ) 。,上一页,下一页,返回,4. 3任务3函数及应用,从函数的定义格式可以看出,C51语言在4个方面对标准C语言的函数进行了扩展:指定函数的存储模式;指定函数是可重入的;指定函数是一个中断函数;指定函数所用的工作寄存器组。 在构成C51语言设计程序的若干个函数中,有且仅有一个是主函数main()。由于C51语言程序的执行都是从main()函数开始的,也是在main()函数中结束整个程序运行的,其他函数只有在执行main()函数的过程中被调用才能被执行。 注意:同变量一样,函数也必须先定义后使用。所有函数在定义时都是相互独立的,一个函数中不能再定义其他函数,但可以相互调用。函数调用的一般规则是:主函数可以调用其他普通函数;普通函数之间可以相互调用;普通函数不能调用主函数,上一页,下一页,返回,4. 3任务3函数及应用,4. 3. 2任务实施 MCS -51系列微控制器通常有5个中断源,为了方便使用,C51语言对它们进行了编号,如表4一4所示。当CPU正在执行一个特定任务时,可能有更紧急的事情需要CPU处理,这就涉及中断优先级。高优先级中断程序可以中断正在处理的低优先级中断程序,因此 最好给每种不同优先级程序分配不同的工作寄存器组,以达到压栈保护的目的。 中断函数的定义格式如下: 函数类型函数名()interrupt中断编号using工作寄存器组编号 可执行语句 ,上一页,下一页,返回,4. 3任务3函数及应用,4. 3. 3任务扩展 在主函数和中断函数中都可调用的函数容易产生问题。MCS一51系列微控制器一般使用寄存器传递函数参数,局部变量一般存放在片内RA M中。由于片内RA M的容量很小(只有1288),函数重入时会破坏或覆盖上次调用的数据。为此,C51语言提供了关键字:P-PritT9rit,用于将相应的函数指定为可重入函数。所谓重入函数,是指可以在函数体内间接调用其自身的函数。 重入函数可以被递归调用和多重调用,而不用担心变量被覆盖,因为每次函数调用中的局部变量都会被单独保存起来。重入函数的
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号