模块自动连续发送以下格式(ASCII):x.xx nn.n ppp.pp<CR><LF>,x.xx,nn.n,ppp.pp分别代表三个数据,波特率115200,数据位8,停止位1,无校验。STC12C5A32S2单片机接收这三个数据,请帮忙写出接收代码。或者查看以下代码接收不到数据的错误在哪里void main(void){ int_UART(); jpn = 0; buffer[0] = 0; buffer[1] = 0 ; buffer[2] = 0; display(); while(1) { if(sendtime >= 40) //每2s开串口中断并计算 { sendtime = 0; ES = 1; comput(showflag);//采集到的数据进行计算并显示 } void int_UART(void) //115200bps@11.0592MHz{ PCON |= 0x80; //0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T BRT = 0xFA; //设定独立波特率发生器重装值 AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器 AUXR |= 0x10; //启动独立波特率发生器 RI = 0; //清收发标志 TI = 0; }void interrupt_UART(void)interrupt 4 //using 0{ if(RI) { if(SBUF == recstart ) //接收开始 { recbuf[0] = SBUF; } if(recbuf[0]== recstart ) //接收开始 { recbuf[recPosi] = SBUF; recPosi++; } RI=0; if(recbuf[2]==0x2e ) { grealC = (recbuf[1]-48) + (recbuf[3]-48)*0.1+(recbuf[4]-48)*0.01; if(recbuf[6] == 0x2e) { grealT = (recbuf[5]-48)*10+(recbuf[7]-48); } else if(recbuf[7] == 0x2e) { grealT = (recbuf[5]-48)*100+(recbuf[6]-48)*10+(recbuf[8]-48); } } else if(recbuf[3]==0x2e) { grealC = (recbuf[1]-48)*10 +(recbuf[2]-48) + (recbuf[4]-48)*0.1; // grealT = (recbuf[6]-48)*100+(recbuf[7]-48)*10+(recbuf[8]-48); if(recbuf[6] == 0x2e) { grealT = (recbuf[5]-48)*10+(recbuf[7]-48); } else if(recbuf[7] == 0x2e) { grealT = (recbuf[5]-48)*10+(recbuf[6]-48)+(recbuf[8]-48)*0.1; } } } if(TI) { TI=0; } }串口调试助手采集到的模块发送数据
一组数据,共有多少字节? 20 个?根据字节数,设定一个数组。收到一个,存放一个。收到 20 个后,判断:if (recbuf[16] == 'm' && recbuf[17] == 'b' && recbuf[18] == 'a' && recbuf[19] == 'r')满足条件,就把其前面的,变换成数://recbuf[1] = '.';x = (recbuf[0] - 48) + (recbuf[2] - 48) * 0.1 + (recbuf[3] - 48) * 0.01;//recbuf[4] = ' ' //recbuf[7] = '.'n = (recbuf[5] - 48) * 10 + (recbuf[6] - 48) + (recbuf[8] - 48) * 0.1;//recbuf[9] = ' ' //recbuf[13] = '.'p = (recbuf[10] - 48) * 100 + (recbuf[11] - 48) * 10 + (recbuf[12] - 48) + (recbuf[14] - 48) * 0.1 + (recbuf[15] - 48) * 0.01; 追问 还是接收不到数据呀? if(SBUF == 0x0A ) //接收开始 { recbuf[0] = SBUF; } if(recbuf[0]== 0x0A ) //接收开 { recbuf[recPosi] = SBUF; recPosi++; } 这样写接收开始对吗?还有,不一定是20个字节,最后的p会在会在997.00~1003.00之间变化