找回密码
 立即注册
查看: 123|回复: 6

STC所有型号的单片机16位寄存器都是先写高位再写低位的吗

[复制链接]
已绑定手机

284

主题

490

回帖

2566

积分

金牌会员

积分
2566
发表于 2026-8-24 16:14:39 | 显示全部楼层 |阅读模式
STC所有型号的单片机16位寄存器都是先写高位再写低位的吗
回复

使用道具 举报 送花

83

主题

8219

回帖

1万

积分

超级版主

积分
17644
发表于 2026-8-24 16:48:26 | 显示全部楼层
可以参考手册,
有要求先写高字节、再写低字节的(比如PWM占空比寄存器的写入),
会有说明,
没有要求的,则写入顺序没有要求,比如定时器的TxH与TxL的写入顺序是没有要求的,
只是习惯上我都是先写高字节,再写低字节。
回复

使用道具 举报 送花

已绑定手机

74

主题

1003

回帖

3653

积分

论坛元老

初出茅庐&无甚本事

积分
3653
发表于 2026-8-24 17:23:43 | 显示全部楼层
没有明显标注的
应该没要求
偶尔看看玩玩
回复

使用道具 举报 送花

已绑定手机

284

主题

490

回帖

2566

积分

金牌会员

积分
2566
 楼主| 发表于 2026-8-24 18:00:32 | 显示全部楼层
狂热*** 发表于 2026-8-24 17:23
没有明显标注的
应该没要求

有要求,我都看到了,我问的目的是是不是所有的寄存器都能先写高再写低,保持一致

点评

STC所有型号单片机里,关于16位的寄存器的写入和读取,哪些要求先高字节再低字节,哪些要求先低字节再高字节?请列出一个对比清单 AI 我现在已经收集到了足够的信息来回答这个问题。根据手册中明确的说明,我总结  详情 回复 发表于 2026-8-25 08:30
回复

使用道具 举报 送花

已绑定手机

10

主题

409

回帖

1119

积分

金牌会员

积分
1119
发表于 2026-8-24 19:46:47 | 显示全部楼层
梁*** 发表于 2026-8-24 16:48
可以参考手册,有要求先写高字节、再写低字节的(比如PWM占空比寄存器的写入),会有说明,没有要求的,则 ...

以前没有想过这个问题,学习了。
回复

使用道具 举报 送花

47

主题

591

回帖

5315

积分

荣誉版主

积分
5315
发表于 2026-8-25 08:30:14 | 显示全部楼层
QQ6243*** 发表于 2026-8-24 18:00
有要求,我都看到了,我问的目的是是不是所有的寄存器都能先写高再写低,保持一致 ...


STC所有型号单片机里,关于16位的寄存器的写入和读取,哪些要求先高字节再低字节,哪些要求先低字节再高字节?请列出一个对比清单


AI
我现在已经收集到了足够的信息来回答这个问题。根据手册中明确的说明,我总结如下:
关键发现:
  • STC8H/STC32G/Ai8H 的16位高级PWM(PWMA/PWMB):明确要求先高字节后低字节写入。包括:
    • PWMA_ARRH → PWMA_ARRL(自动重装载寄存器):"必须先写高字节,后写低字节"
    • PWMA_PSCRH → PWMA_PSCRL(预分频器):"必须保证高字节先写入"
    • PWMA_CCRiH → PWMA_CCRiL(比较捕获寄存器):"必需先写高位字节"
    • 读计数器CNTR:"必须先读高字节"
  • STC15系列传统PCA/CCP:从示例代码中看到,CCAPnL 先写,CCAPnH 后写(先低后高)。代码注释明确:"先写CCAP0L...后写CCAP0H"
  • STC8H 10位PWM(PCA_PWMn寄存器):更新重载值时:"必须先写高两位XCCAPnH[1:0],再写低8位CCAPnH[7:0]"(先高后低)

现在我将基于这些明确信息,结合各系列手册中的具体说明,给出完整的对比清单。

STC各系列单片机16位寄存器读写顺序对比清单
以下是基于各系列手册明确说明整理的16位寄存器读写顺序要求。注意:未明确注明顺序要求的寄存器,通常按字节独立操作,建议参考手册示例程序;以下仅列出手册中明确规定了读写顺序的部分。

一、要求【先高字节、后低字节】写入的寄存器1. 16位高级PWM定时器(PWMA/PWMB)——适用于 STC8H / STC8G(部分) / STC32G / Ai8H / AI8051U
寄存器对
说明
手册依据

PWMA_ARRH → PWMA_ARRL自动重装载寄存器手册明确:"必须先写高字节,后写低字节。影子寄存器在写入高字节时被锁定,并保持到低字节写完。"
PWMB_ARRH → PWMB_ARRL同上(B组)同上
PWMA_PSCRH → PWMA_PSCRL预分频器手册明确:"由于需两次单独的写操作来写16位寄存器,因此必须保证高字节先写入。"
PWMB_PSCRH → PWMB_PSCRL同上(B组)同上
PWMA_CCR1H → PWMA_CCR1L 等比较/捕获寄存器(CCR1~CCR4)手册明确:"必需先写高位字节(MS)。在写高位字节(MS)时,影子寄存器的更新被禁止直到低位字节(LS)的写操作完成。"
PWMB_CCR5H → PWMB_CCR5L 等同上(B组,CCR5~CCR8)同上
读取顺序要求(16位高级PWM):
  • 读计数器 PWMA_CNTRH → PWMA_CNTRL:手册明确"读计数器的操作带有8位的缓存。用户必须先读定时器的高字节,在用户读了高字节后,低字节将被自动缓存"。即必须先读高字节。
