打印
[PIC®/AVR®/dsPIC®产品]

pic18f56k90串口调不通啊,程序有问题吗?请大神指教

[复制链接]
644|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flycamelaaa|  楼主 | 2025-2-7 21:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void SerialInti()//初始化程序(必须使用,否则无法收发)
{
        TRISG2=1;
        //PORTG=0xff;
        TRISG1=0;
        TXSTA2=0x24;
        RCSTA2=0x90;
        //BRG16=0;
        SPBRG2=51;//8M频率下
        GIE=1;
        PEIE=1;
        RC2IE=1;
        //TX2IE=1;      
}
//接收到数据就会进入中断函数
void interrupt com()
{
        if(RC2IE&&RC2IF)
        {
                TXREG2=0x31;
                while(!TRMT2);
        }
}

void main()
{
        RC_init();
        LCD_init();
        SerialInti();

        //TXREG2=0x43;//先发送一个数据,。。。。1
        //while(!TRMT2);
        displayEH;
        while(1);      
}
这里程序有错误吗?

使用特权

评论回复
沙发
捉虫天师| | 2025-2-9 19:49 | 只看该作者
串口中断函数的声明方式错误
你的 interrupt com() 函数应该使用 __interrupt 关键字,否则编译器可能无法正确识别它。

使用特权

评论回复
板凳
捉虫天师| | 2025-2-9 19:49 | 只看该作者
中断标志位 RC2IF 未清除
在中断处理函数中,接收中断标志 RC2IF 在读取数据后不会自动清除,需要手动清除,否则可能会一直进入中断。

使用特权

评论回复
地板
捉虫天师| | 2025-2-9 19:50 | 只看该作者
RC_init(); 这个函数是干什么的?
你的 main() 里调用了 RC_init();,但你没有提供这个函数的代码。如果这个函数影响串口配置,可能会干扰 SerialInti() 的设置。

使用特权

评论回复
5
捉虫天师| | 2025-2-9 19:50 | 只看该作者
SPBRG2 = 12;  // 8MHz 下的 9600bps

使用特权

评论回复
6
捉虫天师| | 2025-2-9 19:50 | 只看该作者
RC2IE 中断使能后,未启用 TX2IE
你已经开启 RC2IE 允许接收中断,但 TX2IE(发送中断)被注释掉了。

使用特权

评论回复
7
捉虫天师| | 2025-2-9 19:50 | 只看该作者
TX2IE = 1;

使用特权

评论回复
8
捉虫天师| | 2025-2-9 19:51 | 只看该作者
void SerialInti() // 初始化串口
{
    TRISG2 = 1;  // RG2 为 RX 输入
    TRISG1 = 0;  // RG1 为 TX 输出
   
    TXSTA2 = 0x24;  // 设置 TXEN=1(使能发送),BRGH=1(高速模式)
    RCSTA2 = 0x90;  // 使能串口,允许接收
    SPBRG2 = 12;    // 8MHz 时钟下波特率 9600
   
    GIE = 1;   // 总中断使能
    PEIE = 1;  // 允许外设中断
    RC2IE = 1; // 允许串口接收中断
}

void __interrupt() com()
{
    if (RC2IE && RC2IF)  // 串口接收中断
    {
        char received_data = RCREG2; // 读取数据,清除 RC2IF
        TXREG2 = received_data;      // 直接回显
        while (!TRMT2);              // 等待发送完成
    }
}

void main()
{
    SerialInti();
    while (1);
}

使用特权

评论回复
9
裤脚口感好| | 2025-2-22 20:05 | 只看该作者
如果接收数据过快,可能会导致发送缓冲区溢出。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

712

主题

3389

帖子

0

粉丝