数字电路与C语言基础4(C51基础知识上)

一、C语言简介:

1、C语言是在70年代初问世的。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。

二、C51数据类型:

1、C数据类型有四类:基本类型,构造类型,指针类型,空类型void

(1)基本类型:

a、数值类型:

整型——短整型short,整型int,长整型long

浮点型——单精度型float,双精度型double

b、字符类型 char

2、构造类型:

(1)数组

(2)结构体 struct

(3)共用体 union

(4)枚举类型 enum

三、C51基本数据类型:

1、

数据类型关键字所占位数表示数的范围
无符号字符型unsigned char80~255
有符号字符型char8-128~127
无符号整型unsigned int160~65535
有符号整型int16-32768~32767
无符号长整型unsigned long320~2的32次方-1
有符号长整型long32-2的31次方~2的31次方-1
单精度浮点型float323.4e-38~3.4e38
双精度浮点型double641.7e-308~1.7e308

(1)占位数:编写程序的时候,无论是十进制,十六进制,还是二进制,表示一个数,在单片机当中,所有的数据都是以二进制形式来存储的,既然是二进制数,那么只有数字1和数字0。而这两个数,每一个所占据的空间都是一位,1是一位,0也是一位。位是单片机存储系统最小的一位,比它大的单位是字节。1byte(字节)=8bite(位)。

(2)关于浮点数,这里说明一下,浮点数是带小数的,在整型中是无法储存的,即使储存,小数点后面的数也会被自动清除。所以在保存小数的时候,我们要选择浮点。具体是单精度还是双精度,还得看我们的需求。对于float类型的数据,它提供的小数有7位,也就是你的这个数据位数高于7位,那么它就会自动把它后面的位数清除掉。对于双精度,它可以提供15-16位有效数字,具体的还与编译器有关系。

a、下面定义float a,a=123.1234567。由于float只能接受7位有效数,所以567就直接被舍弃掉。如果是double就可以都保存。

(3)对于存储数据,占用的位数越多,就可以保存小的。而小的不能保存大的。

四、C51扩充数据类型:

(1)单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般呢,我们根据特殊寄存器的功能,给这些寄存器赋予各自的名称,当我们需要在程序中操作这些特殊功能的寄存器的时候,必须要在程序的最前面加上,将这些名称加以声明,声明的过程,实际就是将这个寄存器的内存中的地址编号赋给这个名称,这样编译器在以后的程序中,才可能认识这些名称所对应的寄存器。对于大多数初学者来说,这些寄存器的声明已经完全被包含到51单片机的特殊功能寄存器头文件当中。例如reg51.b。

(2)C51扩充数据类型

类型长度值域说明
bit0或1位变量申明
sbit0或1特殊功能位声明
sfr8位=1字节0~255特殊功能寄存器声明
Sfr1616位=2字节0~65535Srf的16位数据声明
*1~3字节对象的地址

a、这些扩充数据在C语言当中是没有的,我们这是51单片机内部自带的,也就是一些特殊功能寄存器关键字,声明。

b、例如:sfr SCON=0x98;sbit TI=SCON^1。

五、C51运算量:

1、常量:常量是指在程序执行过程中其值不能被改变的量。在C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。

(1)整型常量:
a、十进制:234,56,0

b、十六进制:0x12

2、变量:变量是在程序运行过程中其值可以改变的量。一个变量由两部分组成:变量名和变量值。

(1)定义变量的时候,必须通过数据类型说明符来指明变量的数据类型,数据类型有很多种,在前面看我们的,介绍数据类型的时候,有很多种。具体使用哪一种,就看我们的那个表格类型进行定义。

a、数据类型说明符除了我们前面看到的基本数据类型,也可以是组合数据类型说明符,还可以用重定义这个关键字typedef,通过这个关键字,来定义类型的别名。这个在程序的过程中,应用的特别多,在C51中,为了增加程序的可读性,我们允许用户为系统固有的数据类型说明符用typedef这个关键字起别名。

