导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→浅谈8位MCU在PICC中的数据类型(转载)

* 41500: 浅谈8位MCU在PICC中的数据类型(转载)

   Atiny 
Atiny发表的帖子 

 浅谈8位MCU在PICC中的数据类型(转载)
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技术论坛




发表时间:2003年9月5日11:22:08

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:请教一个关于用protel中的cupl编写gal的问题我不知道大家都用什么写,我用protel99带
[下一篇帖子]:音响设备频谱显示问题[求助]民用音响设备的显示中有各频段频谱大小显示,请问这些频谱信息是如何得来的,