编程语言保留特殊标识符和关键字是什么?单片机程序结构

在最小系统的介绍中,我们已经大致了解了单片机的程序结构,下面我们来系统介绍一下。利用它可以访问51单片机内部的所有特殊功能寄存器。到这里,你应该对单片机编程有了一个基本的概念,其实单片机C程序跟PC机上面没有什么大的区别,只要弄清楚单片机特有的寄存器功能,编写单片机程序将是一件很轻松的事情。

首先简单说一下C语言中的标识符和关键字。 标识符用于标识源程序中对象的名称。 这些对象可以是语句、数据类型、函数、变量、数组等。C语言是一种对字敏感的高级语言。 如果我们想定义一个定时器1,我们可以将其写为“Timer1”。 如果程序中存在“TIMER1”,那么这两个是完全不同的标识符。 标识符由字符串、数字和下划线组成。 请注意,第一个字符必须是字母或下划线。 如果“1Timer”不正确,编译时会出现错误信息。 一些编译系统特定的标识符以下划线开头,因此通常不要命名以下划线开头的标识符。 标识符应命名简单、含义明确,有利于程序的阅读和理解。 在 C51 编译器中,仅支持标识符的前 32 位作为有效标识符,这通常就足够了。

关键字是编程语言保留的特殊标识符。 它们有固定的名称和含义。 编程中标识符不允许与关键字相同。 KEIL uVision2中的关键字除了ANSI C标准的32个关键字外,还根据51单片机的特点扩展了相关关键字(如for、if、while等标准关键字以及sbit、code、interrupt和其他扩展的),具体列表可以网上查到)。 事实上,当你在KEIL uVision2的文本编辑器中编写C程序时,系统可以用不同的颜色显示保留字。 默认颜色为天蓝色。

在标准C语言中,基本数据类型有char、int、short、long、float和double。 在C51编译器中,int与short相同,float与double相同。 此处未列出说明。

1.char字符类型

char类型的长度为一个字节,通常用于定义处理字符数据的变量或常量。 分为无符号字符类型unsigned char和有符号字符类型signed char。 默认值为有符号字符类型。 unsigned char类型使用字节中的所有位来表示一个值,可以表示的值范围是0到255。signed char类型使用字节中的最高字节来表示数据的符号。 “0”代表正数,“1”代表负数,负数用补码表示。 可表示的数值范围为-128~+127。 unsigned char 通常用于处理 ASCII 字符或处理小于或等于 255 的整数。

*正数的补码与原码相同。 负二进制数的补码等于其绝对值,按位取反后加1。

2.int整数类型

int整数长度为两个字节,用于存储双字节数据。 分为有符号整型(signed int)和无符号整型(unsigned int)。 默认值为signed int 类型。 signed int 表示的数值范围是-32768~+32767。 字节中的最高位表示数据的符号。 “0”代表正数,“1”代表负数。 unsigned int 表示的数值范围是0~65535。

3. 长整型

long的长度为四个字节,用于存储一个四字节的数据。 分为signed long型signed long和unsigned long型unsigned long。 默认值为有符号长类型。 signed int 表示的数值范围为-2147483648~+2147483647。 字节中的最高位表示数据的符号。 “0”代表正数,“1”代表负数。 unsigned long 表示的数值范围是0~4294967295。

4. float 浮点类型

float浮点类型有7位十进制有效数字,是符合IEEE-754标准的单精度浮点数据,占用4个字节。 由于浮点数的结构比较复杂,我们稍后再详细讨论。

5. * 指针类型

指针类型本身就是一个变量,这个变量存储的地址指向另一个数据。 这个指针变量占用一定的内存单元,对于不同的处理器其长度是不同的。 在C51中,其长度一般为1~3个字节。 指针变量也是有类型的,后面会具体讨论。

6. 位位标量

位标量是 C51 编译器的扩展数据类型。 它可以用来定义位标量,但不能定义位指针或位数组。 它的值是一个二进制位,要么是0,要么是1,类似于一些高级语言中布尔类型中的True和False。

7.sfr特殊功能寄存器

sfr 也是一种扩展数据类型。 它使用一个存储单元,取值范围为0~255。 它可以用来访问51单片机内部的所有特殊功能寄存器。 例如,使用语句 sfr P1 = 0x90 将 P1 定义为 P1 端口的片内寄存器。 下面的语句中,我们可以使用P1=255(将P1口所有引脚设置为高电平)等语句来进行操作。 特殊功能寄存器。

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引脚。 通常这些可以直接使用系统提供的预处理文件(如reg51.h、AT89X51.h),这些文件中已经定义了各个特殊功能寄存器的简单名称。 直接参考可以节省一点时间。 当然,你也可以自己写。 定义文件,使用您认为容易记住的名称。

以上就是Keil 51中常用的数据类型,我们看一个跑马灯程序,可以更深入地了解C51的程序结构。

相应的硬件电路图如下:

编程语言保留特殊标识符和关键字是什么?单片机程序结构

程序中的花样数据可以自己定义,所以我们的LED只有在AT89C51的P1引脚为低电平时才会点亮,所以我们需要向P1口的各个引脚写入数据0,对应连接的LED就会亮起将被点亮。 P1口的8个引脚正好对应P1口特殊寄存器的8个二进制位。 例如,如果将数据0xFE设置到P1端口,则转换为二进制为11111110。最低位D0为0。这里是P1.0引脚输出低电平,LED1点亮。 以此类推,大家不难计算出自己想要达到的效果。 编译并编程,你就会看到效果。 您可以根据需要通过调整delay a的值来调整显示速度,只要不超出该变量类型的取值范围即可。 如果你还没有开发板,或者你自己连最小的系统板都没有焊接过,那也没关系。 还记得Keil的I/O口模拟功能吗? 看看这里就知道该怎么做。

回到程序,第一句中的#include和C语言中的引用是一样的。 该头文件中包含了程序中未声明的变量P1,因此可以直接使用P1,不会出错。 接下来程序直接跳转到主函数执行,do-while循环保证单片机继续循环工作。

我们换一种方式来写程序,加深对寄存器的理解。

至此,您应该对单片机编程有了一个基本的概念。 事实上,MCU C 程序和 PC 程序没有太大区别。 只要了解了单片机特有的寄存器功能,编写单片机程序将是一件非常容易的事。

单片机

单片机开发的重要性,为什么单片机需要编程,并探讨

2024-4-30 23:02:34

单片机

(蒙古记忆)——中国南部地区的美食之源

2024-5-1 0:05:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索