Keil C51编程:目标代码与绝对地址访问
需积分: 16 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程序时,了解并熟练运用这些特性是至关重要的,可以有效提高程序的效率和可移植性。
点击了解资源详情
点击了解资源详情
148 浏览量
2013-10-31 上传
180 浏览量
368 浏览量
2012-12-10 上传
262 浏览量
243 浏览量
theAIS
- 粉丝: 60
- 资源: 2万+
最新资源
- 基于 S7-300,400 CPU 集成 PN 接口 Modbus TCP 通讯快速入门(更新版本V2.6).zip
- MongoDBNotes:此存储库包含Web开发人员和数据库爱好者以及我的MongoDB NoSQL数据库初学者的注释。 此仓库涉及MongoDB大学M001课程
- OpenPMS-开源
- 杰奇1.7解密.zip_adclick.php_奇杰_杰奇_杰奇1.7解密_杰奇解密
- 单片机收银机C52(加减乘除,小数点运算,撤销,报警功能)
- 求职者
- my-portfolio:我的投资组合
- MyMaps-开源
- corenlp-java-server:斯坦福CoreNLP解析器的简单Java REST API包装器
- UU Point(优优知识库) v1.0.3
- speaking-grandma-prework
- pg_auto_failover:Postgres扩展和服务,用于自动故障转移和高可用性
- GPUCloth:使用CUDA对Blender 2.93.x进行布料模拟
- layaair2-SG:layabox2.0.2 的完整游戏项目,可以用来学习!主要是场景中的GPU内存管理,DEMO
- Md5Checker v3.3 官方中文版
- cjosn解析函数库.7z