没有合适的资源?快使用搜索试试~ 我知道了~
单片机教程:C51中data_idata_xdata_pdata区别详解.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 83 浏览量
2022-07-07
20:24:44
上传
评论
收藏 43KB DOC 举报
温馨提示
试读
5页
单片机教程:C51中data_idata_xdata_pdata区别详解
资源推荐
资源详情
资源评论
51 系列中 data,idata,xdata,pdata 的区别
1/5
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 之间的一个代码地址。
我用
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功