有意思,学习了! |
接受到的数据用数值用数组存起来,buf[n]= |
这个数据有头有尾的,每次接受完一包后,直接拿第5和6位就可以了,在接受完一包数后做个标记,主程序判断这个接收完成标记就处理第五和六的数,处理完成,这个标记清除,同时在产生这个标记直到处理数据完成前串口中断里面是不能接受数据的。 |
Y_G_G 发表于 2024-6-16 16:07 有道理,我的思路应该不太对,有时间找点资料学习一下,我一直都是自己瞎捉摸写的 |
在中断中只做接收,并存放在缓冲里,在主程序查找就可以 所谓第五个数据,我不确定你这个数据是什么样子的,是每次都是一样的长度还是长度都不一样的? 如果是长度都是一样的,就在接收的时候存放在数组中,直接引用就可以了 |
lxh2002 发表于 2024-6-14 15:44 这个写法是否有些啰嗦了,在中断里面运行这么长的代码,应该把判断放到while循环中去,中断里只进行接收 |
四串口与电脑收发测试程序,观方有讲解 可以去看看 |
sbufch[1] = sbufch[2]; sbufch[2] = sbufch[3]; sbufch[3] = sbufch[4]; sbufch[4] = sbufch[5]; sbufch[5] = sbufch[6]; sbufch[6] = sbufch[7]; sbufch[7] = sbufch[8]; sbufch[8] = sbufch[9]; sbufch[9] = SBUF; if(sbufch[1]==0XA0&&sbufch[2]==0X0A) //判断是否为起始头标志 { if(sbufch[3]==0X00||sbufch[3]==sbufch[0]) //判断是否为起始头标志 { COMMAND(); } } 这个是一串9个字节的接受判断,0xa0 0x0a 这2个字节是数据头,找到后执行COMMAND子程序,想怎么做都可以 |
wdgao 发表于 2024-6-14 14:58 是的,前提是把数据准确的收完,以免取错位置。从你的数据来看是30 30 30 35 ,ascii就是0005 |
接收到的数据放到缓冲数组里,要哪一位取哪一位即可。 |