STC32g12k128技术讨论
本帖最后由 hanghang 于 2024-5-29 12:30 编辑各位大佬,求解下面问题:
数据手册(stc32G-20240513.pdf)中,第637页建议使用movc指令读。
但是第642页又说stc32不能用movc读
感觉前后矛盾了,有实际测试过的朋友吗?到底如何?数据手册错了?
可能637页写错了,正确的是stc32不是使用movc读取eeprom吧 确实是数据手册笔误了
STC32G系列是80251结构体系
要使用MOV指令读取EEPROM
MOVC只能读取当前64K范围的代码区 照搬 51手册的后遗症, stc32 要使用 32位地址直接读取 IAP值(字或字节), 例如 : MOV R11, @DR56,MOV WR0, @DR4, 作用和 movc读取eeprom 相同(MOVC 只能读取 16位地址)
如一定要用 MOVC 读取 IAP 也行, 先 执行一条 MOVH DR56,#0xFE ;指令, 再 执行 MOVC A, @DPTR , 就能正确读取 eeprom 值了. 本帖最后由 hanghang 于 2024-5-29 15:48 编辑
我理解的是:
兼容8051的部分(实际寻址空间ff:0000 - ff:ffff),可以使用movc a,@a+dptr读取,但需要4个机器周期完成;
对于stc32g12k128整个寻址空间(00:0000-ff:ffff),都能够使用mov Rm,@DRk+dis读取,只需耗费1个机器周期。
这个需要找机会验证一下才知道。我认为这就是统一寻址空间的好处,又快又简单。
如果上面是对的,那么数据手册两处都不太严谨:
首先,637页应改为:相比iap读eeprom方式,兼容传统8051部分(实际寻址空间是ff:0000-ff:ffff)可以使用相对便捷的movc方式(需要4个机器周期);但是,最方便快捷的是使用mov方式,不仅可以用于所有24位寻址空间,而且仅仅耗时1个机器周期。
其次,642页应改为:仅兼容传统8051部分(实际寻址空间是ff:0000-ff:ffff)可以使用movc方式读取数据。
zhp 发表于 2024-5-29 15:21
确实是数据手册笔误了
STC32G系列是80251结构体系
感谢大佬 LAOXU 发表于 2024-5-29 15:30
照搬 51手册的后遗症, stc32 要使用 32位地址直接读取 IAP值(字或字节), 例如 : MOV R11, @DR56,MOV ...
感谢大佬指导 hanghang 发表于 2024-5-29 15:41
我理解的是:
兼容8051的部分(实际寻址空间ff:0000 - ff:ffff),可以使用movc a,@a+dptr读取,但需要 ...
其次,642页应改为:仅兼容传统8051部分(实际寻址空间是ff:0000-ff:ffff)可以使用movc方式读取数据。
--------------------------------------------------------------------------------------------------------------------
这句话对目前的 STC32 是否适用, 有待考核.
理论上, MOVX指令16位寻址空间为 01:0000-01:ffff), MOVC 指令16位寻址空间为 ff:0000-ff:ffff),
实际上, 目前的 stc32 , 其 dptr16位寻址空间 受 DR56 高位影响(严格的说, 是硬件设计存在错误).
所以,对 flash 小于等于 64k 的 stc32来说, 这条指令 能否使用, 有待验证. LAOXU 发表于 2024-5-30 00:22
其次,642页应改为:仅兼容传统8051部分(实际寻址空间是ff:0000-ff:ffff)可以使用movc方式读取数据。
-- ...
感谢兄台指点。找时间我来实践验证一下。522048489 LAOXU 发表于 2024-5-30 00:22
其次,642页应改为:仅兼容传统8051部分(实际寻址空间是ff:0000-ff:ffff)可以使用movc方式读取数据。
-- ...
有个想法,不知道stc32g12k128是否可行:
1.在4K的RAM里,某个地方(例如00:0100-00:02FF)载入一段代码;
2.使用EJMP跳转至这个这个位置(00:0100)
如果可行,那不就跟x86微机类似了?
页:
[1]
2