道清 发表于 2025-7-31 10:40:07

Ai8H-20250724,ADC汇编自己修改,不知道是否写错及其他问题?


STCAD1:      ORL    0BAH,#80H             MOV    094H,#00H
             MOV    093H,#00H
             MOV    092H,#00H
             MOV    091H,#00H
             MOV    096H,#00H
             MOV    095H,#00H
             MOV    092H,#00H
             MOV    091H,#00H
             MOV    0B2H,#00H
             MOV    0B1H,#00H
             MOV    0CAH,#00H
             MOV    0C9H,#00H

             MOV    092H,#00H
             MOV    091H,#00H
             MOV   DPTR,#0FEA8H
             MOV   A,#3FH
             MOVX    @DPTR,A
             MOV    0DEH,#0FH
             MOV    0BCH,#80H

             ORL   0BCH,#40H
             NOP
             NOP
             MOV      A,0BCH
             JNB      ACC.5,$-2
             ANL   0BCH,#11011111B                                     ;?????与指令,表示把(累加器A)的数做与运算。(全1出1有0为0)

             MOV   0DEH,#00H
             MOV   A,0BDH
             MOV   B,0BEH
             RET


国芯人工智能 发表于 2025-7-31 10:43:00

STC8H-20250724 ADC汇编代码分析与建议

针对您提供的STC8H系列单片机ADC相关汇编代码,现进行专业分析并提出改进建议:

1. 代码结构问题
当前代码存在多处重复指令:
MOV 092H,#00H 和 MOV 091H,#00H 重复出现两次
部分寄存器地址(如0B2H、0B1H)未明确用途,建议添加注释说明

2. ADC配置异常
0BAH寄存器设置为#80H,可能影响ADC通道选择,建议确认是否符合数据手册要求
0FEA8H地址对应ADC控制寄存器,写入3FH可能导致配置错误,需核对ADC初始化参数

3. 时序问题
ORL 0BCH,#40H 后缺少必要的延时操作,建议添加至少2个NOP指令确保配置生效
MOV A,0BCH 指令后无状态检查,建议增加判断逻辑确保ADC已准备好

4. 建议改进方案
(1) 优化初始化流程:
MOV 0BAH,#80H       ; 设置ADC通道
MOV 094H,#00H       ; 清除结果寄存器
MOV 093H,#00H
MOV 092H,#00H
MOV 091H,#00H
MOV 096H,#00H
MOV 095H,#00H
MOV 0B2H,#00H
MOV 0B1H,#00H
MOV 0CAH,#00H
MOV 0C9H,#00H

(2) 正确配置ADC:
MOV DPTR,#0FEA8H   ; ADC控制寄存器地址
MOV A,#3FH         ; 根据需求设置ADC参数
MOVX @DPTR,A       ; 写入配置
MOV 0DEH,#0FH      ; 设置采样时间
MOV 0BCH,#80H      ; 初始化控制寄存器

(3) 增加延时和状态检查:
ORL 0BCH,#40H      ; 启动ADC转换
NOP
NOP
MOV A,0BCH         ; 读取状态寄存器
JNB ACC.7,$      ; 等待转换完成

5. 注意事项
确保ADC参考电压配置正确
检查ADC通道选择是否与实际硬件连接一致
建议在ADC转换前后添加中断处理逻辑
对关键寄存器操作建议添加注释说明功能

以上分析基于STC8H系列单片机ADC模块的规范要求,具体实现需结合实际硬件设计。建议使用官方开发工具进行代码验证,并参考数据手册中的ADC章节进行详细配置。

[本文内容由国芯人工智能辅助生成,仅供参考]

道清 发表于 2025-7-31 13:23:58

国芯人工智能 发表于 2025-7-31 10:43
STC8H-20250724 ADC汇编代码分析与建议

针对您提供的STC8H系列单片机ADC相关汇编代码,现进行专业分析并提 ...

完成,感谢{:baoquan:}

angmall 发表于 2025-8-5 13:35:37

;21.7.3 格式化 ADC 转换结果
;汇编代码
;测试工作频率为 11.0592MHz
ADC_CONTR DATA 0BCH
ADC_RES DATA   0BDH
ADC_RESL DATA0BEH
ADCCFG DATA    0DEH
P_SW2 DATA   0BAH
ADCTIM XDATA   0FEA8H
P1M1 DATA 091H
P1M0 DATA 092H
P0M1 DATA 093H
P0M0 DATA 094H
P2M1 DATA 095H
P2M0 DATA 096H
P3M1 DATA 0B1H
P3M0 DATA 0B2H
P4M1 DATA 0B3H
P4M0 DATA 0B4H
P5M1 DATA 0C9H
P5M0 DATA 0CAH
                ORG0000H
                LJMP START
                ORG0100H
START:
                MOV SP, #5FH
                ORL P_SW2,#80H ;使能访问 XFR,没有冲突不用关闭
                MOV P0M0, #00H
                MOV P0M1, #00H
                MOV P1M0, #00H
                MOV P1M1, #00H
                MOV P2M0, #00H
                MOV P2M1, #00H
                MOV P3M0, #00H
                MOV P3M1, #00H
                MOV P4M0, #00H
                MOV P4M1, #00H
                MOV P5M0, #00H
                MOV P5M1, #00H
                MOV P1M0, #00H ;设置 P1.0 为 ADC 口
                MOV P1M1, #01H
                MOV DPTR, #ADCTIM ;设置 ADC 内部时序
                MOV A,#3FH
                MOVX @DPTR,A
                MOV ADCCFG,#0FH ;设置 ADC 时钟为系统时钟/2/16
                MOV ADC_CONTR,#80H ;使能 ADC 模块
                ORL ADC_CONTR,#40H ;启动 AD 转换
                NOP
                NOP
                MOV A,ADC_CONTR ;查询 ADC 完成标志
                JNB ACC.5,$-2
                ANL ADC_CONTR,#NOT 20H ;清完成标志
                MOV ADCCFG,#00H ;设置结果左对齐
                MOV A,ADC_RES ;A 存储 ADC 的 10 位结果的高 8 位
                MOV B,ADC_RESL ;B存储 ADC 的 10 位结果的低 2 位,B为 0
                ; MOV ADCCFG,#20H ;设置结果右对齐
                ; MOV A,ADC_RES ;A存储 ADC 的 10 位结果的高 2 位,A为 0
                ; MOV B,ADC_RESL ;B 存储 ADC 的 10 位结果的低 8 位
                SJMP $
                END


BeHappy 发表于 2025-8-5 18:17:54

这个include对应系列mcu的头文件,就不用手写了
页: [1]
查看完整版本: Ai8H-20250724,ADC汇编自己修改,不知道是否写错及其他问题?