b、我们来看一下这个格式,首先是使用这个关键字typedef,然后呢这里有个C51固有的数据类型说明符,接下来对应的是这个别名。例如:typedef unsigned int u16,他的意思就是定义了一个新的类型u16。

(2) 变量名是C51用来区分不同变量,为不同变量取的名字。在C51中规定变量名是可以以字母,数字,下划线来组成。在定义变量名的时候就要记住它的规则,首先它只能由字母,数字,下划线组成,其次,第一个位置必须是字母或者下划线,像int 12b就不行。同时在命名的时候,建议使用有含义,按照它的功能来命名。防止时间一长你忘记这个变量的意思。

(3)变量名还有两种,一种是普通变量名,还有一种是指针变量名,他们的区别就是指针变量名的前面要带上一个*,在后续介绍指针我们会介绍到的,就是说在定义指针变量的时候,比如说我们在定义int a,这是一个普通的变量名,那如果我们定义一个指针变量,那么,a的前面要带上一个*,这是指针的一些相关知识。

(4)变量名我们介绍到了,接下来,我们看一下存储类型,存储种类。这个存储种类,是我们在变量程序执行当中,一个作用范围,C51变量的存储种类有四种:自动Auto,外部,静态,寄存器。

a、Auto:使用Aute定义的变量称为自动变量,其作用范围在定义它的函数体或者复合语句内部,当定义函数体或者复合语句执行时,C51才会变量分配内存空间,结束的时候,占用内存的空间就会自动释放,自动变量一般分配在内存的堆占空间当中,定义变量时,如果省略存储种类的话,那么默认就是自动的变量,所以我们刚才定义了int a,int是数据类型,但是前面没有这个存储种类,我们省略了Auto,那么这个是可以省略的, 那么一省略的话,系统就会认为我们这个变量是自动变量,所以呢,我们通常在定义变量的时候,用的比较多的是外部变量和自动变量,还有一个是静态变量。那么我们再看一下,这是我们的自动变量,自动变量它的作用范围它是定义它的函数体和复合语句内部,执行的范围也是它的一个函数体和复合语句内部来执行。

b、关于外部变量,它通常是使用extern,这个关键字来定义的变量通常定义为外部变量,在一个函数体内,要使用一个已在该函数体外或别的程序中定义过来的外部变量,那么这个变量呢,在该函数体内,要使用这个extern来进行说明,那个外部变量被定义后,分配固定的内存空间,在程序整个执行时间内都有效,直到程序结束后才释放,因为它是一个全局的变量。比如说我们有两个文件,比如说我们有一个main.c,这是一个文件,那么我们还有一个a.c,这是第二个文件。那么a.c假设里面文件定义一个int,变量tapi,那如果说我们也在main.c里面也使用这个定义的tapi,那么我们可以将这个变量定义为全局变量,也就是使用这个关键字extern,进行申明,将这个变量申明为全局变量。然后就可以在main.c中使用这个变量。这个我们在后续多文件程序来编写的时候,我们会介绍这一块的内容。

c、关于静态的这个变量,它使用的关键字是static,使用static定义这个变量成为静态变量,它又分为内部静态变量和外部静态变量,那么在函数体内部定义的静态变量为内部静态变量,那么它在在对应的函数体内有效,一直存在。但在函数体外不可见,这样不仅使变量在定义它的一个函数体外被保护,还可以实现一个函数值不被改变。这个在我们后续学习定时器中断的时候,我们这个变量会使用到static这个静态变量,使用它我们会非常方便。

d、存储器类型

存储器类型描述
date直接寻址的片内RAM低1288,访问速度快
bdata片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问
idata间接寻址访问的片内RAM,允许访问全部片内RAM
pdata

用Ri间接访问的片外RAM的低256B

xdata用DPTR间接访问的片外RAM,允许访问全部64k片外RAM
code程序存储器ROM64k空间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值