2. STC8H/Ai8H 的10位 PWM(PCA_PWMn寄存器更新)——适用于 STC8H / Ai8H
操作
说明

更新10位PWM重载值手册明确:"在更新10位PWM的重载值时,必须先写高两位XCCAPnH[1:0],再写低8位CCAPnH[7:0]。" 即先高后低
二、要求【先低字节、后高字节】写入的寄存器1. 传统PCA/CCP 的 CCAPnL → CCAPnH —— 适用于 STC15 系列
依据 《STC15系列手册》——"用CCP/PCA高速脉冲输出功能实现3路9~16位PWM的程序" 中的示例代码:
CCAP0L = (u8)CCAP0_tmp;      //将影射寄存器写入捕获寄存器,先写CCAP0LCCAP0H = (u8)(CCAP0_tmp >> 8); //后写CCAP0H📋
代码中明确注释:"先写CCAP0L,后写CCAP0H",即 先低后高。
注:STC12C5A60S2 等传统系列中,手册未在正文中明确标注读写顺序要求,但从 STC15 系列的示例代码可以看出,传统 PCA 系列采用先低后高的写入模式。

三、无明确顺序要求的16位寄存器(按字节独立操作)
以下16位寄存器在手册中没有明确强制规定读写顺序,通常两个字节可以独立读写,但建议参考官方示例程序:
寄存器
所属系列
备注

定时器0/1的 TH0/TL0、TH1/TL1所有系列传统8051内核定时器,无强制顺序
定时器2/3/4 的 T2H/T2L、T3H/T3L、T4H/T4LSTC8H/8G/8C/8A、STC15、STC32G等各手册无明确顺序规定
ADC 结果 ADC_RES / ADC_RESL各系列结果寄存器,通常直接读取,无顺序要求
IAP 地址 IAP_ADDRH / IAP_ADDRL各系列地址寄存器,先写哪个均可
掉电唤醒定时器 WKTCH / WKTCL各系列无明确顺序规定
四、总结表(简明版)
寄存器类型
系列
写入顺序
读取顺序

PWMA/PWMB 高级PWM(ARR/PSCR/CCR)STC8H、STC32G、Ai8H、AI8051U先高后低—
PWMA/PWMB 计数器 CNTRSTC8H、STC32G、Ai8H、AI8051U无强制(建议停止时写)先高后低
PCA_PWMn 10位PWM重载值更新STC8H、Ai8H先高后低—
传统PCA CCAPn(STC15系列)STC15先低后高—
传统PCA CCAPn(STC8H/8A/12系列)STC8H、STC8A、STC12C5A60S2手册未明确,参考STC15例程倾向先低后高—
定时器 TH/TL全部系列无强制顺序—
ADC_RES/ADC_RESL全部系列—无强制顺序
五、重要提示
  • **16位高级PWM(PWMA/PWMB)**是STC新一代单片机中最严格的寄存器,**必须严格遵守"先高后低"**的写入顺序,否则会导致影子寄存器锁定不正确,写入值出错。
  • 传统PCA(CCAPn)在STC15系列中示例代码明确采用先低后高,新系列(STC8H/Ai8H)的PCA_PWMn更新则要求先高后低,两者截然不同,使用时务必区分。
  • 对于未明确说明顺序的寄存器(如定时器),两个字节可独立操作,但建议关闭相关功能后再修改以避免运行中出现不一致状态。
  • 本清单仅覆盖手册中明确注明读写顺序要求的寄存器。其他寄存器若手册未特别说明,按常规操作即可。


📌 相关论坛讨论
⏱️ 查找用时 55.4s | 总回答用时 71.6s



点评

之前注意到过这个情况,并且对于传统PCA需要先低后高做过实验,通过观察,先低后高和先高后低,确实会对其它寄存器差生影响。AI助手当时的说法是“保证寄存器数据的原子更新”。 https://www.stcaimcu.com/forum.php  详情 回复 发表于 2026-8-25 08:37
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

47

主题

591

回帖

5315

积分

荣誉版主

积分
5315
发表于 2026-8-25 08:37:58 | 显示全部楼层
大*** 发表于 2026-8-25 08:30
STC所有型号单片机里,关于16位的寄存器的写入和读取,哪些要求先高字节再低字节,哪些要求先低字节再高 ...

之前注意到过这个情况,对于传统PCA要求先低后高,跟PWM相反,然后做过实验,通过观察,先低后高和先高后低,确实会对其它寄存器产生不同影响。AI助手当时的说法是“保证寄存器数据的原子更新”。
https://www.stcaimcu.com/forum.p ... id=23102&pid=213717
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-23 16:14 , Processed in 0.068722 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表