首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

怎么通过地址控制寄存器内容

2012-12-14 
如何通过地址控制寄存器内容?单片机:stc12c5a(51单片机)P1口的地址是0x90,我这样定义 main(){uint8 * addP

如何通过地址控制寄存器内容?
单片机:stc12c5a(51单片机)
P1口的地址是0x90,我这样定义 
main()
{
uint8 * addP1 0x90; 
addP1=0xf0;//P1引脚没有变化,还是高电平??
while(1);
}

我怎么才能通过地址来控制寄存器。
最近在看stm32的库函数,发现那些函数是通过地址控制寄存器的,为什么51系列的不行?需要设置什么么?还是寄存器地址与RAM地址重合,导致语句addP1=0xf0;实际上是把RAM的0xf0的数据改了而不是改的寄存器?
怎样使语句addreg=0xf0;控制寄存器的内容?
[最优解释]
stc和STM不一样

STC的51内核要访问SFR只能通过SFR进行寄存器声明

STM却可以通过地址操作任何东西
[其他解释]
51的程序空间,数据空间和IO空间是分开编址的,即每个51核都有3个0x90地址,只有IO空间的0x90才是P1口,在汇编层次上,访问不同类型的地址空间指令是不同的。你这样定义实际访问的是数据空间,因此是不行的,因为访问IO空间只能是直接寻址的。因此一般用下面方法访问(在KEIL中):

sfr P1 = 0x90;

P1 = XX;

STM32 虽然也是哈佛结构,但它只是将程序总线和数据总线分开了,但编址空间却是一致的(确切的说是重叠的),因此无论你怎么寻址,最终找到的都是一个地址,因此是正确的。


[其他解释]
是不是应该写成这样子
*addP1=0xf0;//


[其他解释]
该回复于2012-12-07 09:18:15被管理员删除

热点排行