您的位置 首页 汽车

C51单片机数据类型的详细界说及使用

C51单片机数据类型的具体定义及应用-关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键资亦同。在KEIL uVision2中的关键字除了有ANSI C标准的32个关键字外还根据51单片机的特点扩展了相关的关键字。其实在KEIL uVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,缺省颜色为天蓝色。

先来简略说说C言语的标识符和要害字。标识符是用来标识源程序中某个目标的姓名的,这些目标可所以句子、数据类型、函数、变量、数组等等。C言语是大小字灵敏的一种高档言语,假如咱们要界说一个定时器1,能够写做“TImer1”,假如程序中有“TIMER1”,那么这两个是彻底不同界说的标识符。标识符由字符串,数字和下划线等组成,留意的是榜首个字符有必要是字母或下划线,如“1TImer”是过错的,编译时便会有过错提示。有些编译体系专用的标识符是以下划线最初,所以一般不要以下划线最初命名标识符。标识符在命名时应当简略,含义明晰,这样有助于阅览了解程序。在C51编译器中,只支撑标识符的前32位为有用标识,一般情况下也满足用了,除非你要写天书:P。

要害字则是编程言语保存的特别标识符,它们具有固定称号和含义,在程序编写中不允许标识符与要害资亦同。在KEIL uVision2中的要害字除了有ANSI C规范的32个要害字外还依据51单片机的特色扩展了相关的要害字。其实在KEIL uVision2的文本编辑器中编写C程序,体系能够把保存字以不同色彩显现,缺省色彩为天蓝色。

先看表4-1,表中列出了KEIL uVision2 C51编译器所支撑的数据类型。在规范C言语中根本的数据类型为char,int,short,long,float和double,而在C51编译器中int和short相同,float和double相同,这儿就不列出阐明晰。下面来看看它们的具体界说:

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,如图4-1。试验顶用D1的点亮标明正在用unsigned int数值延时,用D2点亮标明正在用unsigned char数值延时。

C51单片机数据类型的具体界说及运用

图4-1 第4课试验用电路

咱们把这个项目称为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端口的一切引脚置高电平)之类的句子来操作特别功用寄存器。

*AT89C51的特别功用寄存器表请看附录二

8.sfr16 16位特别功用寄存器

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

9.sbit可录址位

sbit同位是C51中的一种扩大数据类型,运用它能够拜访芯片内部的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引脚进行读写操作了。一般这些能够直接运用体系供给的预处理文件,里边已界说好各特别功用寄存器的简略姓名,直接引证能够省去一点时刻,我自己是一向用的。当然您也能够自己写自己的界说文件,用您以为好记的姓名。

关于数据类型转化等相关操作在后面的课程或程序实例中将有所提及。咱们能够用所讲到的数据类型改写一下这课的实例程序,加深对各类型的知道。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/345488.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部