深圳易讯联实业有限公司
深耕单片机MCU开发多年, 經驗豐富, 完善SMT产能与元器件供应链
免费咨询热线: 13226850529

易讯联告诉您 - 单片机开发C51数据类型

发表时间:2020-10-23 23:34作者:C.C

每写一个程序,总离不开数据的应用,在学习 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 数值延时。


图 3-1    第 3 课实验用电路 把这个项目称为 TwoLED,实验程序如下:

#include   <AT89X51.h>   //预处理命令

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 引脚进行读写操作了。通常这些能 直接使用系统供给的预处理文件,里面已定义好各特殊功能寄存器的简单名字,直接引 用能省去一点时间,我自己是一直用的。当然您也能自己写自己的定义文件,用您 认为好记的名字。



分享到:
联系我们
CONTACT US

电话热线1: 132 268 505 29 (陳先生)
电话热线2: 173 887 339 81(陳先生) 电话热线3: 134 232 564 40 (徐经理) 网址: www.ees0755.com Email: rfq@ees0755.com QQ: 38012709 深圳总部地址: 深圳市福田区泰然四路泰然工业区204栋东座二楼201 Shenzhen HQ:  Offcie 201, Building 204 Eastern block, Tairan industrial zone, Futian, Shenzhen, Canton Province, China.
东莞研发中心地址: 东莞市沁园路松山湖科技园区6栋 Dongguan R&D center: Songshanhu technology park, building 6, Qinyuan Road, Songshanhu district, Dongguan City. 深圳工厂地址: 深圳市宝安区圣轩工业园 Shenzhen factory: buidilding 1, shengxuan industrial park of baoan district of Shenzhen 东莞工厂地址: 东莞市厚街三屯工业区西区 2栋 Dongguan factory: building 2, santun industrial park, Dongguan city.
扫描二维码关注我们
欢迎咨询
 
 
 工作时间
周一至周五 :8:30-17:30
周六至周日 :10:00-4:00
 联系方式
技術支持陈先生:13226850529
架構工程師陈先生:17388733981
客服热线(量產項目)尹小姐:15913703967
邮箱:rfq@ees0755.com
深圳总部地址::深圳市福田区泰然四路泰然工业区204栋东座二楼201
东莞研发中心地址::东莞市沁园路松山湖科技园区6栋
深圳工厂地址::深圳市宝安区圣轩工业园1栋
东莞工厂地址::东莞市厚街三屯工业区西区 2栋