单片机c语言教程第三章--C51数据类型

发布者:创意驿站最新更新时间:2023-05-25 来源: elecfans关键字:单片机  c语言  C51  数据类型 手机看文章 扫描二维码
随时随地手机看文章

每写一个程序,总离不开数据的应用,在学习 c51 语言的过程中掌握理解数据类型也是 很关键的。先看表 3-1,表中列出了 KEIL uVision2 单片机c语言编译器所支持的数据类型。在标准C语言中基本的数据类型为 char,int,short,long,float 和 double,而在c51编译器中int 和 short 相同,float 和 double 相同,这里就不列出说明了。下面来看看它们的具体定 义


数据类型


长 度

值 域

unsigned char

单字节

0~255

signed char

单字节

-128~+127

unsigned int

双字节

0~65535

signed int

双字节

-32768~+32767

unsigned long

四字节

0~4294967295

signed long

四字节

-2147483648~+2147483647

float

四字节

±1.175494E-38~±3.402823E+38

*

1~3 字节

对象的地址

bit

0 或 1

sfr

单字节

0~255

sfr16

双字节

0~65535

sbit

0 或 1

表 3-1 KEIL uVision2 单片机c语言编译器所支持的数据类型

1. char 字符类型

char 类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。分无符号字 符类型 unsigned char 和有符号字符类型 signed char,默认值为 signed char 类型。 unsigned char 类型用字节中所有的位来表示数值,所能表达的数值范围是 0~255。 signed char 类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数, 负数用补码表示。所能表示的数值范围是-128~+127。unsigned char 常用于处理 ASCII 字符或用于处理小于或等于 255 的整型数。

*正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加 1。


2. int 整型

int 整型长度为两个字节,用于存放一个双字节数据。分有符号 int 整型数 signed int 和无符号整型数 unsigned int,默认值为 signed int 类型。signed int 表示的数值范 围是-32768~+32767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。 unsigned int 表示的数值范围是 0~65535。


先停一下来写个小程序看看 unsigned char 和 unsigned int 用于延时的不一样效果,说 明它们的长度是不一样的,学习它们的使用方法。依旧用上一篇的最小化系统做实验,不过要加多 一个电阻和 LED,如图 3-1。实验中用 D1 的点亮表明正在用 unsigned int 数值延时,用D2 点亮表明正在用 unsigned char 数值延时。

把这个项目称为 TwoLED,实验程序如下:

#include //预处理命令

void main(void) //主函数名

{

unsigned int a; //定义变量 a 为 unsigned int 类型

unsigned char b; //定义变量 b 为 unsigned char 类型

do

{ //do while 组成循环

for (a=0; a<65535; a++)

P1_0 = 0; //65535 次设 P1.0 口为低电平,点亮 LED P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED

for (a=0; a<30000; a++); //空循环

for (b=0; b<255; b++)

P1_1 = 0; //255 次设 P1.1 口为低电平,点亮 LED P1_1 = 1; //设 P1.1 口为高电平,熄灭 LED


for (a=0; a<30000; a++); //空循环

}

while(1);

}

同样编译烧写,上电运行您就能看到结果了。很明显 D1 点亮的时间长于 D2 点亮的时间。

这里必须要讲的是,当定义一个变量为特定的数据类型时,在程序使用该变量不应使它的值 超过数据类型的值域。如本例中的变量 b 不能赋超出 0~255 的值,如 for (b=0; b<255; b++) 改为 for (b=0; b<256; b++),编译是能通过的,但运行时就会有问题出现,就是说 b 的 值永远都是小于 256 的,所以无法跳出循环执行下一句 P1_1 = 1,从而造成死循环。同理 a 的值不应超出 0~65535。

3. long 长整型

long 长整型长度为四个字节,用于存放一个四字节数据。分有符号 long 长整型 signed long 和无符号长整型 unsigned long,默认值为 signed long 类型。signed int 表示 的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号,“0”表示正 数,“1”表示负数。unsigned long 表示的数值范围是 0~4294967295。

4. float 浮点型

float 浮点型在十进制中具有 7 位有效数字,是符合 IEEE-754 标准的单精度浮点型数 据,占用四个字节。因浮点数的结构较复杂在以后的章节中再做详细的讨论。

