51 单片机里,直接操作内存为什么不能点亮灯?

2022-05-15 14:39:28 +08:00
 amiwrong123

如上,如果用P1 = 0xfd;就能点亮 P1 的第一个灯,但是用*(unsigned char*)(0x90) = 0xfd;就点不亮。但是我看这两句的汇编代码都是一样的MOV (0x90), #0xfd

3470 次点击
所在节点    程序员
18 条回复
pca7a2
2022-05-15 14:42:51 +08:00
md5sum 对比一下
liyang5945
2022-05-15 15:11:11 +08:00
刚好我也在学单片机,我刚才试了一下,的确不能点亮,我猜测是通过 sfr 声明的地址才能操作端口的电平,不知道你这个汇编代码是怎么弄出来的,我对比了一下生成的 hex 文件,里面有很多处不同的
amiwrong123
2022-05-15 15:31:00 +08:00
@liyang5945 #2
点击 start debug session ,view 开启汇编窗口。
hex 不同是因为前者只有一句汇编,后者有两句汇编。但看了汇编,感觉没有本质区别,都是往内存引用里 赋值。
liuxu
2022-05-15 16:03:12 +08:00
wty
2022-05-15 16:44:09 +08:00
51 分什么直接寻址间接寻址,跟现代 X86 和 ARM 这种不太一样
RAM 的低 128 字节作为内存(前几个字节还跟寄存器复用),可以用 MOV 和 MOV @ R0 这种操作
高 128 字节跟 SFR 复用,只有直接 MOV 会被解释为操作 SFR ,用 MOV @ R0 操作会被解释为操作 RAM
XRAM 需要用 MOVX 访问,Flash 需要用 MOVC 访问

51 这种蛋疼的访问方式让指针也很麻烦,memcpy 甚至用了一个大 switch 去把每种情况都写了一遍。。。。
statumer
2022-05-15 16:44:16 +08:00
直接寻址访问 sfr ,间接寻址访问用户内存区
RoyLaw
2022-05-15 18:03:00 +08:00
我都毕业快二十年了,大家还在玩 51 单片机嘛?你试试用二进制来操作。
liuxu
2022-05-15 19:38:16 +08:00
@RoyLaw 我十年前毕业学的郭天祥的 51 单片机,看上去 OP 现在还是在学郭天祥的
someonesnone
2022-05-15 20:46:53 +08:00
操作 ram 和 sfr 的汇编不一样吧 所以直接写入端口寄存器需要特殊的方法
disk
2022-05-15 21:13:36 +08:00
所谓本质需要追溯到汇编阶段,译码阶段甚至是执行阶段。。。注意某些特殊规定。
zbianbiaos
2022-05-15 22:10:52 +08:00
51 是哈佛结构吧(不确定啊),外设没有统一地址管理,SFR 应该是特殊映射寄存器,将一个特殊的地址空间映射到 P1 变量,而不是你能够正常寻址的用户地址空间
anonydmer
2022-05-16 09:22:24 +08:00
十几年前我可以点亮,现在也点不亮咯
qwertyssp
2022-05-16 12:05:31 +08:00
既然都看到汇编了,这两句怎么能是等价呢?
aru
2022-05-16 13:51:52 +08:00
啥时候教学才能替换为 mips 、arm 、riscv 架构的廉价单片机啊
Takizawa
2022-05-16 22:36:33 +08:00
@aru 等那一批人退休🌝🌝
Halry
2022-05-17 18:33:25 +08:00
51 不是哈弗结构,所以不能直接通过操作内存来控制外设,arm 是,所以可以直接像操作内存的方式操作外设
amiwrong123
2022-05-17 21:49:09 +08:00
@Halry #16
老哥,不是很懂为什么 是否为哈佛结构 会影响到 能否通过操作内存来控制外设。

从知乎上来看:
哈佛结构与冯诺依曼结构的本质区别在用是否使用同一套地址总线、数据总线,程序和数据是否统一寻址。比如代码地址是从 0~100k ,数据也是从 0~100k 这是哈佛结构,如果代码是从 0~100k ,数据是从 100~200k 并且使用同一套地址总线和数据总线这是冯诺依曼结构。

程序和数据是否统一寻址 为什么会影响到 能否通过操作内存来控制外设阿?
Halry
2022-05-22 20:57:24 +08:00
@amiwrong123 抱歉,是我记混了,确实不关架构的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/852954

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX