一、数据类型


sbit、sfr、sfr16属于C51的扩展数据类型;

1、sbit:定义可位寻址类型的变量,用于位寻址,从位寻址字节中定义位变量;sbit定义的变量属于特殊功能寄存器类型的位变量,存放在特殊功能寄存器区;

sbit的三种形式:

sbit 位变量名 = 位地址;

sbit 位变量名 = 特殊功能寄存器名 ^ 位位置;

sbit 位变量名 = 字节地址 ^ 位位置;

如:

sbit P1_0 = P1 ^ 0;
sbit P1_1 = P1 ^ 1;
sbit P1_2 = P2 ^ 2;

2、sfr/sfr16:分别定义8位和16位的特殊功能寄存器类型的变量,这种类型的变量存放的是硬件的物理地址码;

sfr/sfr16的形式:

sfr 特殊功能寄存器名 = 特殊功能寄存器地址常数(地址常数);

sfr16 特殊功能寄存器名 = 特殊功能寄存器地址常数(地址常数);

如:

sfr   P1 = 0x90; //定义P0口的物理地址码;
sfr   P2 = 0xA0; //定义P1口的物理地址码;
sfr16 T2 = 0xCC; //定义T2的物理地址码;

注意:sbit/sfr/sfr16定义的变量都存放在地址[80H,FFH]这16字节的地址范围内;

二、新增加的关键字interrupt:定义一个中断服务函数;

reentrant:定义一个可再重入函数;

using:设定中断服务函数所使用的工作寄存器组;

三、存储类型单片机的存储空间在物理上分为4个部分:

A、片内数据存储区;

B、片外数据存储区;

C、片内程序存储区;

D、片外程序存储区;

所以,存储类型就分为以下6种:

1、code:程序代码存储区ROM,共64K,由MOVC @DPTR访问;

2、data:可直接寻址的片内数据存储区,共128字节,访问速度比较快;

3、bdata:可位寻址的片内数据存储区,共16字节(128位),允许位与字节混合访问;sbit/sfr/sfr16;

4、idata:可间接寻址的片内数据存储区,共256字节,允许访问片内全部的RAM空间;

5、pdata:可分页寻址的片外数据存储区,共256字节,由MOVX @Ri访问;

6、xdata:可寻址的片外数据存储区,共64KB,由MOVX @DPTR访问;

使用code来定义变量的存储类型时,编译器会将其定义存放在程序代码存储区ROM中,这样的话,这种类型的变量的值就不能再被修改了;