当前位置: 代码迷 >> 单片机 >> 关于51单片机IO映射实现的有关问题
  详细解决方案

关于51单片机IO映射实现的有关问题

热度:15   发布时间:2016-04-28 15:59:26.0
关于51单片机IO映射实现的问题
我在Keil 51中想学ARM那样来个IO映射
#define Port0 *(volatile unsigned char idata *)(0x80) //p0 口寄存器地址
结果访问的是片内内存
请问这个和 sfr P0 = 0x80; 的区别在哪里?
本人选用的是52单片机,知道特殊寄存器只能采用直接寻址,对应地址的RAM只能采用间接寻址。
难道这是编译器,能否自己实现IO映射呢?[/size][size=16px][/size]



------解决方案--------------------
特殊功能寄存器的访问只能用sfr
------解决方案--------------------
51里面,汇编指令对SFR区域的访问只能直接地址寻址.

而你的定义的是一个常量地址,但是类型是idata.
所以访问到的事片内RAM的idata区.
不过你可以改成data类型的试试.
我没有试过这种情况,对于常量地址有可能编译器会优化为直接地址寻址.
  相关解决方案