打印
[疑难问答]

学习51单片机 C语言知识

[复制链接]
916|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wilhelmina2|  楼主 | 2024-8-12 09:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 编译器能够识别的基本数据类型:
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](&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 字符,也可以是不可显示的控制字符。对不可显示的控制字符须在前面加上反斜杠“\”组成转义字符。利用它可以完成一些特殊功能和输出时的格式控制。常用的转义字符如下表所示。
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](&pos_id=img-NlpmVN1L-1713677093828

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


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

1191

帖子

1

粉丝