午夜粪车 发表于 2023-4-2 17:49

pic18F66k22串口中断的问题

我的串口2使用了高优先级中断,单片机连接 了串口屏。串口屏第一步设置一个数据时,后第二步马上切换到另一画面。这时单片机串口2会不进入中断。

午夜粪车 发表于 2023-4-2 18:22

void high_priority interrupt my_isr(void){
          if(PIR3bits.RC2IF &&PIE3bits.RC2IE)
      {
      rdata = RCREG2;      
      if(Rx_en && RxCounter1 < USART1_R_LEN)
      {
            Usart1_rbuff = rdata;
            if(RxCounter1>=USART1_R_LEN)
                Usart1_r_finish = 1;
            Comdelay = 2;//20ms?????????????????
      }
      }
}

午夜粪车 发表于 2023-4-2 18:22

其中Comdelay 在定时中 累减。定时器10ms进入一次,20ms后如果Comdelay 为零。就认为一帧数据结束。然后Rx_en =0;关串口中断,终止接受新数据。并处理数据处理完后,打开串口中断并Rx_en =1;RxCounter1 = 0;

午夜粪车 发表于 2023-4-2 18:28

问题已经定位到 是 接受溢出导致。但是不知道为什么会溢出。
接受数组我定义的是100个字节。
#define USART1_R_LEN                100
u8 Usart1_rbuff; //
我的串口屏每次操作顶多发给单片机15字节。我把数组改成200字节。照样溢出。

systemchip 发表于 2023-4-3 10:07

因为硬件只有两级FIFO......

午夜粪车 发表于 2023-4-6 18:58

不是的
页: [1]
查看完整版本: pic18F66k22串口中断的问题