您的位置 首页 解答

51单片机C言语学习4

第四课数据类型先来简单说说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相同,这儿就不列出阐明晰。下面来看看它们的具体界说:

数据类型

长 度

值 域

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

表4-1 KEIL uVision2 C51编译器所支撑的数据类型

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数值延时。

图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引脚进行读写操作了。一般这些能够直接运用体系供给的预处理文件,里边已界说好各特别功用存放器的简略姓名,直接引证能够省去一点时刻,我自己是一向用的。当然您也能够自己写自己的界说文件,用您以为好记的姓名。

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

附 录
附录一 C51中的关键字

关键字

用 途

说 明

auto

存储品种阐明

用以阐明局部变量,缺省值为此

break

程序句子

退出最内层循环

case

程序句子

Switch句子中的挑选项

char

数据类型阐明

单字节整型数或字符型数据

const

存储类型阐明

在程序履行过程中不行更改的常量值

continue

程序句子

转向下一次循环

default

程序句子

Switch句子中的失利挑选项

do

程序句子

构成do..while循环结构

double

数据类型阐明

双精度浮点数

else

程序句子

构成if..else挑选结构

enum

数据类型阐明

枚举

extern

存储品种阐明

在其他程序模块中阐明晰的全局变量

flost

数据类型阐明

单精度浮点数

for

程序句子

构成for循环结构

goto

程序句子

构成goto搬运结构

if

程序句子

构成if..else挑选结构

int

数据类型阐明

根本整型数

long

数据类型阐明

长整型数

register

存储品种阐明

运用CPU内部存放的变量

return

程序句子

函数回来

short

数据类型阐明

短整型数

signed

数据类型阐明

有符号数,二进制数据的最高位为符号位

sizeof

运算符

核算表达式或数据类型的字节数

static

存储品种阐明

静态变量

struct

数据类型阐明

结构类型数据

swicth

程序句子

构成switch挑选结构

typedef

数据类型阐明

从头进行数据类型界说

union

数据类型阐明

联合类型数据

unsigned

数据类型阐明

无符号数数据

void

数据类型阐明

无类型数据

volatile

数据类型阐明

该变量在程序履行中可被隐含地改动

while

程序句子

构成while和do..while循环结构

附表1-1 ANSIC规范关键字

关键字

用 途

说 明

bit

位标量声明

声明一个位标量或位类型的函数

sbit

位标量声明

声明一个可位寻址变量

Sfr

特别功用存放器声明

声明一个特别功用存放器

Sfr16

特别功用存放器声明

声明一个16位的特别功用存放器

data

存储器类型阐明

直接寻址的内部数据存储器

bdata

存储器类型阐明

可位寻址的内部数据存储器

idata

存储器类型阐明

直接寻址的内部数据存储器

pdata

存储器类型阐明

分页寻址的外部数据存储器

xdata

存储器类型阐明

外部数据存储器

code

存储器类型阐明

程序存储器

interrupt

中止函数阐明

界说一个中止函数

reentrant

再入函数阐明

界说一个再入函数

using

存放器组界说

界说芯片的作业存放器

附表1-2 C51编译器的扩展关键字

附录二 AT89C51特别功用存放器列表(适用于同一架构的芯片)

符 号

地 址

注 释

*ACC

E0H

累加器

*B

F0H

乘法存放器

*PSW

D0H

程序状态字

SP

81H

仓库指针

DPL

82H

数据存储器指针低8位

DPH

83H

数据存储器指针高8位

*IE

A8H

中止答应操控器

*IP

D8H

中止优先操控器

*P0

80H

端口0

*P1

90H

端口1

*P2

A0H

端口2

*P3

B0H

端口3

PCON

87H

电源操控及波特率挑选

*SCON

98H

串行口操控器

SBUF

99H

串行数据缓冲器

*TCON

88H

定时器操控

TMOD

89H

定时器方法挑选

TL0

8AH

定时器0低8位

TL1

8BH

定时器1低8位

TH0

8CH

定时器0低8位

TH1

8DH

定时器1高8位

带*号的特别功用存放器都是能够位寻址的存放器

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部