第5章单片机C51程序设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
3.关键字 • 关键字是C51已定义的具有固定名称和特定含义的特殊标 识符,又称保留字。标准C语言中规定的关键字有32个。 • C51编译器除了支持ANSI C标准的关键字外,还扩展了适 应51内核单片机要求的关键字。 • C51扩展关键字如下:
bdata data idata pdata xdata code bit sbit sfr
都通过C语言来设计程序。
5
5.1.2 C51程序结构
• C51源程序由一个或者多个源文件组成,每个源文件扩展 名都命名为“*.c” 。
• 每个C51程序都由一个或多个函数组成,其中有且只有一
个main()函数。程序从main()函数开始执行,在 main()函数中可以调用库函数和用户定义的函数。
C51中还有中断函数,运行每一个函数都执行一个特定的
阶码E:共8位,是以2为底的指数再加上127,这样可以避免 出现负的阶码值。如,实际阶码-126用1表示,实际阶码0用 127表示,即实际阶码数加上127得到阶码的值。阶码E的正常 取值范围是1~254,而对应的指数实际取值范围为-126~+127。
尾数:M为其小数部分,共23位,其整数部分隐含为“1”。
实际应用中,汇编语言常与C语言配合使用。 使用C语言来进行51内核单片机的程序设计,即C51程序 设计 。
3
5.1.1 C51语言特点
• 用C51编程需要根据单片机存储器结构及内部资源,定义
相应的数据类型和变量,按照C51所包含的数据类型、变
量存储模式、输入/输出处理、函数等方面的格式来编写C 语言应用程序。
sfr16 _at_ reentrant interrupt using volatile
9
5.2 C51的数据类型及其在51单片机中的 存储方式
5.2.1 C51的数据类型
数据类型是指数据的存储格式。无论哪种数据都存放在存储 单元中,每一个数据究竟要占用几个单元,在编译时都要提
供给编译系统。
可。而在C51中访问这些存储器时,是通过定义不同存储类型 的变量,以说明该变量的存储器位置。
19
C51编译器支持的存储器类型如下表所示: 存储器 类型
与硬件存储器空间的对应关系 直接寻址的片内RAM 低128B,访问速度最快
片内RAM可位寻址区(20H-2FH),允许字节和位 混合访问 用Ri间接寻址的片内RAM全部地址空间(256B)
• 其它的语法规定、程序结构及程序设计方法,都与ANSI
C相同。 • 用C51语言编写的应用程序必须经单片机的C语言编译器, 转换生成单片机可执行的代码程序。本章是针对德国 KEIL公司的C51编译器介绍C51程序设计。
4
C51与汇编语言相比,有如下优点:
• C51语言程序具有规范的结构,可由不同的函数组成,用 这种方式编写的程序很容易被移植;
18
5.2.2 数据的存储器类型
C51应用程序中使用的任何数据必须以一定的存储器类型 定位于单片机的相应存储区域中。 51内核单片机中程序存储器与数据存储器严格分开。数据 存储器又分为片内、片外两个独立的寻址空间,特殊功能寄存 器与片内RAM统一编址。
使用汇编指令访问这些存储器时,通常使用不同的指令即
用const 语句定义常量,例如:
const unsigned char xx=0x98;//定义xx为无符号char型常 量0x98
21
表5-5常用的转义字符
转义字符 \0 \n \r \t \b \f 含 义 空字符 换行符 回车符 水平制表 退格符 换页符 ASCII码 0x00 0x0a 0x0d 0x09 0x08 0x0c
• 运算符和关键字用接近于自然语言的方式表示,改善了程
序的可读性; • 提供了包含很多数学函数及其他大量标准子程序的函数库, 具有较强的数据处理能力,开发效率高; • C语言程序基本上不作修改或者进行简单的修改,就可方
便地移植到其他类型的单片机上;
• 总之,用C语言进行单片机程序设计是单片机开发和应用 的必然趋势,在进行大型、复杂的单片机应用系统开发时
地址 …….
例如,长整型变量的值为0x12345678 时,在内存中的存放形式如右图所示。
+3 0x78 +2 0x56
+1 0x34 0 0x12
13
4、浮点型float
长度为4个字节。
用浮点型变量进行任何数学运算都需要使用由编译器决定的 各种不同效率等级的库函数。
Keil C51的浮点型变量数据类型是IEEE-754标准的单精度 浮点型数据,转换成十进制数后最多具有7位有效数字。 4个字节中包含指数和尾数两部分,尾数的最高位始终为1, 因而不保存。具体分布为:1位符号位,8位阶码位,23位尾数, 如下图所示。
任务来实现整个程序的功能。 • C51源程序中含有预处理命令、语句、说明等,说明和语 句以分号(;)结尾,预处理命令后不加分号。 • 程序中可以用“/*…注释…..*/”或“//…注释…”的形式对C 程序中的任何部分进行注释,用于说明程序段的功能,增 加程序的可读性。
6
C51程序的结构一般如下: #include<STC12C5A.h> int fun1(形参); //函数声明 char fun2(形参); unsigned char x,y,z; //定义全局变量 …… void main( ) //主函数定义 { 主函数体…… } int fun1(形参)//功能函数定义 { 函数体…… } char fun2(形参)//功能函数定义 { 函数体…… }
长整型
浮点型 位类型
特殊位类型 8位特殊功能寄存器型
16位特殊功能寄存器型
sbit sfr
sfr16
1位 8位
16位
0或1 0-255
0-65535
11
1、字符型char
长度为1个字节。默认为signed char。 “1”表示负数,补码表示,所能表示的数值范围是-128~+127。 对于unsigned char,其取值范围为0~255。也可以存放西文 字符,在计算机内部用ASCII码存放。
C51的数据类型与标准C语言的数据类型基本相同,但其中 char型与short型相同,float型与double型相同。
C51中还有专门针对51内核单片机的特殊功能寄存器型和位
类型。
10
C51具体支持的基本数据类型及其长度、值域如表所示:
变量名称 字符型 整数型 符号 有符号 类型 signed char 数据长度 8位 值域 -128-+127
7
5.1.3 C51的字符集、标识符与关键字
1.C51的字符集 C51语言的字符集由大小写英文字母、数字、下划线和 空格等特殊字符构成。 2.C51标识符 • 标识符在源程序中用来标识某个对象的名字,由程序员定 义,用做变量名、函数名和类型名等。 • 标识符可以由字母、数字和下划线组成,但必须由字母或 者下划线开头。 • 标识符的定义不能与关键字及系统预先定义的标准标识符 (如标准函数)同名,最好“见名知意”。 • C51程序中标识符区分字母的大小写。
一个浮点数的取值范围:
1
S
2
E 127
1.M
15
例如:浮点数12Baidu Nhomakorabea.25
• • 其二进制数01111011.01B=1.11101101×2+110; 8位阶码E为6+127=133=10000101B;


