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