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

PIC24FJ128GA010的Proteus UART与超级终端收发仿真实现求助

PIC24FJ128GA010的Proteus UART与超级终端收发仿真实现求助

大家好,我现在想在Proteus仿真环境里实现PIC24FJ128GA010和超级终端之间的简单UART收发功能。先贴出我目前写的代码(最后一行的#d是还没输入完的内容,应该是后续的宏定义或者初始化代码),之后再说明遇到的问题:

#include <stdbool.h>    
#include <stdint.h> 
#include "xc.h"  

// Set the configuration words  
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & 0xFFFF & FWDTEN_OFF & ICS_PGx2 ) 
_CONFIG2( FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRI )  

#d

目前我还没补充具体的问题细节,不过先分享几个通用的实现和排查建议,也欢迎各位大佬帮忙指点:

  • 补全UART初始化代码:现在只有配置字,还需要对UART模块进行初始化,比如以UART1为例,下面是一个基础的初始化示例(假设使用8MHz HS晶振):
    void UART1_Init(void) {
        // 计算波特率:Fcy = 系统时钟/2 = 8MHz/2 = 4MHz,波特率9600
        U1BRG = (4000000 / (16 * 9600)) - 1; 
        U1MODEbits.UARTEN = 1; // 启用UART1模块
        U1STAbits.UTXEN = 1; // 启用发送功能
        U1STAbits.URXEN = 1; // 启用接收功能
    }
    
  • 确保时钟配置匹配:CONFIG2里选择了POSCMOD_HS高速晶振模式,在Proteus里必须给PIC挂载对应的HS晶振,并且代码里的波特率计算要和晶振频率对应,不然会出现波特率不匹配导致乱码的问题
  • Proteus终端参数要一致:Virtual Terminal的波特率、数据位(一般8位)、停止位(一般1位)、奇偶校验(一般无)必须和代码里的UART设置完全相同
  • 引脚连接要正确:PIC的UART发送引脚(比如U1TX对应RB4)要连接到终端的RX引脚,PIC的接收引脚(U1RX对应RB5)要连接到终端的TX引脚,注意交叉连接,同时别忘了给PIC接好电源和地
  • 写简单测试代码验证:可以先实现一个发送字符串的函数,上电后循环发送测试内容,验证终端是否能正常接收:
    void UART1_SendChar(char c) {
        while(U1STAbits.UTXBF); // 等待发送缓冲区为空
        U1TXREG = c;
    }
    
    void UART1_SendString(char *str) {
        while(*str != '\0') {
            UART1_SendChar(*str++);
        }
    }
    
    int main(void) {
        UART1_Init();
        while(1) {
            UART1_SendString("Hello UART! \r\n");
            // 简单延时,避免发送过快
            for(uint32_t i = 0; i < 1000000; i++);
        }
        return 0;
    }
    

如果我后续补充了具体的问题(比如终端收不到数据、显示乱码、仿真报错等)以及完整的代码,还请各位大佬帮忙进一步排查~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:33:12