版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、公选课 单片机基础及应用,主讲:张宏伟,一、C及C51语言概述 二、C51基础知识 三、C程序的规范化设计,一、C及C51语言概述,常用编程语言 用什么语言最好?这主要取决于应用领域,每种语言都有自已的长处和不足。 1)汇编语言和C语言在单片机及工控领域用较多。另外C语言也是一种通用语言,是学C+/c#的起点。 2)C+系统编程等多个方面,最常用的编译器是VC。 3)C#/Java网络编程方面新兴的。 4)VB通用。,C及C51语言的特点,语言简洁,使用方便灵活。 可移植性好。 表达能力强。 表达方式灵活。 可进行结构化程序设计。 可以直接操作计算机硬件。 生成的目标代码质量高。,什么是ANS
2、I C,ANSI 就是美国国家标准协会(American National Standards Institute) ANSI C 就是美国国家标准协会制定的一个C语言的标准 。,单片机C语言和ANSI C的区别和联系,“单片机C语言” 通常和ANSI C间关系只是存在一个交集。也就是说,它们分别都存在着自己的特定内容。由于ANSI C是一般C的基础,所以某些“单片机C语言”可能会舍去部分ANSI C中的标准,以简化编译。 但反过来,某些“单片机C语言”还会增加一些单片机特有的语言特性,以方便针对单片机的编程,二、C51基础知识,1、标识符 2、关键字 3、 C51编译器所支持的数据类型 4、
3、C51对内部资源的定义 5、常量 6、变量 7、数组 8、运算符 9、C51绝对地址访问 10、 C51的基本语句 11、中断服务程序,1、标识符,标识符是用来标识源程序中某个对象的名字,这些对象可以是函数、变量、数组等。 C语言对大小些敏感, 如“Timer1”、“TIMER1” 是完全不同定义的标识符。 标识符由字符串、数字和下划线等组成,注意的是第一个字符必须是字母或下划线。 标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。,2、关键字,关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键字亦同。 在KEIL uVision2中的关键字除了
4、有ANSI C标准的32个关键字外还根据51单片机的特点扩展了相关的关键字。,关键字 :,3、KEIL C51编译器所支持的数据类型,1)char字符类型,char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。 unsigned char:0255。 signed char:字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。所能表示的数值范围是-128+127。 unsigned char常用于处理ASCII字符或用于处理小于或等于255的整型数。,2)int整型,int整型长度为两个字节,用于存放一个双字节数据。 signed int:-32768
5、+32767 unsigned int:065535,3)long长整型 long长整型长度为四个字节,用于存放一个四字节数据。分有signed long和unsigned long 4)float浮点型 float浮点型在十进制中具有7位有效数字,是符合IEEE754标准的单精度浮点型数据,占用四个字节。 5)*指针型 指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。,6)bit位标量,C51编译器的扩充数据类型 利用bit位标量可定义一个位标量,但不能定义位指针,也不能定义位数组。 它的值是一个二进制位,不是0就是1,类似高级语言中的Boolean类型中的True和Fals
6、e。,7)sfr特殊功能寄存器,sfr也是一种扩充数据类型 占用一个内存单元,值域为0255。利用它可以访问51单片机内部的所有特殊功能寄存器。 其用法: sfr 特殊功能寄存器名 = 特殊功能寄存器地址常数; 如sfr P1 = 0 x90;/*定义P1 I/O口,其地址90H*/。 如用P1 = 255 /*把FFH送入P1中(对P1 端口的所有引脚置高电平)*/。,8)Sfr16,16位特殊功能寄存器 sfr16占用两个内存单元,值域为065535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器。 用法: sfr16 特殊功能寄存器名= 特殊功能寄存
7、器地址常数; 如8052的T2定时器,可以定义为: sfr16 T2 = 0 xCC; /*这里定义8052定时器2,地址为T2L=CCH,T2H=CDH*/,9)sbit可寻址位,sbit是C51中的一种扩充数据类型,利用它可以访问芯片内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。,9)sbit可寻址位,sbit 的用法有三种: (1) sbit 位变量名 = 位地址 例如:sbit P1_1 = 0 x91; (2) sbit 位变量名 = 特殊功能寄存器名 位位置 例如:sfr P1 = 0 x90; sbit P1_1 = P1 1;/*P1_1 为P1中的P1.1 引脚*/ (
8、3)sbit 位变量名字节地址 位位置(位序号) 例如:sbit P1_1 = 0 x90 1;,4、C51对内部资源的定义,MCS-51内部资源定义函数是MCU中寄存器的地址映射。MCS-51单片机提供128字节的SFR寻址区,地址为80HFFH,51单片机中,除了程序计数器PC和4组通用寄存器组之外,其他所有的寄存器均为SFR,并位于片内特殊寄存器区。 这个区域可位寻址、字节寻址或字寻址,用来控制定时/计数器、I/O口、串行口等部件。 特殊功能寄存器在C51语言中的声明,由几个关键字来完成。,4、C51对内部资源的定义,MCS-51单片机所有标准的寄存器的使用都是已经由C51头文件定义完成
9、,编程人员可以直接使用符号的定义。 在使用C51已定义的寄存器符号时,要用预编译命令#include将有关“头文件”包括到源文件中。,4、C51对内部资源的定义,Keil软件中提供实现此功能的头文件很多,如“reg51.h”、“reg52.h”、“AT89X51.H”、“AT89X52.H”等,可自行选型。使用MCS-51内部资源定义时要用到“reg51.h”文件,因此源文件开头应有以下预编译命令: #include 或 #include ”reg51.h”。 思考:这两种格式有何不同?,4、C51对内部资源的定义,寻找头文件时候的路径顺序不同 使用尖括号,先去找系统库目录 使用分号,先去找当
10、前目录 为了更快的找到头文件,加快编译速度,建议: 自定义头文件用引号 系统头文件用尖括号,例1:利用MCS-51单片机的P1 引脚P1.0 引接一只LED,送“0”点亮,送“1”灭。则要求点亮,程序如下:,例1:利用MCS-51单片机的P1 引脚P1.0 引接一只LED,送“0”点亮,送“1”灭。则要求点亮,程序如下: #include “reg51.h” sbit P1_0=P10; void main() P1_0=0; ,main()函数:也称为主函数。C语言都是从main()函数开始执行的。前面加了一个void 是说明该函数是没有返回值的。,#include 代表的是加载头文件,头文
11、件是C编译器中带的已经定义的函数的集合或自定义的一个函数的集合。 程序中加载一个reg51.h的文件,那么打开reg51.h里边的内容是什么呢? 如编码器在C盘下C51文件夹内,则REG51.h文件的路径是C:KeilC51INCreg51.h。 例如: P1定义为 sfr P1 = 0 x90;,上例中,符号P1(代表P1锁存器)已经在头文件“reg51.h”中有定义。 P1_0表示P1.0引脚,它没有被事先定义好,所以需要使用sbit进行定义。 注意: AT89X51.H 头文件中有P1_0的位定义。,例1:利用MCS-51单片机的P1 引脚P1.0 引接一只LED,送“0”点亮,送“1”
12、灭。则要求点亮,程序如下: #include void main() P1_0=0; ,思考:如果点量8个灯,如何编程序。,5、常量,常量是在程序运行过程中不能改变值的量,而变量是可以在程序运行过程中不断变化的量。 变量的定义可以使用所有C51编译器支持的数据类型 常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。,5、常量,1)整型常量 整型常量可以表示为: 十进制,如123、0、89等。 十六进制则以0 x开头如0 x34,-0 x3B等。 长整型就在数字后面加字母L,如104L等。,5、常量,2)浮点型常量: 可分为十进制和指数表示形式。 十进制由数字和小数点组成,如0.888,
13、3345.345,0.0等,整数或小数部分为0,可以省略但必须有小数点。,常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有几种:#difine False 0 x0; /用预定义语句可以定义常量#difine True 0 x1; /这里定义False为0,True为1 /在程序中用到False编译时自动用0替换,同理True替换为1,unsigned int code a=100; /这一句用code把a定义在程序存储器中并赋值 const unsigned int c=100; /用const定义c为无符号int常量并赋值 以上两句它们的值都保存在程序存储器中,而程序存
14、储器在运行中是不允许被修改的,所以如果在这两句后面用了类似a=110,a+这样的赋值语句,编译时将会出错。,6、变量,变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。,6、变量,定义一个变量的格式如下: 存储种类 数据类型 存储器类型变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。 存储种类是指变量在程序执行过程中的作用范围。存储种类有四种: 自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto
15、),6、变量,存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。,KEIL 所能认别的存储器类型,如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。 无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显著的提高系统性能。 还有要指出的就是变量的存储种类与存储器类型是完全无关的。,例: 数据类型 存储类型 变量 Char data var1; bit bdata flags; unsigned char xdata vext
16、or10;,7、数组,数组是同一类型变量的有序集合。先定义后使用,一维的定义格式: 数据类型 数组名 常量表达式; unsigned int xcount 10; /定义无符号整形数组,有10 个数据单元 char inputstring 5; /定义字符形数组,有5 个数据单元,8、运算符,与C语言基本相同: 1)算术运算: + - * / % : (加 减 乘 除 取余运算符) 2)关系运算 = = : (大于 大于等于 小于 小于等于) = != :(测试等于 测试不等于),8、运算符,3)逻辑运算 /*将数据3AH写入地址为0 xffec的存储单元或I/O端口*/ ,10、C51的基本
17、语句,与标准C语言基本相同: if 选择语言 switch/case 多分支选择语言 while 循环语言 do-while 循环语言 for 循环语言,11、中断服务程序,函数名()interrupt n using m Void int0demo(void) interrupt 0 using 2 /* 外部中断0的服务函数定义,使用第二组工作寄存器组*/,8051的中断向量和中断号,注意:函数不能直接调用中断函数;不能通过形参传速参数;但中断函数允许调用其它函数,两者所使用的寄存器组应相同。,三、C程序的规范化设计,在单片机C程序设计中,项目一般按功能进行结构化设计。将一个项目划分为多个
18、功能,每个功能的相关程序放在一个C程序文档中,称之为一个模块(group),对应的文件名即为模块名。 一个模块通常由两个文档组成: 一个为头文件.h,对模块中的数据结构和函数原型进行描述; 另一个则为C文件.c ,对数据实例或对象定义,以及函数算法具体实现。,(1)C51库函数与H头文件,C51编译器的运行库中包含有丰富的库函数,使用库函数可以大大简化用户的程序设计工作,提高编程效率。 每个库函数都在相应的头文件中给出了函数原型说明,用户如果需要使用库函数,必须在源程序的开始处采用预处理器指令#include将有关的头文件包含进来。,C51包含的头文件,常用头文件有: reg51.h(定义特殊
19、功能寄存器和位寄存器); math.h 数学函数库(定义常用数学运算); absacc.h 绝对地址访问头文件 (定义一些宏用来对存储器空间进行绝对地址访问) intrins.h 内部函数库 (包含变量循环移位、位操作等函数),(2) C51的程序结构,与一般C语言的结构相同,以main()函数为程序人口,程序体中包含若干语句还可以包含若干函数。,C51的程序结构如下,全局变量说明 函数声明 Main() 数据说明部分 语句执行部分,包括可能的函数调用语句等 函数类型 函数名(参数表)/*函数1*/ 数据说明部分 语句执行部分,包括可能的函数调用语句等 函数类型 函数名(参数表)/*函数N*/
20、 数据说明部分 语句执行部分,包括可能的函数调用语句等 ,编程规范:,遵循好的C51编程规范能够提高可读性,提高源程序的编写、调试和修改的效率,减少开发过程中的不利因素。 1)注释 注释内容应简练、清楚、明了,对于一目了然的语句不加注释。,编程规范:,2)符号命名 对于常量、变量和函数等的命名要有一定的意义,能够一目了然,反映其功能、作用或数据类型。对于常量一般使用大写字母命名;对于变量一般使用简写的类型名作为前缀,反映变量意义的第一个字母大写,其他小写;对于函数名,将组成函数名的各个单词的首字母大写,其他小写。,编程规范:,3)编程风格 编程风格是在长期的程序编写过程中遵循并养成的代码编写习惯,它包含了以上注释的方法和命名的方法的使用习惯,以及语句格式的编辑风格,主要体现在缩进,对齐方式和空格的使用。,C51开发技巧,使用一些技巧是C51编译器能够从C源程序中产生高度优化的代码,提高单片机的运行效率。,1)使用短变量 对于51单片机来说,大部分数据的处理都是以字节
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江杭州市东润外国语学校区内交流教师招募和非编教师招聘备考题库附答案详解(b卷)
- 2026贵州遵义仁怀市中心血站就业见习人员招聘1人备考题库附答案详解(巩固)
- 2026安徽交控集团所属交控信息公司第一批社会招聘5人备考题库及答案详解(考点梳理)
- 2026广西工商职业技术学院选调6人备考题库附答案详解(黄金题型)
- 2026福建泉州石狮市华侨中学秋季招聘合同制教师备考题库(二)附答案详解ab卷
- 2026北京市怀柔区卫生健康委员会所属事业单位第二批招聘医务人员17人备考题库及答案详解(真题汇编)
- 2026福建福州市道路运输事业发展中心招聘1人备考题库及答案详解(夺冠)
- 2026年福建泉州石狮市粮油与物资储备中心公开招聘工作人员备考题库附答案详解(完整版)
- 2026年咸阳高新第一学校教师招聘备考题库及答案详解1套
- 2026年淮南市福利彩票发行中心公开招聘编外工作人员1人备考题库附答案详解(能力提升)
- (高清版)DZT 0208-2020 矿产地质勘查规范 金属砂矿类
- 中医培训课件:《针灸学》
- 分子蒸馏完整版本
- 转动设备的检修课件
- 波动光学及医学应用-课件
- 不同水质与底质条件对沉水植物的生长影响差异研究的开题报告
- 一年级-民族团结教育主题班会
- 小动物常规临床检查皮肤
- 三好三维构造识图题库
- TCCUA 003-2019 金融信息科技服务外包风险管理能力成熟度评估规范
- 烟草专卖违法行为课件
评论
0/150
提交评论