Keil C51下快速小数运算算法

Keil C51 下快速小数运算算法 Keil C51 是一种广泛应用于实时控制系统中的微控制器,然而,在实时控制系统中,浮点数运算是一个很大的挑战,因为浮点数运算需要大量的计算资源和存储空间。在 Keil C51 中,浮点数运算不仅速度慢而且代码长度长,限制了 C 语言的应用。为了解决这个问题,本文介绍了一种快速的小数运算算法,使用 16 位定点小数在 Keil C51 中实现高速的小数运算。 1. 定点小数运算算法 在实时控制系统中,控制算法通常可以用差分方程表示,计算机实时控制系统中的控制算法通常可以用下面的差分方程表示: y[n] = a1*y[n-1] + a2*y[n-2] + … + bn*x[n] + bn-1*x[n-1] + … 其中 y[n] 是第 n 个采样周期的输出,x[n] 是第 n 个采样周期的输入,ai 和 bi 是实系数。在保证计算精度的条件下,将系数 ai 和 bi 转换成整数或定点小数,会大幅度提高运算速度和大幅度减少代码长度。 1.1 定点小数表示 小数可以分为整数部分为 0 的纯小数和带整数的小数。纯小数可以直接用定点小数表示,当使用 16 位定点小数时,分辨率可以达 2^-16,可以获得足够的运算精度。 1.2 定点算法 设 x 为十进制纯小数,M 为 16 位二进制整数。若程序需计算 y=(x·M) 取整,则可以先将 x 转换成 16 位二进制定点小数: X = (x·65536) 取整 由于 X 的小数点在 X 的最高位前,2 个 16 位二进制数相乘结果为 32 位二进制数,小数点在高 16 位和低 16 位间,乘法运算后的高 16 位为计算结果的整数部分,低 16 位为计算结果的小数部分。即: (x·M) 取整 = (X·M) 取高 16 位 这样处理后可以大幅度提高运算速度,且大幅度减少代码长度。 1.3 实现取整操作 在汇编语言程序设计中,取整操作容易实现,在 C 语言中实现取整操作可以使用联合体。先定义 2 个联合体: union { unsigned char a_byte[4]; long a_long; } r; union { unsigned char b_byte[2]; int b_int; } p; 第一个是长整数变量与 4 字节变量的联合体,长整型变量用于保存计算结果,第二个是整型变量与 2 个字节型变量的联合体,用于取整运算。在 Keil C51 中,长整数占 4 个字节,在 RAM 中按从高到低的顺序存放,r.a_byte[0]、r.a_byte[1] 存放计算结果的整数部分,r.a_byte[2]、r.a_byte[3] 存放计算结果的小数部分。 通过下列程序,实现取整运算: p.b_byte[0] = r.a_byte[0]; p.b_byte[1] = r.a_byte[1]; 这样 p.b_int 为计算结果的整数部分。以上程序在编译后仅为 2 条数据传送指令,需要 4 个机器周期的执行时间。与采用除法运算或移位运算实现取整运算相比,具有更快的执行速度。 2. 程序示例 设程序需要计算 0.12345 乘 16 位二进制数后取整,采用浮点数时的程序如下所示: main() { int b; b = 20000; a = 0.12345 * b; } 本程序的运行结果 a = 2527,程序编译后长度 513 字节,做浮点运算时需要 602 个机器周期。 使用定点小数运算算法后的程序如下所示: main() { int a, b; union { char c[4]; long d; } u1; union { char e[2]; int f; } u2; b = 20000; u1.d = (long)8090 * b; u2.e[0] = u1.c[0]; u2.e[1] = u1.c[2]; } 本程序的运行结果 u2.f = 2527,程序编译后长度 129 字节,做整数运算时仅需 134 个机器周期。 3. 结束语 本文介绍了一种快速的小数运算算法,使用 16 位定点小数在 Keil C51 中实现高速的小数运算。该算法可以大幅度提高运算速度,且大幅度减少代码长度,对实时控制系统中的小数运算具有重要意义。












剩余8页未读,继续阅读

- gh_huang20122015-09-22很好,借鉴了,谢谢。

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 软件实施实习报告.docx
- 中职生网络安全知识主题班会.docx
- 2023年3月全国计算机考试三级网络技术笔试试题及答案.doc
- 网络工程与应用复习资料要点.doc
- 项目管理模式(20211102054544)[最终版].pdf
- 汉堡王-互联网推广方案(PPT45页)(PPT).ppt
- 中国网络电视台区域博览频道广告刊例.pptx
- 实验楼综合布线设计方案自己看啊.doc
- 经济普查数据库优化方案.doc
- 项目管理-常用缩写(最新版).pdf
- hikyuu-Python资源
- 微机原理与接口技术牟琦主编习题答案.doc
- 电子商务实践心得体会.docx
- 系统集成工程管理规范样本.doc
- excel2010基本操作总结.docx
- 数字通信原理3-PCM(例题).ppt


