PIC16F877A汇编代码实现UART收发故障排查求助
PIC16F877A UART通信故障:收发无数据且RCREG始终为0x00
故障背景
- 硬件:HJ-5G测试板 + PIC16F877A,4MHz振荡器
- 开发环境:MPLAB X IDE v6.20,汇编实现UART功能
- 现象:与电脑串口调试助手通信时收发均无数据,
RCREG寄存器持续为0x00 - 已排查:核对
SPBRG参数无误,简化代码后故障依旧 - 怀疑点:停止位配置不匹配
调试寄存器截图
串口助手配置截图
排查与修复建议
- 核心寄存器配置校验
- 检查
TXSTA寄存器:确保TXEN=1(发送使能)、SYNC=0(异步模式)、BRGH设置与SPBRG匹配(4MHz下,9600波特率对应BRGH=1时SPBRG=25,BRGH=0时SPBRG=129) - 检查
RCSTA寄存器:确保SPEN=1(串口使能)、CREN=1(接收使能)、RX9=0(关闭9位模式,保持8位数据+1位停止位)
- 检查
- 串口助手配置强制对齐
- 强制串口助手设置为:8位数据、1位停止位、无奇偶校验,波特率与代码中配置完全一致(PIC16F877A异步UART默认停止位为1位,开启9位模式会破坏帧格式匹配)
- 硬件链路验证
- 确认测试板UART引脚(RC6=TX、RC7=RX)与USB转TTL模块交叉连接(TX接模块RX,RX接模块TX)
- 用示波器或逻辑分析仪测量RC6发送引脚是否有电平变化,RC7接收引脚是否能捕获到串口助手发送的信号
- 最简代码验证
烧录以下最简汇编代码测试基础收发功能,排除复杂逻辑干扰:LIST P=16F877A #INCLUDE <P16F877A.INC> __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF ORG 0x00 GOTO INIT ORG 0x04 RETFIE INIT BSF STATUS,RP0 ; 切换至Bank1 MOVLW 0x19 ; 4MHz高速模式下,9600波特率对应SPBRG=25 MOVWF SPBRG BSF TXSTA,BRGH ; 启用高速波特率模式 BSF TXSTA,TXEN ; 使能UART发送 BCF STATUS,RP0 ; 返回Bank0 BSF RCSTA,SPEN ; 启用串口外设 BSF RCSTA,CREN ; 使能UART接收 MAIN_LOOP ; 发送测试字符'A' MOVLW 'A' MOVWF TXREG WAIT_TX_DONE BTFSS TXSTA,TRMT ; 等待发送完成 GOTO WAIT_TX_DONE ; 读取接收数据 BTFSS PIR1,RCIF ; 等待接收中断标志置位 GOTO MAIN_LOOP MOVFW RCREG ; 读取RCREG,可在调试中观察该值 GOTO MAIN_LOOP END
内容的提问来源于stack exchange,提问作者kkyleyang
相关产品推荐
相关产品推荐

