C51编程:声明SFR寄存器与位变量

需积分: 16 5 下载量 40 浏览量 更新于2024-08-16 收藏 381KB PPT 举报
"这篇文档主要介绍了在Keil C51编程环境下声明和使用特殊功能寄存器(SFR)的方法,以及对标准C语言的扩展,包括声明位SFR、16位SFR、sbit变量和不同存储空间类型的变量。" 在Keil C51中,针对8051单片机的特性,程序员可以使用特定的语法来声明和操作特殊功能寄存器。SFR是微控制器硬件中的专用寄存器,用于控制和管理硬件功能。例如,`sfr P0 = 0x80;` 声明了P0口的地址为0x80,这使得程序员可以直接通过P0进行IO操作。 1. **C51对标准C语言的扩展** - **数据类型**:C51增加了对位(bit)变量的支持,如`bitcrc_ok, flg_err;`,这些变量可以被分配到8051的可位寻址区。 - **sfr特殊功能寄存器**:使用`sfr`关键字声明SFR,如`sfr SP = 0x81;`,声明堆栈指针SP的地址。这允许直接访问和修改这些寄存器的值。 - **sfr16声明16位SFR**:如`sfr16 T2 = 0xCC;`声明定时器2的低8位(TL2)和高8位(TH2),可以通过`T2 = 0XF567;`直接赋值。 - **sbit声明位变量**:使用`sbit`声明SFR中的单一位,如`sbit CY = PSW^7;`声明标志位CY,可以通过`CY = 0;`设置其值。 2. **位变量和位地址** - 在包含的头文件中,如`REG51.H`,可以定义`sbit`变量,如`sbit mybit0 = ibase^0;`,这允许直接访问和修改指定地址的位。 3. **存储空间类型** - **变量存储类型**:包括`code`、`data`、`idata`、`bdata`、`pdata`、`xdata`、`auto`、`extern`和`static`等,用于指定变量的存储位置。 - **内部数据存储器**:如`int bdata ibase;`,`bdata`用于声明位于片内RAM可位寻址区的变量。 - **外部数据存储器**:如`xdata`用于声明位于片外RAM的变量。 - **程序存储器**:如`code`用于声明位于程序存储器的变量。 4. **存储空间的地址范围和说明** - **DATA**:直接寻址区,地址范围0X00~0X7F。 - **BDATA**:可位寻址区,地址范围0X20~0X2F。 - **IDATA**:寄存器间接寻址区,地址范围0X00~0XFF。 - **PDATA**:分页寻址的256字节区域。 通过这些扩展,C51使得编写针对8051单片机的程序更加方便,能够直接操作硬件寄存器,提高了代码的效率和可读性。理解这些扩展对于8051的程序设计至关重要。