老古开发网首页
导航:老古开发网首页文章索引文章分类单片机→[PIC8位在PICC中的数据类型]
| -文章搜索 - 最新文章 - |

PIC8位在PICC中的数据类型

发布时间:2006年8月2日 点击次数:1319
来源:   作者:
 

PIC8位MCU的内存都是8位字节结构的,所以PICC中对于数据的划分都是以8位为基础的。

在汇编中,我们对一个地址为0X20的内存附值:

movlw 255;

movwf 0x20;

但一个内存是8位结构,能表示最大的数是255。要是超过了会怎么样呢?

movlw 256;

movwf 0x20;

通过DEBUG后,可以看出0X20中的值不是256,而是0了。

这里可以看出PIC处理器计算过程是当计算结果超过内存能容纳的最大数(也就是所谓溢出),则自动抛弃最高位。

如下:

255         - 256

11111111-100000000

256的2进制有9位,于是PIC处理器就自动抛弃最高位1,剩下的8个0放入内存,于是就成了0了。这过程是由硬件自动完成的。

在PICC中象这样的概验比比都是。

如:char x;

for(x=255;x--;){;}

是完成255个循环。

要是for(x=256;x--;){;}

则是0个循环。

因为PICC中定义CHAR类型数据是8位。

再如:int x;

for(x=65537;x--){;}

则是只循环一次。因为PICC中INT数据是16位,占2个存储单位。

如上所述,在规划一个程序之前要考虑程序中可能涉及到的最大计算量来定义数据类型,不然将会发生溢出,导致数据混乱。

但也不可为了简便,全用长结构的类型来申明数据类型,不然会导致计算时间慢,空间占用多。

如X可能大于255,但不会大于65535,那么申明:unsigned int x;

如果X可能会是负数就一定要定义int x;

同上要是X可能大于65535,那么就得定义long x;

浮点数是一个很特殊的类型,不需要了解它的构造,只需要了解它是一个24位或32位的存储结构,是一个能表示小数的数据类型,浮点表示的数字范围极大,所以在用浮点类型时候,不需要考虑是否溢出的问题。

 

欢迎进入老古论坛进行讨论
[单片机] 相关文章:
初浅研究PIC之延时函数和循环体优化
简介:
初浅研究PIC之延时函数和循环体优化 很多朋友说C中不能精确控制延时时间,不能象汇编那样直观。 其实不然,对延时函数深入了解一下就能设计出一个理想的框价出来。 一般的我们都用 for(x=100;--x;){;}此句等同与x=100;while(--x){;}; 或for(x=0;x<100;x++){;} 来写一个延时函数。 在这里要特别注意:X=100,并不表示只运行100个指令时间就跳出循环。 可以看看编译后的汇编: x=100;while(--x){;} 汇编后: &......

在PICC中使用常数指针
[转载]8位单片机的16位外部总线扩展与应用
[转载]基于 TLC2543设计的采集系统
PIC单片机编程漫谈(一)
[转载]基于单片机的OLED显示器的应用
AT89cxx加密原理
如何用PIC做红外线遥控接收?(三)
如何用PIC做红外线遥控接收?(二)
如何用PIC做红外线遥控接收?(一)
 
下一个:[单片机]转:CRC算法原理及C语言实现
简介:
CRC算法原理及C语言实现 有一篇好文章,不敢独享! CRC算法原理及C语言实现(介绍了3种方法) CRC算法原理及C语言实现 -来自(我爱单片机) 摘 要 本文从理论上推导出CRC算法实现原理,给出三种分别适应不同计算机或微控制器硬件环境的C语言程序。读者更能根据本算法原理,用不同的语言编写出独特风格更加实用的CRC计算程序。 ......
 

上一个:[单片机]一个高效的模拟SPI的读写函数

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