C51单片机:子函数与程序结构解析

需积分: 0 0 下载量 169 浏览量 更新于2024-07-13 收藏 2.68MB PPT 举报
这篇资源主要探讨了C51单片机编程中的一个具体问题,即子函数的放置位置是否可以位于主函数(Main)之后,并提供了相关的C51单片机基础知识,包括C51语言的特点、程序结构、数据类型以及常用的头文件。 C51单片机是基于8051内核的微控制器,广泛应用于嵌入式系统设计。它支持C语言编程,C51是针对51系列单片机优化的C语言版本。C51语言的特点包括语言简洁、运算符多样、可以直接访问硬件地址进行位操作、支持结构化编程以及生成的程序效率高等。这使得C51成为单片机开发的常用工具。 在C51程序中,`#include<reg52.h>` 和 `#include<intrins.h>` 是两个重要的头文件。`reg52.h` 定义了52系列单片机的特殊功能寄存器和位寄存器,比如P0-P3端口、PSW、ACC、B等。而`intrins.h`包含了一些内联函数,提供了一些特定于51系列单片机的指令集,如 `_cror_` 用于循环右移操作。 在程序结构方面,C51程序通常有一个主函数(Main),这是程序执行的起点,它可以调用其他自定义功能函数。例如,示例代码中定义了一个延时子函数 `delay()`,这个子函数被主函数调用以实现LED灯的闪烁效果。在主函数中,先将P0端口设置为0x7f,使P0.7亮起,然后通过无限循环,不断调用`delay()`函数和改变P0的值来控制LED灯的闪烁。 在数据类型上,C51提供了多种内置数据类型,包括无符号和有符号的字符型(char)、整型(int)、长整型(long)以及浮点型(float)。此外,还有位类型(bit),用于位操作,这对于单片机编程非常重要,因为51单片机支持直接的位操作。 在给出的代码示例中,`light`变量定义为无符号整型,用于在延时子函数中计数,直到计数值减到0,实现延迟效果。`_cror_(P0, 1)` 是一个内联函数,表示将P0的值循环右移一位,实现了LED灯位的翻转。 C51单片机编程中,子函数的位置并不影响其使用,只要在调用之前定义即可。主函数(Main)通常放在程序的末尾,但这不是强制性的,只要确保在调用之前定义了所有函数,无论它们在源代码中的位置如何,都能正常工作。