打印

小议一下串口通信相关概念(新家)

[复制链接]
楼主: lxl_0598
手机看帖
扫描二维码
随时随地手机跟帖
21
lxl_0598|  楼主 | 2010-2-5 10:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
串口调试助手  第一个框 是发送显示区   第二个 是接收显示区

使用特权

评论回复
22
lxl_0598|  楼主 | 2010-2-5 10:59 | 只看该作者
yewuyi发表于 2010-2-5 10:34 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
17楼: MODBUS的主要含义还是数据层面的协议,物理层可以是232,也可以是485,并没有太多的限制。

MODBUS中的TCP/IP 是应用层的 这个比较高级 不知叶大侠 可否稍微讲讲

使用特权

评论回复
23
lxl_0598|  楼主 | 2010-2-5 11:03 | 只看该作者
再来一张图
图四
发送端 8位数据 +1位奇校验
接收端 5位数据 + 1位奇校验

8(5)位数据 +奇校验,jpg.jpg (58.87 KB )

8(5)位数据 +奇校验,jpg.jpg

使用特权

评论回复
24
yewuyi| | 2010-2-5 11:06 | 只看该作者
我也只是在工业控制中用过RTU和ASCII,没有MODBUS应用在TCP/IP中的实际经验,不敢妄谈,ZLG公司好象有一个MODBUS应用在TCP/IP中介绍,你可以到它的网站上找找。

使用特权

评论回复
25
lxl_0598|  楼主 | 2010-2-5 11:10 | 只看该作者
不知道有没有 串口数据流监听工具 就是可以看到 物理层上的比特流 起始位 数据位 停止位

哪位有 还望分享一下

使用特权

评论回复
26
mohanwei| | 2010-2-5 11:15 | 只看该作者
花四五百买个数字逻辑分析仪即可

使用特权

评论回复
27
lxl_0598|  楼主 | 2010-2-5 11:17 | 只看该作者
从图片三 和图片四 可以看出
即使我们发送端选择的是 5 位数据 但实际上 是发送了8位数据(上例为0XC5)这也就是为什么图三中我们可以接收的0XC5这个数据。
所以 数据位 5/6/7/8位 是指有效数据位 也就是含用户信息的数据,就比如说MODBUS中ASCII模式里是以ASCII模式发送 因为ASCII码对应了0--127 HEX 也就是说1字节中我们只要用低7位,第八位可以不用,此刻我们可以选择7位数据位或8位数据位,当选择了8位数据时我们可以把第8位作为奇偶校验位(PIC中奇偶校验是用软件实现的)

使用特权

评论回复
28
lxl_0598|  楼主 | 2010-2-5 11:18 | 只看该作者
mohanwei发表于 2010-2-5 11:15 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
26楼: 花四五百买个数字逻辑分析仪即可


呵呵 是个办法  有没有PC上直接用软件检测的,  个人觉得是可以实现的  不知道群里有没人有兴趣DIY一个

使用特权

评论回复
29
lxl_0598|  楼主 | 2010-2-5 20:53 | 只看该作者
ls 正解

使用特权

评论回复
30
lusen21| | 2010-2-6 08:38 | 只看该作者
;P半双工相当于双方向单车道中有一车道正在维修,车可以从A开到B,也可以从B开到A,每次有且仅可以向一个方向的车行驶。
2# lxl_0598

使用特权

评论回复
31
wuwei1029| | 2010-2-6 08:58 | 只看该作者
搬个板凳听老师讲座:D

使用特权

评论回复
32
algr| | 2010-2-6 09:54 | 只看该作者
modbus规约中主站和从站是问答型交互,可以说是为485量身定做,作为以太网应用层协议当然也可以!
但是太委屈TCP/IP了吧?

使用特权

评论回复
33
lxl_0598|  楼主 | 2010-2-6 11:31 | 只看该作者
以上说的基本上是硬件上的问题,那么软件上的呢?
说说串口UART驱动 该怎么写,很多大牛 说过 采用 中断+队列的 方法实现,对于菜鸟来说可能是刚知道什么是队列,至于具体的实现方式,更是不清楚。 请哪位有经验的 进来谈一谈。

使用特权

评论回复
34
lxl_0598|  楼主 | 2010-2-6 11:32 | 只看该作者
自己先搬把凳子坐着,等着听课。

使用特权

评论回复
35
ermingpi| | 2012-1-13 20:19 | 只看该作者
受教了。分层的思想很重要。有助于理解通信协议。

使用特权

评论回复
36
刘前辈| | 2012-1-14 11:05 | 只看该作者
34#
说说串口UART驱动 该怎么写,很多大牛 说过 采用 中断+队列的 方法实现,对于菜鸟来说可能是刚知道什么是队列,至于具体的实现方式,更是不清楚。 请哪位有经验的 进来谈一谈。


书上网上都有,Keil 51现成的。
提高注意力就行:队列是环形缓冲器应用,8字节数组足够了(组成环)。


、、

使用特权

评论回复
37
刘前辈| | 2012-1-14 11:33 | 只看该作者
本帖最后由 刘前辈 于 2012-1-14 11:48 编辑

下面摘自KEIL接收程序—中断+队列:
#define  ILEN  8          /* size of serial receiving buffer      */
unsigned char  iend;                  /* receiving buffer end index     */
idata    char  inbuf[ILEN ];   


serial () interrupt 4 using 2  {     /* use registerbank 2 for interrupt      */

  if (RI)  {             /* if receiver interrupt                 */
    inbuf[iend++ & (ILEN-1)] = SBUF;      /* read  character          */
    RI = 0;              /* clear interrupt request flag          */
     }
}

注释:   inbuf[iend++ & (ILEN-1)] = SBUF;   // 所谓(环形)队列,相当于下面环形缓冲器优化:
               inbuf[ iend++ % ILEN ] = SBUF;      




//

使用特权

评论回复
38
xyz549040622| | 2012-1-16 05:00 | 只看该作者
刘前辈整整迟了一年,哈哈

使用特权

评论回复
39
储小勇_526| | 2012-1-16 08:32 | 只看该作者
:lol我是来论坛接受教育的:victory:

使用特权

评论回复
40
shichaogang| | 2012-1-16 12:58 | 只看该作者
我也是来接受教育的:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则