当前位置:
文档之家› 51单片机原理与实践 C语言版 高卫东 第三章 C51程序设计基础
51单片机原理与实践 C语言版 高卫东 第三章 C51程序设计基础
3.1 C51特点
3.1.1 C51与标准C的差别
(1)C51中定义的库函数和标准C语言定义的库函数不同。标准 的C语言定义的库函数是按通用微型计算机来定义的,而C51中的 库函数是按MCS-51单片机相应情况来定义的;
(2)C51中的数据类型与标准C的数据类型也有一定的区别,在 C51中还增加了几种针对MCS-51单片机特有的数据类型;
3.1.1 C51语言概述
随着单片机硬件性能的不断提高和应 用技术的不断发展,开发者越来越注重 目标系统的开发成效,而开发成效在很 大程度上取决于程序本身的编写效率。 为了适应这种要求,出现了单片机高级 语言—C语言。
3.1 C51特点
3.1.1 C51语言概述
使用C语言进行51单片机编程是单片机系统开发的发展方 向,C语言是通用计算机程序设计语言,但现在也广泛用于单片 机开发,C语言与汇编语言相比具有使用容易、可移植性好、可 以直接操作硬件的特点,特别是在单片机上采用操作系统,则必 须采用C语言编程。
(3)long 长整型
长整型长度为四个字节,用于存放一个四字节数据。分有符号 long长整型signed long和无符号长整型unsigned long,默认 值为signed long类型。signed int表示的数值范围是- 2147483648~+2147483647,字节中最高位表示数据的符号, "0"表示正数,"1"表示负数。unsigned long表示的数值范围
③ 静态变量(static)——静态局部变量/静态全局变量 ④ 寄存器变量(register)——以寄存器为存储空间的变量
* 若省略存储种类选项,则变量默认为自动变量
3.2.1 C51的数据类型
【存储种类】 数据类型 【存储类型】 变量名
char 字符
int 整型
long 长整型
浮点 指针 位标量 特殊寄存器 16位特殊 可寻址位
3.2.2 存储类型及存储区
【存储种类】 数据类型 【存储类型】 变量名 51系列单片机有三个逻辑存储空间: 片内数据存储器,片外数据存储器和程序存储器。
FFH 8052
80 H
3.2.2 存储类型及存储区
【存储种类】 数据类型 【存储类型】 变量名
存储器类型
存储区域
大小
描述
code data idata bdata xdata pdata
单片机与接口技术
任课教师:郑旭丹
第三章 C51程序设计基础
主要内容
3.1 C语言与MCS-51单片机 3.2 C51的数据类型和存储模式 3.3 C51对单片机内部资源的控制
3.4 C51的基本运算和控制语句 3.5 C51的构造数据类型 3.6 C51函数 3.7 C51的其他问题
3.1 C51特点
3.2.2 存储类型及存储区
【存储种类】 数据类型 【存储类型】 变量名
FFH 8052
256B
80H
idata区 data区
xdata区
bdata区 256B 256B 256B
每一个256字 节都是pdata区
code 区
3.2.3 存储模式
【存储种类】 数据类型 【存储类型】 变量名 ❖ 如果在变量声明时未声明变量的存储器类型,则该变量的存
3.3 C16位特殊功能寄存器
8051芯片可以将两个8位SFR作为一个16位寄存器来 访问。条件是这两个SFR必须处在相邻地址上,并 且是低字节在高字节地址的前面。
C51提供了sfr16数据类型来进行16位特殊功能寄存 器的声明,声明时低字节地址被用来作为sfr16的 地址。
3.2.1 C51的数据类型
(4)float 浮点型
浮点型符合IEEE-754标准的单精度浮点型数据,占用四个 字节(32位二进制数)。
(5)指针型
指针型本身就是一个变量,在这个变量中存放指向另一个数据 的地址。这个指针变量要占据一定的内存单元,对不同的处理器 长度也不尽相同,在C51中它的长度一般为1~3个字节。指针变 量也具有类型。
同样我们可以用P1.1的地址去写,如sbit P1_1 = 0x91;
这样在以后的程序语句中就可以用P1_1来对P1口的引脚1进行 读写操作了。
以上所述的数据类型中,只有bit与unsigned char两种数据 类型可以直接转换成机器指令。在编写C51程序时,应尽可能使 用无符号字符变量,以及位变量。
值 域
0~255 -128~+127 0~65535 -32768~+32767 0~4294967295 -2147483648~+2147483647 ±1.175494E-38~±3.402823E+38 对象的地址 0或1 0~255 0~65535 0或1
说明
默认 默认 默认
3.2.1 C51的数据类型
3.2.1 C51的数据类型
(8)sbit 可寻址位
sbit是C51中的一种扩充数据类型,利用它可以访问芯片内部
的RAM中的可寻址位或特殊功能寄存器中的可寻址位。
例如,sfr P0 = 0x80;
//因P0端口的寄存器是可位寻
址的,所以我们可以定义
sbit P0_1 = P0^1; //P0_1为P0口中的P0.1引脚
3.2.1 C51的数据类型
变量的定义格式
【存储种类】 数据类型 【存储类型】 变量名
存储空间(C51特有) 数据格式(C51扩充) 作用范围(标准C) * 方括号项——可以缺省
3.2.1 C51的数据类型
【存储种类】 数据类型 【存储类型】 变量名
变量名可以由字母、数字和下划线三种字符组成,且第一个 字符必须为字母或下划线,变量名长度随编译系统而定。 变量名具有字母大小写的敏感性,如SUM和sum代表不同 的变量。 强调:头文件中定义的变量都是大写的
程序存储区 直接寻址的内部数据存
储区 间接寻址的内部数据区 位寻址的内部数据存储
区
外部数据存储或
分页的外部数据存储区
64KB 128B 256B 16B 64KB 256B
用来说明常量
访问速度快
可访问整个内部数据区域
可使用位寻址或字节寻址来访问 这一区域
使用DPTR来访问外部数据存储 器
利用R0,R1来访问分页的外部数 据存储器
3.2.1 C51的数据类型
(6)bit 位变量
位标量是C51编译器的一种扩充数据类型,利用它可定义一 个位标量,但不能定义位指针,也不能定义位数组。它的值是 一个二进制位,不是0就是1,类似一些高级语言中的Boolean 类型中的True和False。与51单片机有关的位操作必须定位在片 内RAM中的位寻址空间。 (7)sfr 特殊功能寄存器
3.4 C51的基本运算和控制语句 3.5 C51的构造数据类型 3.6 C51函数 3.7 C51的其他问题
3.3 C51对51单片机内部资源的控制
1、 sfr:定义8位特殊功能寄存器
sfr可以用来定义8051单片机的8位特殊功能寄存器。 sfr占用一个字节内存单元,取值范围是0 ~ 255。
sfr定义特殊功能寄存器SFR,语法规则如下: sfr 或 sfr16 sfr_name = 字节地址常数;
主要内容
3.1 C语言与MCS-51单片机 3.2 C51的数据类型和存储模式 3.3 C51对单片机内部资源的控制
3.4 C51的基本运算和控制语句 3.5 C51的构造数据类型 3.6 C51函数 3.7 C51的其他问题
3.2.1 C51的数据类型
c语言中数据有常量和变量之分。 在程序运行过程中,数值不改变的量称为常量。 包括:整型常量、字符型常量、字符串型常量、符
3.2.1 C51的数据类型
【存储种类】 数据类型 【存储类型】 变量名
① 自动变量(auto)——在函数内部定义的变量,退出函数 后,分配给该变量的存储单元即自行消失(局部变量)。 ② 外部变量(extern)——在函数外部定义的变量,可始 终保持变量的数值(全局变量)。 【强调】一个外部变量只能被定义一次,在定义文件之外 的地方使用时需用extern进行声明。
(1)char字符 型
char类型的长度是一个字节,通常用于定义处理字符数据的 变量或常量。分无符号字符类型unsigned char和有符号字符 类型signed char,默认值为signed char类型。
signed char类型用字节中最高位字节表示数据的符号,"0" 表示正数,"1"表示负数,负数用补码表示。所能表示的数值范 围是-128~+127。unsigned char常用于处理ASCII字符或 用于处理小于或等于255的整型数。
特殊功能寄存器也是一种扩充数据类型,占用一个内存单元,值 域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存 器。
例如sfr P1= 0x90这一语句定义P1标识符代表单片机P1端口在 片内的寄存器(地址0x90),在后面的语句中可以用P1= 255(对 P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。
数据类型 unsigned char signed char unsigned int signed int unsigned long signed long float
*
bit sfr sfr16 sbit
长度
单字节 单字节 双字节 双字节 四字节 四字节 四字节 1~3字节 位 单字节 双字节 位
号常量。
符号常量的定义: #difine False 0x0; //用预定义语句可以定义常量 #difine TRUE 0x1; //这里定义TRUE为1, False为0
3.2.1 C51的数据类型