×
嵌入式 > 技术百科 > 详情

单片机C语言-程序结构

发布时间:2022-05-25 发布时间:
|

先来简单说说C语言的标识符和关键字。 标识符是用来标识源顺序中某个对象的名字的, C语言是大小字敏感的一种高级语言, 假设我们要定义一个定时器1, 标识符由字符串, 数字和下划线等组成, 留意的是第一个字符必须是字母或下划线, 如“1Timer”是错误的, 编译时便会有错误提示。 所以普通不要以下划线开头命名标识符。 含义明晰, 这样有助于阅读理解顺序。 在C51编译器中, 只支持标识符的前32位为有效标识, 普通情况下也足够用了。 在顺序编写中不允许标识符与关键字相同。 在KEILuVision2中的关键字除了有ANSIC标准的32个关键字外还依据51单片机的特点扩展了相关的关键字(比如for, while等标准的还有sbit, interrupt等扩展的, 详细列表可以在网上查到)。 其真实KEILuVision2的文本编辑器中编写C顺序, 零碎可以把保留字以不同颜色显示, 缺省颜色为天蓝色。 分无符号字符类型unsignedchar和有符号字符类型signedchar, 所可以表达的数值范围是0~255。 “0”表示负数, “1”表示负数, 负数用补码表示。 所能表示的数值范围是-128~+127。   ?菏牟孤胗朐胂嗤?负二进制数的补码等于它的相对值按位取反后加1。 用于寄存一个双字节数据。 signedint表示的数值范围是-32768~+32767, 字节中最高位表示数据的符号, “0”表示负数, “1”表示负数。 unsignedint表示的数值范围是0~65535。   float浮点型在十进制中具有7位有效数字, 是符合IEEE-754标准的单精度浮点型数据, 占用四个字节。 因浮点数的结构较复杂在以后再做详细的讨论。 在这个变量中寄存的指向另一个数据的地址。 对不同的处理器长度也不尽相同, 指针变量也具有类型, 在以后专门探讨。   bit位标量是C51编译器的一种扩充数据类型, 但不能定义位指针, 也不能定义位数组。 不是0就是1, 类似一些高级语言中的Boolean类型中的True和False。 值域为0~255。 应用它可以访问51单片机外部的一切特殊功能寄存器。 在后面的语句中我们用以用P1=255(对P1端口的一切引脚置高电平)之类的语句来操作特殊功能寄存器。   sfr16占用两个内存单元, sfr16和sfr一样用于操作特殊功能寄存器, 所不同的是它用于操作占两个字节的寄存器,   sbit是C51中的一种扩充数据类型, 应用它可以访问芯片外部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。 如先前我们定义了sfrP1=0x90;, 因P1端口的寄存器是可位寻址的, 所以我们可以定义sbitP1_1=P1^1;, 异样我们可以用P1. 1的地址去写, 通常这些可以直接运用零碎提供的预处理文件(如reg51. h, h), 直接援用可以省去一点时间, #####include//预处理文件外面定义了特殊寄存器的称号, 如P1口定义为P1  对应硬件电路图如下:  顺序中的把戏数据可以自以去定义, 因这里我们的LED要AT89C51的P1引脚为低电平才会点亮, 所以我们要向P1口的各引脚写数据0, P1口的八个引脚刚好对应P1口特殊寄存器的八个二进位, 如向P1口定数据0xFE, 最C语言低位D0为0, 如此类推, 大家不难算出自己想要做的效果了。 大家编译烧写看看, 显示的速度您可以依据需求调整延时a的值, 不要超过变量类型的值域就行了。 也没关系, 还记得Keil的I/O口仿真功能吗?看看这里就知道该怎样办了。 所以P1可以直接运用不会出错啦。 接上去顺序直接跳转到main函数执行, do-while循环保证单片机不时循环工作。   下面我们把顺序换一种方式写, 以加深对寄存器的理解。

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展