没有合适的资源?快使用搜索试试~ 我知道了~
C51中data,idata,xdata,pdata的区别
需积分: 6 9 下载量 5 浏览量
2011-01-07
10:04:19
上传
评论
收藏 51KB DOC 举报
温馨提示
试读
9页
xdATa: 外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问.pdATa: 外部扩展RAM的低256个字节.idATa: 固定指前面0x00-0xff的256个RAM
资源详情
资源评论
资源推荐
51 系列中 data,idata,xdata,pdata 的区别
dATa: 固定指前面 0x00-0x7f 的 128 个 RAM,可以用 acc 直接读写的,速度最快,生成的代码也
最小。
idATa: 固定指前面 0x00-0xff 的 256 个 RAM,其中前 128 和 dATa 的 128 完全相同,只是因为访
问的方式不同。idATa 是用类似 C 中的指针方式 访问的。汇编中的语句为:mox ACC,@Rx.
(不重要的补充:c 中 idATa 做指针式的访问效果很好)
xdATa: 外部扩展 RAM,一般指外部 0x0000-0xffff 空间,用 DPTR 访问。
pdATa: 外部扩展 RAM 的低 256 个字节,地址出现在 A0-A7 的上时读写,用 movx ACC,@Rx
读写。这个比较特殊,而且 C51 好象有对此 BUG, 建议少用。但也有他的优点,具体用法属于
中级问题,这里不提。
startup.a51 的作用,和汇编一样,在 C 中定义的那些变量和数组的初始化就在 startup.a51 中进
行,如果你在定义全局变量时带有数值,如 unsigned char dATa xxx="100";,那 startup.a51 中就
会有相关的赋值。如果没有=100,startup.a51 就会把他清 0。( startup.a51==变量的初始
化)。 这些初始化完毕后,还会设置 SP 指针。对非变量区域,如堆栈区,将不会有赋值或清零
动作。
有人喜欢改 startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如
掉电保护的时候想保存一些变量, 但改 startup.a51 来实现是很笨的方法,实际只要利用非变
量区域的特性,定义一个指针变量指向堆栈低部:0xff 处就可实现。, 为什么还要去改? 可以
这么说:任何时候都可以不需要改 startup.a51,如果你明白它的特性。
bit
是在内部数据存储空间中 20H .. 2FH 区域中一个位的地址,这在 DATA 的 20H 以后以字节
形式出现,可互相参照。另外加上 8051 可寻址 的 SFR,但刚刚试过,只是 00H--7FH 起作
用,也就是说当数据有变化时颜色变红,以后的从 80H 到--FFH 就不是位寻址区了,是位
寻址的特殊寄存器,如涉及到了可位寻址的那 11 个当然会有反应。
复位后,程序计数器 PC 的内容为 0000H,内部 RAM 各单元的值不确定。各功能寄存器的
复位值如下:堆栈指针 SP 的复位值为 07H,累加器 ACC、寄存器 B 的复位值为 00H,数
据指针 DPTR 的复位值为 0000H,而 p0、p1、p2、p3 四个口的复位值为 0FFH。其他 SFR
如 PSW、TCON、TMOD、TL0、TH0、TL1、TH1 的复位值也为 00H。
wave 中是低 128 字节和高 128 字节(0-7FH),低 128 字节是片内 RAM 区,高 128 字节
(80-FFH)是 SFR(特殊功能寄存器)bit 则是位于低 128 字节的 20H .. 2FH 区域,即 data
的 20H .. 2FH 区域
code
是在 0000H .. 0FFFFH 之间的一个代码地址。
1/9
虫_子
- 粉丝: 4
- 资源: 37
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0