单片机通信

2024-12-18 11:16:35
推荐回答(4个)
回答1:

看来你是下了功夫学了,提了不少问题,不像有些人一来就是跪求什么什么程序什么什么的。
第一个问题,我们常用的通讯一般是串口,常用的串口通讯有三种,一种是TTL,一种是232,一种是485,这三个是用得最多的,其他的通讯五花八门,基本那些大公司,像飞利浦,三菱什么的,都有自己的一套,而且还是不透明的,使用他们的还得交钱。TTL和232是电平编码,TTL的1就是5V,0就是0V,而232电平1是负电压,0是正电压,具体是多少V要看看了,我也记不住,485是差分编码,具体你看看书了,这里有点说不清楚。串口上每次只能发送一位数据,一个字节有八位,一般发送还有起始位和结束位,你还可以选择校验位,我们只要把数据一位一位的送到总线上就可以了,一位的数据要在总线上保持多长时间,这个就是波特率控制了。接收方按相同的波特率,就可以收到相同数据了。这个就是一帧数据了。
第二个问题,所有数据,在计算机中的保存形式都是二进制码,8个二进制码就是一个字节,表示范围0到255.这些数据,是什么意思,你可以去规定,如果是十进制,那么就不会出现A到F的字母,如果是十六进制,那么就可以任意数,如果是ASC码,那么就会查ASC表得出对应字符,所有你不要去纠结数据表示形式,你是可以规定他的。你想他是什么就是什么。也就是说,如果你发个00出去,若果你设置成十六进制,那么他就代表0,如果设置成ASC,那么发出的数据就是0x30.0x30.接收的程序也要对应约定。同理,你发送\n,想换行,那么你只能发送十六进制的0x0a,如果你当ASC码发送,他会给你拆成\和n发送,发送的他们的内码。
第三个问,串口助手是基于硬件上的,他显示的接收到的每一帧数据,就是你发什么,他就显示什么。当然,是十六进制还是ASC码你得选择,如果发的是十六进制你用ASC接收,那就是乱码了,如果发的ASC码,ASC码一般都是一定有意义的字符串,你如果用十六进制接收,那就会看得云里雾里的。
第四个问题,通讯协议,通讯协议就是一系列的约定,比如约定,ASC的‘@’是一个数据包的头,以0X0D,结尾,中间全部为ASC数据,那当接收房收到@就认为我得开始接收接下的数据,如果接收到0X0D,就认为我成功接收了一个数据包。一个完整的数据包应该包括帧头,起始地址,目的地址,关键字(也叫命令),包长度,检验,数据,帧尾,有的通讯时间长,包延时大,还会插入发送时间,这样,我们就这个了一个包是谁发的,发给谁的,这个包有没有错误、变形,发这个包是拿来做什么的,怎么做,那么就完成了一个包的数据,当收到包后,接收方还应该发出一个应答的包,告诉对方接收情况。实际使用中,通讯协议更复杂。

回答2:

单片机和PC通信可以靠串口(UART)通信,可以设置起始位,数据位,校验位,停止位,你看看单片机的串口那一部分就明白了,你需要好好看看串口通信协议。

回答3:

单片机串口通信,每次就是传送一个字节,也就是8位二进制数字。
这就是最基本的知识。
楼主想要传输:\n,还是其它什么东西,都把它们当成8位二进制数字,就行了。
这也是最简单的知识。简单的,都不能再简单了。
仅仅有个通信格式,需要设置一下。
根本不涉及:ASCII码、协议、包、帧、乱码.....。

回答4:

一楼说的很完整