hanghang 发表于 2024-5-29 12:29:20

STC32g12k128技术讨论

本帖最后由 hanghang 于 2024-5-29 12:30 编辑

各位大佬,求解下面问题:
    数据手册(stc32G-20240513.pdf)中,第637页建议使用movc指令读。

但是第642页又说stc32不能用movc读

感觉前后矛盾了,有实际测试过的朋友吗?到底如何?数据手册错了?

soma 发表于 2024-5-29 14:10:52

可能637页写错了,正确的是stc32不是使用movc读取eeprom吧

zhp 发表于 2024-5-29 15:21:35

确实是数据手册笔误了

STC32G系列是80251结构体系
要使用MOV指令读取EEPROM
MOVC只能读取当前64K范围的代码区

LAOXU 发表于 2024-5-29 15:30:24

照搬 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:41:36

本帖最后由 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方式读取数据。

hanghang 发表于 2024-5-29 15:50:30

zhp 发表于 2024-5-29 15:21
确实是数据手册笔误了

STC32G系列是80251结构体系


感谢大佬

hanghang 发表于 2024-5-29 15:50:50

LAOXU 发表于 2024-5-29 15:30
照搬 51手册的后遗症, stc32 要使用 32位地址直接读取 IAP值(字或字节), 例如 : MOV   R11, @DR56,MOV    ...

感谢大佬指导

LAOXU 发表于 2024-5-30 00:22:55

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来说, 这条指令 能否使用, 有待验证.

hanghang 发表于 2024-5-30 08:29:51

LAOXU 发表于 2024-5-30 00:22
其次,642页应改为:仅兼容传统8051部分(实际寻址空间是ff:0000-ff:ffff)可以使用movc方式读取数据。

-- ...

感谢兄台指点。找时间我来实践验证一下。522048489

hanghang 发表于 2024-5-30 14:34:10

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
查看完整版本: STC32g12k128技术讨论