You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PIC16F877A汇编代码实现UART收发故障排查求助

PIC16F877A UART通信故障:收发无数据且RCREG始终为0x00

故障背景

  • 硬件:HJ-5G测试板 + PIC16F877A,4MHz振荡器
  • 开发环境:MPLAB X IDE v6.20,汇编实现UART功能
  • 现象:与电脑串口调试助手通信时收发均无数据,RCREG寄存器持续为0x00
  • 已排查:核对SPBRG参数无误,简化代码后故障依旧
  • 怀疑点:停止位配置不匹配

调试寄存器截图

调试寄存器状态

串口助手配置截图

串口调试助手配置

排查与修复建议

  1. 核心寄存器配置校验
    • 检查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位停止位)
  2. 串口助手配置强制对齐
    • 强制串口助手设置为:8位数据、1位停止位、无奇偶校验,波特率与代码中配置完全一致(PIC16F877A异步UART默认停止位为1位,开启9位模式会破坏帧格式匹配)
  3. 硬件链路验证
    • 确认测试板UART引脚(RC6=TX、RC7=RX)与USB转TTL模块交叉连接(TX接模块RX,RX接模块TX)
    • 用示波器或逻辑分析仪测量RC6发送引脚是否有电平变化,RC7接收引脚是否能捕获到串口助手发送的信号
  4. 最简代码验证
    烧录以下最简汇编代码测试基础收发功能,排除复杂逻辑干扰:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:54:56