学习51单片机 C语言知识

一、数据类型

C 语言包含的数据类型如下图所示
在这里插入图片描述
C51 的数据类型分为基本数据类型和组合数据类型,情况与标准 C 中的数据类型基本相同,但其中 char 型与 short 型相同,float 型与 double 型相同,另外,C51 中还有专门针对于 51 单片机的特殊功能寄存器型和位类型。

1. C51 基本数据类型如下图所示:

在这里插入图片描述

2. *指针型

指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占用一定的内存单元,对不同的处理器其长度不一样,在 C51 中它的长度一般为 1~3 个字节。

3.特殊功能寄存器型

这是 C51 扩充的数据类型,用于访问 51 单片机中的特殊功能寄存器数据,它分 sfr 和 sfr16 两种类型。其中:
sfr 为字节型特殊功能寄存器类型,占一个内存单元,利用它可以访问 51 内部的所有特殊功能寄存器;
sfr16 为双字节型特殊功能寄存器类型,占用两个字节单元,利用它可以访问 51 内部的所有两个字节的特殊功能寄存器。
在 C51 中对特殊功能寄存器的访问必须先用 sfr 或 sfr16 进行声明。

4. 位类型

这也是 C51 中扩充的数据类型,用于访问 51 单片机中的可寻址的位单元。
在 C51 中,支持两种位类型:bit 型和 sbit 型。它们在内存中都只占一个二进制位,其值可以是“1”或“0”。其中:
用 bit 定义的位变量在 C51 编译器编译时,在不同的时候位地址是可以变化的,而用 sbit 定义的位变量必须与 51 单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在 C51编译器编译时,其对应的位地址是不可变化的。
KEIL C51 编译器能够识别的基本数据类型:
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=image-6.png&pos_id=img-rZV2GrpW-1713677093827在这里插入图片描述

在 C51 语言程序中,有可能会出现在运算中数据类型不一致的情况。
C51 允许任何标准数据类型的隐式转换,隐式转换的优先级顺序如下: Bit→char→int→long→float→signed→unsigned
也就是说,当 char 型与 int 型进行运算时,先自动对 char 型扩展为 int 型,然后与int 型进行运算,运算结果为 int 型。C51 除了支持隐式类型转换外,还可以通过强制类型转换符“()”对数据类型进行人为的强制转换。
C5l 编译器除了能支持以上这些基本数据类型之外,还能支持一些复杂的组合型数据类型,如数组类型、指针类型、结构类型、联合类型等这些复杂的数据类型。对于初学者我们要求先掌握 C 语言基础知识,把基础的掌握了在学习复杂的。

二、C51 运算量

1. 常量

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

1. 整型常量

整型常量也就是整型常数,根据其值范围在计算机中分配不同的字节数来存放。在 C51 中它可以表示成以下几种形式:
十进制整数。如 234、-56、0 等。
十六进制整数。以 0x 开头表示,如 0x12 表示十六进制数 12H。
长整数。在 C51 中当一个整数的值达到长整型的范围,则该数按长整型存放,在存储器中占四个字节,另外,如一个整数后面加一个字母 L,这个数在存储器中也按长整型存放。如 123L 在存储器中占四个字节。

2. 浮点型常量

浮点型常量也就是实型常数。有十进制表示形式和指数表示形式。十进制表示形式又称定点表示形式,由数字和小数点组成。如 0.123、34.645 等都是十进制数表示形式的浮点型常量。指数表示形式为: [] 数字 [.数字] e []数字
例如:123.456e-3、-3.123e2 等都是指数形式的浮点型常量。

3.字符型常量

字符型常量是用单引号引起的字符,如‘a’、‘1’、‘F’等。可以是可显示的 ASCII 字符,也可以是不可显示的控制字符。对不可显示的控制字符须在前面加上反斜杠“\”组成转义字符。利用它可以完成一些特殊功能和输出时的格式控制。常用的转义字符如下表所示。
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=image-7.png&pos_id=img-NlpmVN1L-1713677093828在这里插入图片描述

4.字符串型常量

字符串型常量由双引号“”括起的字符组成。如“D”、“1234”、“ABCD”等。注意字符串常量与字符常量是不一样,一个字符常量在计算机内只用一个字节存放,而一个字符串常量在内存中存放时不仅双引号内的字符一个占一个字节,而且系统会自动的在后面加一个转义字符“\o”作为字符串结束符。因此不要将字符常量和字符串常量混淆,如字符常量‘A’和字符串常量“A”是不一样的。

2.变量

