分享

51内核8位单片机处理16位数据可行吗?

 jianke 2009-10-05

51内核8位单片机处理16位数据可行吗?

zigbee一路向前   2009-05-18 15:45   阅读28   评论1  
字号:    

硬件条件:51内核的8位单片机CC2430

验证程序片段:

uint16value;
float PH;
uint16 PH_out;

value=getdata(0);//相关传感器ADC变换函数得到ADC采样值

PH=(value-0x0659)/0X01D0;
PH_out=PH*0x000A;

 

    昨天编写单片机数据处理程序的时候,当时我想的是利用单片机C语言直接对16位数据进行加减乘除运算,因为拿不准到底在单片机中能否实现这么复杂的运算,当时问了师兄他也拿不准,我又去电子工程师论坛里问了好多人,有人说行有人说不行,并且有人说不行的理由就是“8位的单片机如何实现16位的运算呢”,当时我真被吓住了,后来没辙了就自己做实验验证呗,现在将结果公布如下:我给value赋初值0X1FFF,通过发送到串口16进制显示的PH_out的值为008C,由此可以看出。

    八位单片机实现16位的数值运算一点问题都没有,而且速度比较快,根本不存在8位的单片机不能实现16位的运算的假说,呵呵。有兴趣的可以试验一下。还是实践出真理。

   补充一点比较迷惑的东西:在单片机编程的时候不要把数据类型和进制表示混杂在一块,个人认为把重点应放在数据类型上,因为它决定了数据到底是怎么存储的,到底占多大的空间?因此在编程的时候要注意一下各个数据类型间的转换。至于数据的进制表示就无所谓了,因为单片机实际在执行代码的时候都会自动编译成二进制,所以在变成的时候用16进制(无非在写的时候形式是0X。。。)还是10进制写编程公式是无所谓的,即使在一个公式中混杂两种进制都无所谓。就拿上面的程序片段来说公式PH=(value-0x0659)/0X01D0

与PH=(value-16250)/464完全等价的,无非一个是用16进制表示,一个使用10进制表示,仅此而已。

   本文是作者原创,转载必须保证文章的完整性并标明出处,请尊重作者,支持原创。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多