C51编程经验
需积分: 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编程能力大有裨益。
weixin_38580959
- 粉丝: 3
- 资源: 960
最新资源
- 国产化中间件tongweb(嵌入式)
- 折笔画输入法4.02.zip
- tinygltf加载资源demo
- 车用驱动电机原理与控制基础-P147公式(6-71)~(6-74)
- Springboot 基于AbstractRoutingDataSource+aop读写分离方案实现代码
- 2023-04-06-项目笔记 - 第三百七十一阶段 - 4.4.2.369全局变量的作用域-369 -2025.01.07
- IMG_20250107_152102.jpg
- metrics-server配置文件yml
- GE通用公司PREDIX工业物联网平台技术白皮书
- 2023-04-06-项目笔记 - 第三百七十一阶段 - 4.4.2.369全局变量的作用域-369 -2025.01.07
- 国产化中间件tongweb(非嵌入式)
- 支持ARM架构的minio镜像,版本号为minio-RELEASE.2020-07-18T18-48-16Z-arm64
- Python自动化批量文件管理工具:基于自定义规则过滤文件夹中特定文件
- 学习flv.js的demo案例
- 广东省高清卫星地图全图
- 中国城镇智慧燃气发展研究报告