关于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类型的试试.
我没有试过这种情况,对于常量地址有可能编译器会优化为直接地址寻址.