5.* 指针型 指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量 要占据一定的内存单元,对不一样的处理器长度也不尽相同,在 c51 中它的长度一般为 1~

3 个字节。指针变量也具有类型,在以后的课程中有专门一课做探讨,这里就不多说了。

6. bit 位标量

bit 位标量是 c51 编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义 位指针,也不能定义位数组。它的值是一个二进制位,不是 0 就是 1,类似一些高级语 言中的 Boolean 类型中的 True 和 False。

7. sfr 特殊功能寄存器

sfr 也是一种扩充数据类型,点用一个内存单元,值域为 0~255。利用它能访问 51 单片机内部的所有特殊功能寄存器。如用 sfr P1 = 0x90 这一句定 P1 为 P1 端口在片内 的寄存器,在后面的语句中用以用 P1 = 255(对 P1 端口的所有引脚置高电平)之类的 语句来操作特殊功能寄存器。

8.sfr16 16 位特殊功能寄存器

sfr16 占用两个内存单元,值域为 0~65535。sfr16 和 sfr 一样用于操作特殊功能寄存 器,所不一样的是它用于操作占两个字节的寄存器,如定时器 T0 和 T1。

9. sbit 可录址位

sbit 同样是 单片机c语言 中的一种扩充数据类型,利用它能访问芯片内部的 RAM 中的可寻址


位或特殊功能寄存器中的可寻址位。如先前定义了

sfr P1 = 0x90; //因 P1 端口的寄存器是可位寻址的,所以能定义

sbit P1_1 = P1^1; //P1_1 为 P1 中的 P1.1 引脚

//同样我们能用 P1.1 的地址去写,如 sbit P1_1 = 0x91; 这样在以后的程序语句中就能用 P1_1 来对 P1.1 引脚进行读写操作了。通常这些能 直接使用系统供给的预处理文件,里面已定义好各特殊功能寄存器的简单名字,直接引 用能省去一点时间,我自己是一直用的。当然您也能自己写自己的定义文件,用您 认为好记的名字。


关键字:单片机  c语言  C51  数据类型 引用地址:单片机c语言教程第三章--C51数据类型

上一篇:80C51单片机的引脚排列说明
下一篇:基于89C51单片机和CAN控制器实现老旧住宅供暖计量系统的改造设计

推荐阅读最新更新时间:2024-10-30 14:06

