如何通过地址控制寄存器内容?

田子方 2012-12-06 02:17:06
单片机:stc12c5a(51单片机)
P1口的地址是0x90,我这样定义
main()
{
uint8 * addP1 0x90;
addP1=0xf0;//P1引脚没有变化,还是高电平??
while(1);
}

我怎么才能通过地址来控制寄存器。
最近在看stm32的库函数,发现那些函数是通过地址控制寄存器的,为什么51系列的不行?需要设置什么么?还是寄存器地址与RAM地址重合,导致语句addP1=0xf0;实际上是把RAM的0xf0的数据改了而不是改的寄存器?
怎样使语句addreg=0xf0;控制寄存器的内容?
...全文
200 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
默寞 2012-12-07
  • 打赏
  • 举报
回复
是不是应该写成这样子 *addP1=0xf0;// 亲
lbing7 2012-12-07
  • 打赏
  • 举报
回复
stc和STM不一样 STC的51内核要访问SFR只能通过SFR进行寄存器声明 STM却可以通过地址操作任何东西
youzi722 2012-12-06
  • 打赏
  • 举报
回复
51的程序空间,数据空间和IO空间是分开编址的,即每个51核都有3个0x90地址,只有IO空间的0x90才是P1口,在汇编层次上,访问不同类型的地址空间指令是不同的。你这样定义实际访问的是数据空间,因此是不行的,因为访问IO空间只能是直接寻址的。因此一般用下面方法访问(在KEIL中): sfr P1 = 0x90; P1 = XX; STM32 虽然也是哈佛结构,但它只是将程序总线和数据总线分开了,但编址空间却是一致的(确切的说是重叠的),因此无论你怎么寻址,最终找到的都是一个地址,因此是正确的。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