23位尾数值为11101101000000000000000B;
32位浮点数表示形式为: 0100 0010 1111 0110 10000000 00000000B;
字节地址
0
1
2
3
浮点数内容 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM 符号和阶码 尾数高位 尾数低位
14
字节地址
0
1
2
3
浮点数内容 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM 符号和阶码 尾数高位 符号位S:1表示负数,0表示正数。 尾数低位
data
bdata
idata
pdata xdata code
用Ri间接访问的片内扩展RAM或片外扩展RAM低 256B
用DPTR间接访问的片内扩展RAM或片外扩展RAM (64KB) 程序存储器ROM空间(64KB)
20
5.2.3 常量和变量
数据有常量和变量之分。
1.常量
常量就是在程序运行过程中其值不能被改变的量,可以为 字符,字符串,转义字符,十进制数或十六进制数(用0x打头 表示)、浮点数等直接常量,也可以定义符号型常量,定义方 式如下: 用宏定义语句定义常量,例如: #define PI 3.1415926 //定义PI为常量3.1415926
对于signed char,其字节的最高位为符号位,“0”表示正数,
2、整型int
长度为2个字节,默认为signed int。 对于signed int,用于存放2字节带符号数,补码表示,数的 范畴为-32768~+32767。 对于unsigned int,用于存放2字节无符号数,数的范围为 0~65535。 12
无符号
有符号 无符号 有符号 无符号 有符号
unsigned char
signed int unsigned int signed long unsigned long float bit
8位
16位 16位 32位 32位 32位 1位
0-255
-32768-+32767 0-65535 -231-231-1 0-232-1 ±1.175494E-38- ±3. 402823E+38 0 或1
17
6.特殊功能寄存器型
也是C51中扩充的数据类型,用于访问51内核单片机中的特 殊功能寄存器中的数据 ;
包括sfr和sfr16两种类型;
sfr为字节型特殊功能寄存器类型,占用1字节单元,利用它 可以访问51内核单片机中所有的特殊功能寄存器;
sfr16为双字节型特殊功能寄存器类型,占用2字节单元,利 用它可以访问单片机中2字节的特殊功能寄存器。
第五章 单片机C51程序设计
5.1、C51程序设计基础
5.2、C51的数据类型及其在51单片机中的存储方式 5.3、硬件资源访问
5.4、C51的运算符
5.5、C51的指针
5.6、C51 的函数
5.7、C51的流程控制 5.8、C51编程实例
2
5.1 C51程序设计基础
• 汇编语言程序可以高效率利用计算机资源,目标程序 占用内存少,执行速度快,适合于自动测控系统反应快速、 结构紧凑的要求。 • C语言程序容易掌握,通用性好,但编译程序系统开销 大,目标程序占用内存多,且执行时间比较长,多用于科 学计算、工业设计、企业管理。
\’ \” \\
单引号 双引号 反斜杠
0x27 0x22 0x5c
22
2.变量
• 在程序运行过程中其数值可以改变的量叫变量; • 变量由变量名和变量值构成;
• 变量名是存储单元地址的符号表示;
• 变量的值是该地址单元存放的内容; • 一个变量一旦被定义,编译系统就会自动为它安排存储单 元; • 要在程序中使用变量必须先用标识符作为变量名,并指出 所用的数据类型和存储器类型,这样编译系统才能为变量 分配相应的存储空间。 • 变量的定义格式如下: • [存储种类] 数据类型 [存储器类型] 变量名表;
3、长整型long
长度为4个字节,默认为signed long; 对于signed long,用于存放4字节带符号数,补码表示,数的
范畴为-2147483648~+2147483647。
对于unsigned long,用于存放4字节无符号数,数的范围为 0~4294967295。 长整型数据与整型数据的存储结构都是高位字节数存 放在低地址单元中,低位字节数存放在高地址单元中。
在内存中的存放格式如下表所示: 字节地址 浮点数内容 0 01000010 1 1111 0110 2 10000000 3 00000000
16
5.位类型
位类型是C51中扩充的数据类型,用于访问51内核单片机中 的可位寻址单元;
包括bit型和sbit型,它们在内存中只占1个二进制位,其值可 以为“0”或者“1”。利用它们可以定义一个位变量,但不能 定义位指针,也不能定义位数组。 两种位类型变量的区别在于,用bit定义的位变量,其地址由 C51编译器编译时予以安排,而用sbit定义位变量时必须同时 定义其位地址,在C51编译器编译时,其位地址不可变化。
相关文档
最新文档