有时候我必须选择一个人过冬 习惯在冰天雪地里追梦
心得总结:8051不同类型RAM区的访问区别
上一篇 /
下一篇 2007-05-30 16:15:36
/ 个人分类:工作备忘
RAM区 | 地址 | 访问指令举例 | 消耗CPU周期 | 速度 | 备注 |
DATA | 00H到7FH | MOV 01H,#21H | 一个或两个 | 快 | 51核MCU都有 |
SFR | 80H到FFH | MOV 80H,#21H | 一个或两个 | 快 | 系统保留的硬件寄存器区,用户不能自由使用。 |
IDATA | 80H到FFH | MOV R0,#81H MOV @R0,#21H | 至少三个 | 慢 | 8031、AT89C2051无IDATA,8051、STC2051有 |
PDATA | 00H到FFH | MOVX R0,#81H MOV @R0,#21H | 至少三个 | 慢 | 加强型51MCU才有PDATA,譬如STC89C51RC |
XDATA | 从0000H到FFFFH | MOVX DPTR,#101H MOVX @DPTR,#21H | 至少三个 | 慢 | 加强型51MCU才有XDATA,譬如STC89C54RD+ |
从上表可以看出,不同的RAM区间在地址编排上有重复,为了区分各种RAM区的访问,51MCU从硬件上规定了访问不同的RAM区需要不同的指令,这就造成了不同的RAM区数据访问速度是不一样的,其中DATA区的数据访问速度最快,编程时如果追求效率,变量应尽量定义到这个区域,特别是需要频繁访问的变量。
把以下这几段C代码分别用Keil C51编译成汇编后,可以很容易看出不同的RAM区数据访问指令及访问速度的区别。
uchar data tmpcode=0;
main()
{
tmpcode=10;
}
uchar idata tmpcode=0;
main()
{
tmpcode=10;
}
uchar pdata tmpcode=0;
main()
{
tmpcode=10;
}
uchar xdata tmpcode=0;
main()
{
tmpcode=10;
}
导入论坛
引用链接
收藏
分享给好友
管理
举报
TAG: