C51编程经验

preview
需积分: 0 0 下载量 8 浏览量 更新于2020-08-03 收藏 68KB PDF 举报
在单片机开发中,C语言作为一种高级编程语言,逐渐被广泛应用,特别是在51系列单片机上。相比汇编语言,C51虽然在某些方面可能显得“可控性”较差,但其可读性和移植性更强。以下是一些关于C51编程的经验分享。 1. **处理热启动和冷启动** 在工业控制系统中,看门狗电路用于监控程序运行,当系统异常时通过复位实现热启动。为了区分热启动和冷启动,通常会设置特定内存单元作为标志。然而,C51程序在运行时,由于默认的起始代码会清零IDATA内存,导致热启动的判断失效。为解决这个问题,需要自定义起始代码。这涉及到修改`startup.a51`源文件,重新编译生成`startup.obj`,并与C源代码链接,以保留特定内存区域的初始值。具体步骤包括修改起始代码、编译、链接以及生成HEX文件。 2. **直接调用EPROM中的固态程序** 当需要调用EPROM中预编译的子程序时,可以使用C语言中的函数指针。首先定义一个指向函数的指针,然后将其赋值为子程序的地址,之后通过指针调用该子程序。例如,若有一个在地址DE00H处的显示子程序,可以使用如下代码实现调用: ```c void (*DispBuffer)(); DispBuffer = 0xDE00; for(;;) { Key(); DispBuffer(); } ``` 3. **浮点数转字符数组** 在需要将浮点数存储到E2PROM时,需要将浮点数拆分为其组成的字节。C语言中的浮点数遵循IEEE格式,每个浮点数占用4个字节。可以通过定义void指针指向浮点数,然后转换为char型指针来访问各个字节。以下是一个示例: ```c float myFloat = 34.526f; char *floatBytes = (char *)&myFloat; for(int i = 0; i < sizeof(float); i++) { // 将floatBytes[i]存储到E2PROM } ``` 这样,可以逐个获取并存储浮点数的组成部分。 总结来说,C51编程不仅涉及到程序结构的设计,还涵盖对底层硬件特性的理解和利用。通过自定义起始代码处理热启动、利用函数指针调用EPROM中的子程序,以及将浮点数转换为字节存储,我们可以更高效地利用C语言进行单片机开发。理解并掌握这些技巧,对于提升C51编程能力大有裨益。