完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
近来我也投入了学习STM32的战斗。我采用的方案是先熟悉寄存器,至于库函数,我认为就是对代码的整理、美观化、直观化和形象化,再就是封装——这些工作可以慢慢来,寄存器的操作熟悉了、库函数是理所当然!
我突发奇想地要把STM32操作寄存器的方式应用于51单片机上。比如:要点亮P1^0一个LED小灯。已知P1的地址为90H,头文件“Reg52.h”中有:sfr P1=0x90。我想不加头文件,也不加这句sfr P1=0x90,也跟STM32一样来个#define P1 (*(volatile u8 *)0x90) 1=0xfe。 结果不如我所愿。百思后终于得其解。 结论:访问51系列单片机的特殊功能寄存器SFR,必须采用直接寻址;访问52单片机RAM区的高128字节(51只有低128B),必须采用间接寻址。 上面用到指针,也就是间接寻址,访问到的是属于RAM区的高128字节。也就是KeilC51 中idata类型。 |
|
相关推荐
5个回答
|
|
51内部地址特殊功能寄存器的地址跟高字节128是重复的,51就是通过指令读取方式区分。
|
|
|
|
我也这样想过但51的寄存器不多啊 直接操作比较方便
|
|
|
|
这个结论我不是很信服,建议LZ反汇编出来看看
|
|
|
|
不知道您用过51单片机没。
也不知道您试过没。 51内部地址特殊功能寄存器的地址跟RAM高字节128是重复的,通过不同的寻址方式加以区分——访问51系列单片机的特殊功能寄存器SFR,必须采用直接寻址;访问52单片机RAM区的高128字节(51只有低128B),必须采用间接寻址。 一般介绍51单片机的资料会提到这个,尤其是汇编教材更是必然。 其实这是51单片机芯片本身的规则,而不是某某个人下的论断。 |
|
|
|
原来是这样,学习了,对51了解不是很深,我都是用合泰的~
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:22 , Processed in 1.184124 second(s), Total 87, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号