变量是在程序运行过程中其值可以改变的量。一个变量由两部分组成:变量名和变量值。
在 C51 中,变量在使用前必须对变量进行定义,指出变量的数据类型和存储模式。以便编译系统为它分配相应的存储单元。定义的格式如下:
[存储种类] 数据类型说明符 [存储器类型] 变量名 1[=初值],变量名 2[初值]…;

1. 数据类型说明符

在定义变量时,必须通过数据类型说明符指明变量的数据类型,指明变量在存储器中占用的字节数。可以是基本数据类型说明符,也可以是组合数据类型说明符,还可以是用 typedef 定义的类型别名。
在 C51 中,为了增加程序的可读性,允许用户为系统固有的数据类型说明符用 typedef 起别名,格式如下:
typedef c51 固有的数据类型说明符 别名;
定义别名后,就可以用别名代替数据类型说明符对变量进行定义。别名可以用大写,也可以用小写,为了区别一般用大写字母表示。
【例】 typedef 的使用。

typedef	unsigned	int	    u8; 
typedef	unsigned	char	u16;
u8 a1=0x12;
u16 a2=0x1234;

2. 变量名

变量名是 C51 区分不同变量,为不同变量取的名称。在 C51 中规定变量名可以由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。变量名有两种:普通变量名和指针变量名。它们的区别是指针变量名前面要带“*”号。

3. 存储种类

存储种类是指变量在程序执行过程中的作用范围。C51 变量的存储种类有四种,分别是自动(auto)、外部(extern)、静态(static)和寄存器(register)。

  1. auto:
    使用 auto 定义的变量称为自动变量,其作用范围在定义它的函数体或复合语句内部,当定义它的函数体或复合语句执行时,C51 才为该变量分配内存空间,结束时占用的内存空间释放。自动变量一般分配在内存的堆栈空间中。定义变量时,如果省略存储种类,则该变量默认为自动(auto)变量。
  2. extern:
    使用 extern 定义的变量称为外部变量。在一个函数体内,要使用一个已在该函数体外或别的程序中定义过的外部变量时, 该变量在该函数体内要用extern 说明。外部变量被定义后分配固定的内存空间,在程序整个执行时间内都有效,直到程序结束才释放。
  3. static:
    使用 static 定义的变量称为静态变量。它又分为内部静态变量和外部静态变量。在函数体内部定义的静态变量为内部静态变量,它在对应的函数体内有效,一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被保护,还可以实现当离开函数时值不被改变。外部静态变量上在函数外部定义的静态变量。它在程序中一直存在,但在定义的范围之外是不可见的。如在多文件或多模块处理中,外部静态变量只在文件内部或模块内部有效。
  4. register:
    使用 register 定义的变量称为寄存器变量。它定义的变量存放在 CPU 内部的寄存器中,处理速度快,但数目少。C51 编译器编译时能自动识别程序中使用频率最高的变量,并自动将其作为寄存器变量,用户可以无需专门声明。

4. 存储器类型

存储器类型是用于指明变量所处的单片机的存储器区域情况。存储器类型与存储种类完全不同。C51 编译器能识别的存储器类型有以下几种,见表所示。
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=image-8.png&pos_id=img-5n4Yy3Tt-1713677093829在这里插入图片描述

定义变量时也可以省“存储器类型”,省时 C51 编译器将按编译模式默认存储器类型。

5. 特殊功能寄存器变量

51 系列单片机片内有许多特殊功能寄存器,通过这些特殊功能寄存器可以控制 51 系列单片机的定时器、计数器、串口、I/O 及其它功能部件,每一个特殊功能寄存器在片内 RAM 中都对应于一个字节单元或两个字节单元。
在 C51 中,允许用户对这些特殊功能寄存器进行访问,访问时须通过 sfr 或 sfr16 类型说明符进行定义,定义时须指明它们所对应的片内 RAM 单元的地址。格式如下:
sfr 或 sfr16 特殊功能寄存器名=地址;
sfr 用于对 51 单片机中单字节的特殊功能寄存器进行定义,sfr16 用于对双字节特殊功能寄存器进行定义。特殊功能寄存器名一般用大写字母表示。地址一般用直接地址形式。
【例】特殊功能寄存器的定义。

sfr PSW=0xd0;
sfr	SCON=0x98; 
sfr	TMOD=0x89; 
sfr	P1=0x90; 
sfr16		DPTR=0x82; 
sfr16		T1=0X8A

6. 位变量

在C51 中,允许用户通过位类型符定义位变量。位类型符有两个:bit 和sbit。可以定义两种位变量。

  1. bit 位类型符用于定义一般的可位处理位变量。它的格式如下: bit 位变量名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值