单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言

上传人:E**** 文档编号:89491227 上传时间:2019-05-25 格式:PPT 页数:87 大小:372KB
返回 下载 相关 举报
单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言_第1页
第1页 / 共87页
单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言_第2页
第2页 / 共87页
单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言_第3页
第3页 / 共87页
单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言_第4页
第4页 / 共87页
单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言》由会员分享,可在线阅读,更多相关《单片机原理与应用 教学课件 ppt 作者 杭和平 第4章_单片机的C51编程语言(87页珍藏版)》请在金锄头文库上搜索。

1、2019/5/25,1,第4章 单片机的C51编程语言,2,2019/5/25,第4章 单片机的C51编程语言,4.1 C51编程语言概述 4.2 C51的标识符和关键字 4.3 C51的变量与数据类型 4.4 C51语言的数组、指针与结构 4.5 C51的运算符和表达式 4.6 C51语言的程序结构 4.7 C51语言的函数 4.8 中断服务程序 4.9 C51的预处理 4.10 C51的库函数 4.11 使用C5I编译器时的注意事项,3,2019/5/25,4.1 C51编程语言概述,C语言是一种结构化语言,可产生紧凑代码 C语言可以进行许多机器级函数控制而不用汇编语言。 C语言目前已成为

2、电子工程师进行单片机系统编程时的首选编程语言。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充。基于51系列单片机的C语言或C语言编译器简称为C51语言或C51。,4,2019/5/25,C51语言编程与汇编语言编程相比的优势,1可读性好、编程调试灵活方便 2生成的代码编译效率高 3完全模块化 4可移植性好 5便于项目维护管理,5,2019/5/25,单片机C51与标准ANSl C编译器的主要区别,以Keil公司的Keil C5l(以下简称C5l)编译器为例 C5l系列头文件集中体现了各系列芯片的不同功能 C5l比ANSI C多一种“位”类型 数据存储类

3、型有很大的区别 函数的使用上,由于单片机系统的资源有限,它的编译系统不允许太多的程序嵌套 C5l与标准ANSI C库函数,由于部分库函数不适合单片机处理系统,因此被排除在外,如字符屏幕和图形函数。也有一些库函数继续使用,但这些库函数是厂家针对硬件特点相应开发的,它们与ANSI C的构成及用法都有很大的区别,如printf和scanf。在ANSI C中这两个函数通常用于屏幕打印和接收字符,而在C5l中,它们则主要用于串行通信口数据的发送和接收。,6,2019/5/25,C51的开发过程,例4-1 设图1-2系统要求是:当S1闭合时,报警灯亮;而S1打开时,报警灯灭。用C51语言编写实现该功能的程

4、序,程序名为ex4-1.c: #include /定义MCS-51的特殊功能寄存器SFR sbit P32 = P32; /定义 P3.2 为 P32 sbit P20 = P20; /定义 P2.0 为 P20 main( ) while(1) P32=1; if (P32=0) P20=1; else P20=0; 在C51中,使用“/* */”和“/”符号进行注释。注释不影响程序的功能,用于说明程序的用途、功能,增加程序的可读性和可维护性。编译后注释不存在,不影响运行文件的大小。优秀的程序设计人员要养成良好的注释习惯,一般在程序的开始要写注释,表明程序的要求、功能,编写人员,编写日期,版

5、本号等信息。,7,2019/5/25,使用任何文本编辑软件,或KEIL C集成的编辑系统书写C以上程序。 使用KEIL C的C51编译器和连接软件(用KEIL C集成开发工具uVision中的Build target批处理),生成可以写入单片机的目标文件,通常为HEX文件(ex4-1.hex) 用程序烧录器将该文件写入单片机,单片机上电即可运行。 同时Build target还生成许多中间文件,用于程序的调试,例如,从ex4-1.lst文件中可以看见C程序编译后生成的汇编程序,由此可以理解单片机硬件具体的执行过程,还可以对C程序编程的效率进行了解。,8,2019/5/25,ex4-1.lst文

6、件 0000 ?C0001: 0000 D2B2 SETB P32 0002 20B204 JB P32,?C0003 0005 D2A0 SETB P20 0007 80F7 SJMP ?C0001 0009 ?C0003: 0009 C2A0 CLR P20 000B 80F3 SJMP ?C0001 可以看出,C编译器编译的结果与我们大多人用汇编语言的编程结果相同,但是C51语言的可读性更好,特别是当程序更加复杂时,C51语言有明显的优势。,9,2019/5/25,标识符用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。 C语言是区分大小写的一种高级语言。

7、 标识符由字符串、数字和下划线等组成,第一个字符必须是字母或下划线 错误的标识符,编译时会有错误提示。 C5l中有些库函数的标识符是以下划线开头的,所以一般不要以下划线开头命名标识符。,C51的标识符和关键字,10,2019/5/25,11,2019/5/25,12,2019/5/25,13,2019/5/25,14,2019/5/25,4.3 C51的变量与数据类型,1常量 常量又称为标量,它的值在程序执行过程中不能改变,常量的数据类型有整型、浮点型字符型和字符串型等。 实际使用中用#define定义在程序中经常用到的常量,或者可能需要根据不同的情况进行更改的常量,例如译码地址。而不是在程序

8、中直接使用常量值。这样一方面有助于提高程序的可读性,另一方面也便于程序的修改和维护,例如: #define PI 3.14 /以后的编程中用PI代替浮点数常量3.14,便于阅读 #define SYSCLK 12000000 /长整型常量用SYSCLK代替12MHz时钟 #define TRUE 1 /用字符TRUE,在逻辑运算中代替1 #define STAR * /用STAR表示字符“*” #define uint unsigned int /用uint 代替unsigned int,简化编辑,15,2019/5/25,例如语句:if(key= =TRUE) ,与语句if(key= =1)

