uchar UART_inquire(void) { unsigned char index,ID_ASC[8],i; unsigned char CheckSum=0; if(RI == 1) //RI为接收中断标志位,1为串口中断发生 { RI=0; //清接收中断标志位 CardSnTemp[0] = SBUF; //缓冲接收到的收据,暂存第一个数据 for(i=1;i<18;i++) { CardSnTemp[i] = 0; //清缓冲区 } //卡号:0000966658@ 的组成: 6字节(卡号:)+10字节(0000966658)+1字节(@) for (index = 0; index < 17; index++) //循环查询接收TX模块发送的后面11个字节 { //打开并设定定时器2,设定定时时间为1ms,即接收每个数据的等待超时为2ms START_T0(RCAP2_2ms); while (RI == 0 && TF0 == 0); //判断接收到数据或超时 if (RI == 1) //如果是接收到数据而退出 { RI = 0; //清接收中断标志 CardSnTemp[index] = SBUF; //将接收到的数据依次保存到数据缓冲区(字符类型) } else //如果是其中的某个数据超时,直接退出 { bWarn = 1; //错误标志置一,闪烁两次LED3 STOP_T0(); return FALSE; } if(index == 16) { //接收到17个数据 for(i=0;i<12;i++) CardSn[i]=CardSnTemp[i+ 5]; //去掉“卡号:”这六个字节的中文 display2(2,0,"20230519",8); display2(3,0,"ID: ",4); display2(3,5,CardSn,11); //将提取出来的10位十进制卡号 及@,显示在液晶屏上 UartTX_Send_String(CardSn,11);//把卡号通过串口打印出来 bPass=1; } } STOP_T0(); //停止定时器2 return TRUE; } return FALSE; }解释这段代码的含义
时间: 2024-03-04 18:50:18 浏览: 37
duojikongzhi.rar_Unsigned_c++include <reg51>
这段代码是一个函数,名为UART_inquire,作用是查询通过串口接收到的数据,并提取出其中的卡号信息,最终将卡号显示在液晶屏上并通过串口打印出来。
代码中首先判断RI接收中断标志位是否为1,如果是则表示串口接收到了数据。接着将接收到的第一个数据暂存到一个缓冲区中,清除其他数据缓冲区中的数据。然后通过一个循环查询接收到的后面11个字节数据,每次循环设置定时器2的定时时间为2ms,等待串口接收数据,如果超时则返回FALSE,否则将接收到的数据依次保存到数据缓冲区中。当接收到第17个数据时,即卡号数据全部接收完成,将其中的卡号信息提取出来,显示在液晶屏上,并通过串口打印出来,最终返回TRUE表示数据接收成功。如果在数据接收过程中发生错误,则将错误标志bWarn置为1,闪烁LED3两次,并返回FALSE表示数据接收失败。
阅读全文