串口通信协议(急) 单片机串行口是怎么进行解码的?
串口通信协议(急)
上位机和下位机通过串口通讯协议来对接收到的数据进行处理,以数据帧的形式为例,$XXXX DDDD GGGG*CRCH CRCL, $表示开始,*表示结束,CRC为校验。只有上下位机以一定协议来对接收到的数据进行解析,才能获得有效数据。详情请参阅,里面有详细介绍。
单片机串行口是怎么进行解码的?
串口通信是直接发原始数据或指令的,最多加上启动位。结束位或校验位
所以不用解码,有错重发
收到数据时有中断,直接去buff读取就可以了
看来要讲详细一点,在UART串行通讯中,单片机把数据01000000B送到buff
,当启动发送时buff会自动把数据串行移出,即把数据的第一位送出,再送第二位。。。
经过232芯片把电平转化成模拟电平
然后到达接收方的232芯片把模拟电平转换成ttl电平
接受时把数据一位一位地移进buff
那么在接收方的buff就会受到01000000b,这是没有经过编码的数据
假如你想把数据加密就把数据变换一下,反正单片机硬件是没有编码系统的
此外,用一般的IO通信看你是实现什么协议,按照该协议来提供时序
一般来说能够模拟的串行通讯有I2C,SPI,SSP等等
再来说说并行通信
假如单片机A往P0口送01110111B,A的p0口接上单片机B的P0口,假如都能识别TTL电平,那么B的p0口上读到的数据就是01110111B
串口通讯数据解析
串口的代码基本大同小异,以你提供的接收部分来说,注册了port_datareceived事件后,当串口收到数据时就会自动触发这个事件,之后你就需要对接收到的数据进行处理,至于怎么处理,需要你先知道串口上的数据格式(比如指令是什么样的,具体哪一位或哪几位什么含义)
如何用FPGA实现串口协议解析
发送的时候简单只要将工作时钟分频到波特率就可以串花输出数据了;接收的时候麻烦点需要检测起始位,然后接收数据位和停止位,需要将工作时钟分频到N倍波特率,这样每个接收到的码元可以被采样N次,在这N次当中进行一个判决,这样可以防干扰