[PIC®/AVR®/dsPIC®产品] pic18f56k90串口调不通啊,程序有问题吗?请大神指教

[复制链接]
 楼主| 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() 的设置。
捉虫天师 发表于 2025-2-9 19:50 | 显示全部楼层
SPBRG2 = 12;  // 8MHz 下的 9600bps
捉虫天师 发表于 2025-2-9 19:50 | 显示全部楼层
RC2IE 中断使能后,未启用 TX2IE
你已经开启 RC2IE 允许接收中断,但 TX2IE(发送中断)被注释掉了。
捉虫天师 发表于 2025-2-9 19:50 | 显示全部楼层
TX2IE = 1;
捉虫天师 发表于 2025-2-9 19:51 | 显示全部楼层
  1. void SerialInti() // 初始化串口
  2. {
  3.     TRISG2 = 1;  // RG2 为 RX 输入
  4.     TRISG1 = 0;  // RG1 为 TX 输出
  5.    
  6.     TXSTA2 = 0x24;  // 设置 TXEN=1(使能发送),BRGH=1(高速模式)
  7.     RCSTA2 = 0x90;  // 使能串口,允许接收
  8.     SPBRG2 = 12;    // 8MHz 时钟下波特率 9600
  9.    
  10.     GIE = 1;   // 总中断使能
  11.     PEIE = 1;  // 允许外设中断
  12.     RC2IE = 1; // 允许串口接收中断
  13. }

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

  23. void main()
  24. {
  25.     SerialInti();
  26.     while (1);
  27. }
裤脚口感好 发表于 2025-2-22 20:05 | 显示全部楼层
如果接收数据过快,可能会导致发送缓冲区溢出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

824

主题

4298

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部