找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1266|回复: 2
收起左侧

关于单片机RC522程序中和上位机串口中断的问题

[复制链接]
ID:958976 发表于 2021-9-22 16:40 | 显示全部楼层 |阅读模式
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;
                  }
          }

回复

使用道具 举报

ID:624769 发表于 2021-9-22 19:08 | 显示全部楼层
这是判断超时的,如果上位机是发送 连续数据,那么在 j>1000 之前,RI会再次变1,就会 跳出 While(!RI)  就会在 RevBuffer[i] 里面存入新的数据,从目的上主要是,为了完整地接受上位机发过来的指令。当然,一般不会用这个写法,不过这样写也可以。
回复

使用道具 举报

ID:123289 发表于 2021-9-23 09:01 | 显示全部楼层
沙发是高手!
要点:你要知道RI何时会变1。
这个程序的缺点是,在通讯时,除了接收数据,不能做其它事,浪费严重系统资源。给人【卡顿】的感觉。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表