Keil C51编程:目标代码与绝对地址访问

需积分: 16 5 下载量 32 浏览量 更新于2024-08-16 收藏 381KB PPT 举报
"这篇文档主要介绍了使用Keil C51编译器编译后的目标代码特点,以及C51语言对标准C语言的扩展,包括数据类型、特殊功能寄存器(SFR)、位变量(sbit)和存储空间类型的使用。C51程序能够直接对指定内存地址进行操作,并且在Keil C51中,可以通过特定语法来定义和访问8051单片机的不同存储区域的变量。" 在编程Keil C51环境下,当程序编译完成后,生成的目标代码具有浮动地址,这意味着它们的绝对地址在链接阶段通过BL51链接器才能最终确定。这种特性使得程序能够在不同的硬件配置下进行定位。 C51是针对8051系列单片机的扩展版C语言,它允许开发者直接对特定的存储器地址进行操作。以下是一些C51特有的语言扩展: 1. **数据类型**: - **bit型变量**:C51允许定义bit变量,如`bit crc_ok, flg_err;`,这些变量存储在8051的可位寻址区内存中。 - **sfr特殊功能寄存器**:可以直接声明SFR的地址,例如`sfr P0 = 0x80;`,并对其进行读写操作,如`P0 = 0xFF;`。 - **sfr16型变量**:用于声明16位SFR,如`sfr16 T2 = 0xCC;`,可以分别设置高低8位,如`MOV TL2, #67H; MOV TH2, #0F5H;`。 2. **sbit型变量**:sbit变量用于访问特殊功能寄存器的单个位,如`sbit CY = PSW^7;`,并且可以在包含文件中预定义,例如在`REG51.H`中定义`sbit mybit0 = ibase^0;`,然后赋值`mybit0 = 1;`。 3. **存储空间类型**: - C51提供了多种存储类型来指定变量存储位置,例如`code`、`data`、`idata`、`bdata`、`pdata`、`xdata`、`auto`、`extern`和`static`。 - `DATA`区域位于0X00到0X7F,是片内RAM直接寻址区。 - `BDATA`在0X20到0X2F,是片内RAM的可位寻址区。 - `IDATA`涵盖0X00到0XFF,用于寄存器间接寻址的片内RAM。 - `PDATA`和`XDATA`则对应于分页寻址的外部数据存储器。 通过这些扩展,C51程序员可以更加灵活地访问和控制8051单片机的各种硬件资源,实现精确的内存管理和高效的数据处理。在编写8051程序时,了解并熟练运用这些特性是至关重要的,可以有效提高程序的效率和可移植性。