标题: 关于单片机RC522程序中和上位机串口中断的问题 [打印本页]

作者: gw422342988    时间: 2021-9-22 16:40
标题: 关于单片机RC522程序中和上位机串口中断的问题
RI软件清0后,!RI为1,一直在while语句中循环,直到j=1001,那下面的那些语句还有什么用?
void isr_UART(void) interrupt 4 using 1
{
    unsigned char len, i;
          unsigned int j=0;
         
          if(RI)                  
          {               
                  len=SBUF;
                  RI=0;        
                  for(i=0;i<len;i++)
                  {
                          while(!RI)            
                          {
                                  j++;
                                  if(j>1000)
                                   {
                                     break;
                                   }
                          }
                          if(j<1000)
                          {
                                  RevBuffer[ i]=SBUF;
                                  RI=0;
                                  j=0;
                          }
                          else
                          {
                            break;
                          }
                  }
                  if(i==len)
                  {
                          REN=0;            
                          CmdValid=1;
                  }
          }


作者: 188610329    时间: 2021-9-22 19:08
这是判断超时的,如果上位机是发送 连续数据,那么在 j>1000 之前,RI会再次变1,就会 跳出 While(!RI)  就会在 RevBuffer[i] 里面存入新的数据,从目的上主要是,为了完整地接受上位机发过来的指令。当然,一般不会用这个写法,不过这样写也可以。
作者: yzwzfyz    时间: 2021-9-23 09:01
沙发是高手!
要点:你要知道RI何时会变1。
这个程序的缺点是,在通讯时,除了接收数据,不能做其它事,浪费严重系统资源。给人【卡顿】的感觉。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1