单片机串行口是怎么进行解码的?

来源:百度知道 编辑:UC知道 时间:2024/09/22 23:29:10
是通过采样进行解码的吗?
另外,如果用通用I/O进行解码的话一般用什么方法比较好?
我知道是直接BUFF读取就可以了,我想知道的是BUFF的值单片机是怎么知道的?是通过采样信号后得出的值在存入到BUFF这个寄存器里的吗?还有就是如果用一般I/O口通信的话用什么方法解码比较好?

串口通信是直接发原始数据或指令的,最多加上启动位。结束位或校验位
所以不用解码,有错重发
收到数据时有中断,直接去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

串行通信时一种协议,一般规定了信号的电压,每位的发送时间(就是波特率),停止位,奇偶校验等。有好几根线实现,但一般是三线制,rxd,txd,gnd,你可以参考资料。

你所说的解码,可能是发送的数据是十六进制,或者ascii,或者其他。这个是看应用需要的。

你想用普通I/O进行串口通信的话也是可以的,可以参考io模拟串口

http://blog.21ic.com/group.asp?gid=47&pid=1171

最常用 是:BCD 8421 码!
那个buffDE的值是根据 通信协议得来的!也就是说先有通讯协议,然后才有各种实物接口,
听说现在TI的人都在做协议规范和芯片,已经不再做系统了