|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 黄继临2 于 2020-2-23 23:57 编辑
- 以下程序,通过串口助手发送一串组件,识别帧头为0XFF,接收后存入缓存,并进行判定,当判定正确返回一串数据。此时通过查询缓存数据,如果没有加入delay(100); 这个代码,数据会乱码,加入后不会乱码,百思不得其解,具体程序如下:硬件采用Proteus 8 进行模拟,不知道是不是和这个软件有关系,因疫情关系手头暂时没有实物硬件。
- <div>uchar seg_table2[24]={0x00};</div><div>void main()
- </div>{
- TMOD = 0X20;
- TH1 = 0XFD;
- TL1 = 0XFD;
- SM0 = 0;
- SM1 = 1;
- TR1 = 1;
- REN = 1;
- EA=1;
- ES=1;
- n = 0;
- BZ=1;
-
- while(1)
- {
-
- if(IN1 == 0 && i == 0) ////查询缓存
- {
- i == 1;
- for(j=0;j<25;j++)
- {
- SBUF =seg_table2[j];
- delay(5);
- if(TI==1)
- TI = 0;
-
- }
- }
- else i=0;
-
-
- if(seg_table2[0] == 0xff )//<数据正确则发送25个0x01
- {
- delay(100); //此处不加延时就会出错,时间短了也出错
- for(i=0;i<25;i++)//返回数据
- {
- SBUF = 0X01;
- delay(5);
- if(TI==1)
- TI = 0;
-
- }
- seg_table2[0] = 0x00;//对查询位清零,避免重复发送</span>
- }
-
- }
- }
- void UART_Interrupt(void) interrupt 4
- {
- if(RI==1) //
- {
- SBUF_data=SBUF;
- RI = 0;
- }
- if(SBUF_data == 0xff )
- {
- BZ=0;//接收数据标志位
- }
- if(BZ == 0)
- {
- seg_table2[n++]=SBUF_data;//缓存数据
-
- if(n > 24)//25个数据
- {
- n = 0;
- BZ=1; //
- }
- }
- }
复制代码
|
|