9、 相同。 C51语言(汇编语言也是同样)编辑时,除注释外,要使用英文符号,例如上述定义的字符“*”,在程序中是用英文的单引号,而不是中文符号单引号;,16,2019/5/25,常量分为:,1)整型常量。整型常量值:可用十进制表示,如128,-35等;也可以用十六进制表示,如0x1000。 2)浮点型常量。如0.12、-10.3等。 3)字符型常量。字符型常量是用单引号括起来的一个字符,如A、0、=等,编译程序将把这些字符型常量转换为ASCII码,例如A等于0x41。对于不可显示的控制字符,可直接写出字符的ASCII码,或者在字符前加上反斜杠“”组成转义符。转义符可以完成一些特殊功能和格式控制。

10、 4)字符串型常量。字符串型常量用一对双引号括起一串字符来表示,如“Hello”、“OK”等。字符串型常量由双引号作为界限符。当字符串中需要出现双引号时,需使用转义字符“”来表示。,17,2019/5/25,18,2019/5/25,变量,变量是一种在程序执行过程中,其数值不断变化的量。 C51规定变量必须先定义后使用。 C51的变量主要有表4-4中的各种数据类型,而sfr、sfr16、sbit三种数据类型用于对MCS-51单片机的特殊功能寄存器(SFR)的操作,不是我们传统意义上的变量。 C51对变量定义的格式如下: 存储种类 数据类型 存储器类型 变量名表,19,2019/5/25,存储种

11、类,存储种类 数据类型 存储器类型 变量名表 变量的存储种类反映了变量的作用范围和寿命,将影响到编译器对变量在RAM中位置的安排。 C51有四种存储种类:auto(自动)、extern(外部)、static(静态)、register(寄存器)。 如果不声明变量的存储种类,则该变量将为auto变量。,20,2019/5/25,存储种类,与PC机的C编程相比,C51的存储类型复杂很多,这是由于MCS-51单片机存储器类型的多样性决定的。可以通过存储器类型的定义,将变量安排在不同的存储区域。 存储种类和存储器类型是可选项。如果没有定义变量的存储种类或存储器类型,C51编译器将根据变量定义的位置以及存

12、储器模式,由C51编译器分配变量的在RAM中的位置(地址)。,21,2019/5/25,数据类型,存储种类 数据类型 存储器类型 变量名表 数据类型决定变量的类型以及在存储器中的长度,变量名表中各个变量用逗号隔开。例如: int i,j,k; /定义三个整型变量i,j,k unsigned int si,sk; /定义无符号整型变量si,sk bit my_bit; /定义位变量my_bit,22,2019/5/25,局部变量和全局变量,根据变量作用域的不同,变量可分为。 1)局部变量:局部变量也称为内部变量,是指在函数内部或以花括号“ ”括起来的功能模块内部定义的变量。局部变量只在定义它的函

13、数或功能模块内有效,在该函数或功能模块以外不能使用。在C5l语言中局部变量必须定义在函数或功能模块的开头。 2)全局变量。全局变量也称为外部变量,是指在程序开始处或各个功能函数的外面定义的变量。在程序开始处定义的全局变量对于整个程序都有效,可供程序中所有的函数共同使用;而在各功能函数外面定义的全局变量只对全局变量定义语句后定义的函数有效,在全局变量定义之前定义的函数不能使用该变量。一般在程序开始处定义全局变量。,23,2019/5/25,全局变量的缺点,(1)全局变量由C编译器在动态区外的固定存储区域中存储,它在整个程序执行期间均占用存储空间,这将增大程序执行时所占的内存。 (2)全局变量是外

14、部定义的,这将破坏函数的模块化结构,不利于函数的移植。 (3)由于多个模块均可对全局变量进行修改,处理不当时可能导致程序错误,且难以调试。因此应避免使用不必要的全局变量。 有时函数需要引用一个在其后面定义的变量或在另一个程序文件中定义的变量,可使用exten关键字进行外部变量声明。外部变量声明不同于外部变量定义,外部变量只定义一次,而可以多次使用外部变量声明。,24,2019/5/25,存储种类 数据类型 存储器类型 变量名表 C51具有ANSI C的所有标准数据类型,包括: char、int、short、long、float和double,对Keil C的C51编译器来说,short类型和i

15、nt类型相同,double类型和float类型相同。 除此之外,为了更加有利地利用MCS-51的结构,C51还增加了一些特殊的数据类型,包括bit、sfr、sfr16、sbit。,数据类型,25,2019/5/25,26,2019/5/25,1char字符类型,char类型的长度是8位,1字节(简称1B),通常用于定义处理字符数据的变量或常量。分无符号字符类型unsigned char和有符号字符类型signed char,默认值为signed char类型。unsigned char类型用字节中所有的位表示数值,可以表达的数值范围是0255。signed char类型用字节中最高位表示数据的

16、符号,0表示正数,1表示负数,负数用补码表示,能表示的数值范围是-128+127。unsigned char常用于处理ASCII字符或用于处理小于或等于255的整型数。,27,2019/5/25,2int整型,int整型长度为16位,2字节(2B),用于存放一个双字节数据。分有符号int整型数signed int和无符号int整型数unsigned int,默认值为signed int类型。signed int表示的数值范围是-32768+32767,字节中最高位表示数据的符号,0表示正数,1表示负数。unsigned int表示的数值范围是065535。,28,2019/5/25,3long长整型,long长整型长度为32位,4字节(4B),用于存放一个4B数据。分有符号long长整型signed

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号