51单片机与PC串口通信程序及硬件电路图
#include reg51.h #define BUFFERLEGTH 10 //----------------------------------------------------------------- void UART_init(); //串口初始化函数 void COM_send(void); //串口发送函数 char str ; char j; //------------------------------------------------------------------- void main(void) { unsigned char i; UART_init
[单片机]
51<font color='red'>单片机</font>与PC串口通信程序及硬件电路图
51内核8位单片机MAX7651的开发环境
摘要:介绍一种基于四时钟周期、高速8051内核的混合信号8位单片机MAX7651。探讨在开发基于MAX7651的应用系统时所面临的问题,并推荐相应的解决方案。 关键词:MAX7651 AT89LV55 8XC51RA/RB/RC ALL-07 Flash 四时钟周期 在全球8位单片机领域,英特尔(Intel)生产的MCS-51系列是毋庸质疑的领导者。借助英特尔广泛的授权行为,基于8051内核的8位单片机兼容产品早已根深叶茂。Dallas Semiconductor通过改良、优化传统的8051内核,开发出了高速、四时钟周期和单时钟周期8051内核,并在此基础上推出了一系列高速8位单片机。Maxim利用高速、四时钟周期8051内
[单片机]
Proteus软件在嵌入式系统教学中的应用研究
0 引言     嵌入式系统是一门涉及计算机体系结构、计算机软件以及其他相关电子技术的综合技术。目前,嵌入式系统技术已经成为最热门的技术之一,各类企业对具备嵌入式系统设计开发能力人才的需求量非常旺盛。在目前各高校开设的嵌入式系统课程中,普遍采用的微处理器是8位的单片机8051,32位ARM7TDMI核的飞利浦NXP LPC系列和三星S3C4480芯片。首先以单片机作为嵌入式系统设计学习的入门,掌握了基本的概念和设计方法之后,再把ARM7内核CPU作为一种“功能更强大的单片机”,无缝升级到流行的ARM平台。     传统的嵌入式系统教学,课堂环节多是纯理论教学,实践环节一般也是使用传统的实验箱,实验项目较少,内容固定,创新手
[嵌入式]
51单片机C语言编程中对单片机绝对地址访问的两种方法
在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间。 C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定。 为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用扩展关键字“at”、指针、预定义以及连接定位控制命令。 在这些方法中,本人认为最简单而有效的方法是用“ _at_ ”关键字来对指定变量存储器空间绝对地址来指定。一般格式如下: 数据类型 标识符 _at_ 地址常数 其中: (1).存储器类型: idata、data、xdata等C51能够识别的所有类型,最好不要省略。 (2).数据类型: 可以用in
[单片机]
低功耗MCU在家电中的应用分析
最近几年由于人们对环保的重视,市场上开始关注节能低碳的电子产品,对家电等电子产品的低功耗性能也提高了要求,低功耗MCU在家庭的各种电器产品上将占据重要地位。  在智能家电产品通电后,MCU就开始启动,由于MCU所消耗的电流只占整个家电产品消耗功率的很小一部分,所以通常对其工作电流大小不作要求,只要产品可以正常工作即可。一直到最近几年,由于人们日益重视环保,市场上开始关注节能低碳的电子产品,对家电及电子产品的低耗能也提高了要求,因此低功耗MCU在家庭的各种电器产品上开始占据重要地位。    低功耗MCU的需求原因   在电子产品上需要低功耗MCU的原因大部分出自环保的考虑:一方面,地球温室效应造成的问题需要大家通过节约能源来
[工业控制]
低功耗<font color='red'>MCU</font>在家电中的应用分析
一种基于单片机的无线呼叫系统设计
  随着科技的进步以及生活质量的不断提高,人们要求在消费中得到的服务更加快捷、方便、舒适;同时处于激烈竞争中的服务性企业也需要进一步吸引顾客,提高企业自身的服务档次和形象。在这样的背景下,产生了各种不同类型的呼叫系统。传统的呼叫系统多是有线的,比如采用分布控制方式的单片机系统,主机和呼叫器的应答通过一根三芯导线,包括电源线、信号线、地线来完成,各呼叫器并行挂接。这样的系统存在着布线繁琐,安装麻烦、成本高等问题,针对这些问题,无线呼叫系统逐渐发展起来,越来越多的研究者将目光投向了无线领域。   1 系统设计方案   低功耗无线呼叫系统的发送和接收模块的框图如图1,图2所示。   其中图1为无线发送模块,以STC89C52RC
[单片机]
一种基于<font color='red'>单片机</font>的无线呼叫系统设计
基于AT89c51单片机的音乐闹钟
基于51芯片用proteus仿真制作的音乐闹钟,四个按键用来设置时间,和整定闹钟时间,如果要做实物的话,记得参考源码的io口,也可修改 说明: 用的是1602lcd显示屏; 本项目是天空之城的纯音乐,如果要其他的音乐代码可以找我要,也可以网上找; 单片机源码: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit lcdrs=P3^5; //定义lcd口 sbit lcden=P3^4; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit s4=P3^3; s
[单片机]
基于AT89c51<font color='red'>单片机</font>的音乐闹钟
基于51单片机的多功能数控电流源设计
在现代科学研究和工业生产中,精度高、稳定性好的数控直流电流源得到了十分广泛的应用。以往所采用的电流源多数是利用电位器进行调节,输出电流值无法实现精准步进。有些电流源虽能够实现数控但是往往输出的电流值过小,且所设定的输出电流值是否准确不经测试无法确定,不够直观。为此,结合单片机技术及V/I变换电路,利用闭环反馈调整控制原理设计制作了一种新型的基于单片机控制的高精度数控直流电流源。 本系统以AT89S52单片机为控制器,通过人机接口(按键和LCD显示屏)来设置输出电流,设置步进等级1 mA,并可同时显示预设电流值和实际输出电流值。本系统由按键设置输出电流值,经单片机计算后通过D/A转换器(TLV5618)输出模拟信号,再经过V/
[单片机]
基于51<font color='red'>单片机</font>的多功能数控电流源设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved