单片机发送接收的程序,如何接收单片机数据
单片机串口通信是现代电子技术中广泛应用的一种通信方式,该通信方式具有速度快、可靠性高、接线简单等优点,同时也具有体积小、功耗低等优点。本文将从单片机串口通信的原理、硬件和软件等方面进行阐述,以期让读者对单片机串口通信有更全面深入的了解,一、原理单片机串口通信主要依赖于两个部分:串行通信口和UART,串行通信口是单片机上的一组数据收发引脚,它通常由两根线组成:一个线用来发送数据,另一个线用来接收数据。
UART是一种处理串行数据的通信芯片,在许多单片机中都有自带UART模块,UART可以实现同时发送和接收串口数据,用户可以通过它来设定数据包长短、串口波特率、奇偶校验等参数,实现串口通信时的数据格式控制和数据处理。在单片机串口通信中,发送方将发送的数据按照一个固定的格式进行编码,并通过TXD引脚将数据序列逐个比特地发送到接收方。
1、单片机5字节数据接收5个字节,分别是:01(第一个字节)、温度十位(第二个字节)、温度的个位(第三个字节)、0(第四个字节)、前4个字节相加之和的低8位(第五个字节)。第一、第四字节,形式上,和第二、第三字节混淆了。这样的数据组合,程序,可不好编。最好第一个字节别用01,换成0xAA、0xCC这样的,单片机在接收的时候首先检查0xAA,如果查到了就接着接收剩下四个字节,这样编程就容易多了。
2、单片机串口如何接收肯定是乱的了!voidX()interrupt4{ucharq;floatx;for(q0;q<5;q++){shuju[q]SBUF0x30;RI0;//清空中断标志位}这段代码有问题,单片机串口一次中断只能接收一个字节,你在中断函数里做个FOR循环有几个意思?一般的做法是判断串口什么时候接收完成,例如20ms串口没有数据证明接收完成,或者我们约定一个例如回车换行为结束符,当在串口中断中先去判断是否接收完成后,置状态标志,在主循环或中断函数中再做处理。
3、单片机接收数据多一个无所谓的,在数据中增加数据头,数据尾,要想更可靠,还可以增加校验。每次接收后,验证数据头尾是否正确?正确就处理,不正确就不管它,这东西很难说,也可能是程序问题,也可能是干扰。如果你要是想搞清楚原因,那就琢磨它,但可能琢磨很久也找不到原因。对于解决不明原因问题的最好方法,就是把问题抛开,不再成为问题,你的每次多一个是如何获取的,这个每一次是什么意思,是每一次单片机复位后,还是每一次单片机上电后,还是每一次电脑发送的一串数据。