找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1397|回复: 13
收起左侧

通信疑问 通信时基于软件来协定传输模式的对吧?那么串行的话每次传输一帧数据

  [复制链接]
ID:1047240 发表于 2023-2-12 18:38 | 显示全部楼层 |阅读模式
50黑币
过完年了我来重启学习哈哈哈问个问题。
通信时基于软件来协定传输模式的对吧?那么串行的话每次传输一帧数据,可是软件应该怎么写?我记得软件对输入的监视都是以字符为单位的。


可以一帧数据里包含了起始结束等数,其中就比如起始位只有1bit软件怎么监视它?

回复

使用道具 举报

ID:596109 发表于 2023-2-13 08:58 | 显示全部楼层
很多的单片机都有自带的外设,这些底层的通讯协议外设自己就能解读,初始化的时候设置一下就行了,实在想知道怎么实现的话找个51的串口教程学习一下就行了
回复

使用道具 举报

ID:236035 发表于 2023-2-13 09:40 | 显示全部楼层
收到起始位就认为是报文头了。所以协议要严谨。
回复

使用道具 举报

ID:94031 发表于 2023-2-13 10:24 | 显示全部楼层
通信双方要有协议,比如一帧几个字节,起始字节是什么,结束字节是什么,中间字节含义是什么,接收方用串口中断接收。
回复

使用道具 举报

ID:646520 发表于 2023-2-13 12:53 | 显示全部楼层
单片机底层串口协议保证一个字节接收无误以bit为单位,你自己定义的通信协议在底层串口协议基础上以字节为单位,这样你就可以自己定义接收符,结束符和数据了。
回复

使用道具 举报

ID:384109 发表于 2023-2-13 14:50 | 显示全部楼层
协议是包含软件和硬件的,并不是单一的
回复

使用道具 举报

ID:130230 发表于 2023-2-13 17:48 | 显示全部楼层
构造一个通信帧就可以了有头有尾有校验
回复

使用道具 举报

ID:1047240 发表于 2023-2-14 03:50 | 显示全部楼层
xuyaqi 发表于 2023-2-13 10:24
通信双方要有协议,比如一帧几个字节,起始字节是什么,结束字节是什么,中间字节含义是什么,接收方用串口 ...

起始字节吗?我看书上说的他给个图就是下沿起始,所以这个下沿不是1bit吗,并不是一个字节8nit啊。
而我学过的编程命令里只有一个监视键盘的指令,这个指令监视的是一个键盘至少1字节的信号。

而书上画的是下沿不就等于1bit吗所以我就不明白了,1bit不能代表任何字该怎么编程?

比如说I/O口P11<1则进行某些指令,这个1不是8位的字节吗?下沿只有1bit不能分辨啊。还是1就是1bit的1?

看来我是没清楚I/O口的设计吧,我找找资料看看。
回复

使用道具 举报

ID:587810 发表于 2023-2-17 13:56 | 显示全部楼层
重点是检测总线一帧数据的时间间隔,从而记录数据起始位和结束位。
回复

使用道具 举报

ID:94031 发表于 2023-2-18 20:00 | 显示全部楼层
正在学习51 发表于 2023-2-14 03:50
起始字节吗?我看书上说的他给个图就是下沿起始,所以这个下沿不是1bit吗,并不是一个字节8nit啊。
而我 ...

书上说的下沿起始,这是单片机硬件要解决的问题,你只需要把单片机收到的一个字节(8位)能处理就行,硬件的事不用你管。
回复

使用道具 举报

ID:353115 发表于 2023-2-18 20:52 | 显示全部楼层
1、串口和字节。串口自身规定了波特率F,在收到1个下降沿,串口硬件会不断在1/F的时间内采样,若被理解成0,则认为是起始信号,然后以这样的规律不断采集中断传输的数据。并去掉起始信号和结束信号,将中间的数据以字节呈现在数据寄存器中。大概了解一下就行了。
2、若要监控一帧。可以在每次接收一个字节之后(请把它们存在数组中,并标记接收数量)都启动定时器T,T的内容是5ms后将帧接收完成标志位置1。这样每接收1个字节就刷新这个定时器,直到总线空闲了,你将会得到一帧内容。
回复

使用道具 举报

ID:401564 发表于 2023-2-18 21:03 | 显示全部楼层
现在看来
我几个月前的回答,还是对
搞了那么久,连位和下降沿都没分清
回复

使用道具 举报

ID:213173 发表于 2023-2-19 10:31 | 显示全部楼层
正在学习51 发表于 2023-2-14 03:50
起始字节吗?我看书上说的他给个图就是下沿起始,所以这个下沿不是1bit吗,并不是一个字节8nit啊。
而我 ...

MCU通讯是基于两个基本的物理量——电平与时间。电平的高低随时间变化就是脉冲,对脉冲的高低及脉宽识别就能实现最基本的通讯需求。在此基础上发展出复杂的通讯技术,在特定时间的电平状态为1bit,8 bit 为一个字节,若干字节组成一帧数据。为了保证正确通讯,发送端与接收端必须对通讯信号含义做统一规定,这个规定就是通讯协议。通讯双方呼叫起始可以是一个高电平或低电平,也可以是一个上升沿或下降沿,也可以是特定宽度的脉冲,也可以是特定的脉冲串。书上画的上升沿或下沿不等于1bit,只是一个电平变化状态。只有对上升沿或下沿赋予1bit数据含义才能说等于1bit。说的有点啰嗦,也不一定准确,姑妄听之。
回复

使用道具 举报

ID:1063483 发表于 2023-2-21 09:44 | 显示全部楼层
上位机要接收完整的以字节 BYTE 为单位数据,然后再去取某一位 bit 的值进行判断。麻烦的是电脑一般32位,甚至64位了,要考虑单片机是多少位机,比如:8位的单片机,就要用联合体或者结构体把 4 byte 的数据弄成32位的双字 doubleword 给电脑,收到以后,再取含有起始位的字节里找到并判断,比如:0xffff,肯定起始位就是1,0x0000,起始位就是0,当然,其它比如:0xff8f  这种类型的话,这里面还有大端小端数据的分别,否则就容易取错了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表