一.51 的存储器结构 笼统来说单片机片内存储器分为CODE 区和data 区,cpu 从code 区读取指令,对data 区的数据进行运算处理。前者在程序运行中为只读,一般为FLASH,用来放置程序代码和一些只读的数据(如字模表之类),后者可以随机读写,用来存放程序运行中的临时数据,如局部变量或全局变量,全局变量一直占用着RAM 内存,而局部变量在使用完后会自动清除RAM 空间。当然在片外,可以外扩FLASH 和RAM(此时称为XRAM,因为寻址方式不一样),外扩的大小与单片机寻址能力有关。有的单片机将外扩RAM 封装在片内,如AT89C51,所以有了所谓的片内XRAM。 二.变量的存储模式 变量是一种在程序执行过程中能不断变化的量。它有数据类型、存储类型、存储器模式和有效范围四种属性。C 语言规定每个变量必须有一个标识符作为变量名,在使用一个变量前,必须先对变量进行定义,指出其数据类型和存储模式。以便编译系统为其分配存储单元。在C51 中对变量进行定义的格式如下: [存储类型] 数据类型 [存储器类型] 变量名表,如auto char data i; 存储类型指明变量的存储区域,而变量的存储类型和变量在程序中说明的位置决定了它的作用范围。存储类型含义与C 语言相同。存储类型有四种:auto 型、extern 型、static 型、register 型,缺省为auto 型(看 来我 一直都 是凹 凸 型啊 )。其区别 如下: au to:自动变量。存储在内存的堆 栈 区,属于 临时性存储变量,并 不长 期占用内存,可以被 多 次 覆 盖 。 register:寄 存器变量。register 与au to 一样属于 自动类别 。区别 在于 register的值 保 存在CPU 的寄 存器中。计 算机中只有寄 存器中的数据才 能直接 参 与运算,而一般变量是放在内存中的,变量参 加 运算是,需 要 先把 变量从内存中取到 寄 存器中,然后计 算。所以一般把 使用最 频 繁 的变量定义成 register 变量。register 变量只能在函 数中定义,并 只能是int 和char 型。 static:静 态 变量。声 明静 态 变量的,也 就 是C 语言中的私 有成 员 .如果 在一个函 数中声 明一个静 态 变量,静 态 变量的空间不在栈 里 面 ,而是存储在静 态 空间里 ,这 个函 数结束 后,静 态 变量的值 依 旧 存在,内存不会收 会此变量占用的内存空间,而是等 整 个程序都 结果 后才 收 回 静 态变量空间。 ex tern:外部类型。ex ...