发新帖我要提问
12
返回列表
打印

(急)8051的串口通信问题2

[复制链接]
楼主: blackbanana
手机看帖
扫描二维码
随时随地手机跟帖
21
blackbanana|  楼主 | 2010-8-5 10:49 | 只看该作者 回帖奖励 |倒序浏览
这些的确是最基本的东西,但你不觉得基本的也有可问之处吗 18# ouyangsue

使用特权

评论回复
22
btzhy| | 2010-8-5 13:04 | 只看该作者
回复楼上的,这是由于RS232的协议如此,一些标准化机构至今未对RS232做升级,还有就是现在单片机里面的UART收发的字节缓冲都是8bit的,mcu硬件如此,我们只好如此了。高位数的单片机其优势在这方面无能为力。

使用特权

评论回复
23
gaoshoulili| | 2010-8-5 14:01 | 只看该作者
就爱看题外的辩论

使用特权

评论回复
24
冷漠| | 2010-8-5 14:18 | 只看该作者
本帖最后由 冷漠 于 2010-8-5 14:19 编辑

回21楼:
想发任意比特变长度一帧信息?带这样HDLC规约通信控制器的单片机绝对有;最常用的Intel的80C152 ;通信功能强,可靠,中文手册资料齐全;贵呀,200¥一片。

用80C152,——8位51软硬件兼容单片机整合的通信控制器,发送/接收一帧长度可以是任意位(上限192X8比特)而不一定是8位,——例如 LZ的13位一帧长度。HDLC规约一帧信息的长度是以比特为单位的。而UART只能以一字节为单位固定一帧。

使用特权

评论回复
25
YINGZEZIGA| | 2010-8-5 14:39 | 只看该作者
RS232那个通信标准就是接收7或者8个位的数据,没有别的可选。不要瞎指挥了,16位单片机的UART口也一样,这儿的菜鸟也太菜了吧。大学怎么毕业的?

使用特权

评论回复
26
一棵小草| | 2010-8-5 15:03 | 只看该作者
呵呵,干脆创造协议吧,嘿嘿

使用特权

评论回复
27
冷漠| | 2010-8-5 16:07 | 只看该作者
本帖最后由 冷漠 于 2010-8-5 16:10 编辑

21楼说的是:最基本的也有可问之处。 好啊,再说点能够发送5位一帧的芯片:
1、能够与51系列直接接口的UART——8251,能够通过设置使得一帧为5、6、7、8位。LZ若有意想超过大学毕业水平,不妨玩玩8251;我有一堆,送你10片小意思。与89S52接口图和应用C程序一块送。
2、PC机上的串口UART(基于8250的)都可以设置5、6、7、8位一帧发送/接收。C,BASIC,VC,BC,……都有现成模块,一个调用就行啦。

当然不可能发送一个13位数据初始化芯片一次,先聚集一堆数据,然后先发高8位一组,然后重新初始化5位一帧,再发送低5位一组数据,接收方负责拼装去吧。

如此化简为繁,与众不同,谁说LZ的想法不行?创新!

使用特权

评论回复
28
mohanwei| | 2010-8-5 16:20 | 只看该作者
非要这样搞,用一个IO口来模拟Uart了,搜一下有现成的代码。改改就能用了,这么低的速率,一次收发几万bit都没问题

使用特权

评论回复
29
流行音乐| | 2010-8-5 16:31 | 只看该作者
一个人开车遇到了转弯,停下车来,上网到bbs论坛,质疑为什么路不是直的,并请求大家的帮助。

使用特权

评论回复
30
blackbanana|  楼主 | 2010-8-5 21:32 | 只看该作者
谢谢了,我也就希望眼界能开阔点,你们都是前辈,希望多指点下 24# 冷漠

使用特权

评论回复
31
blackbanana|  楼主 | 2010-8-5 21:33 | 只看该作者
不好意思,还没毕业,现在高二 25# YINGZEZIGA

使用特权

评论回复
32
blackbanana|  楼主 | 2010-8-5 21:34 | 只看该作者
不好意思,现在高二,还不望超出大学水平,希望各位大侠指点下罢了 27# 冷漠

使用特权

评论回复
33
pumafire| | 2010-8-5 22:47 | 只看该作者
新手上线,来学习!

使用特权

评论回复
34
cqy1413| | 2010-8-10 16:38 | 只看该作者
这个是涉及到帧的概念,LZ可以再看看

使用特权

评论回复
35
bzxc41408| | 2010-8-10 21:25 | 只看该作者
不管是什么单片机,最多为8个数据位,这是与硬件有关的,除非日后有所改变.只要大于8位数据,请分两次发送就OK了.

使用特权

评论回复
36
hou| | 2010-8-11 11:31 | 只看该作者
这是异步通信,双方没有同步时钟,按约定的波特率,使发送方按约定的时间发送数据,接收方在预定的时间范围内采样数据线,发送起始位的目的就是约定各自动作的起始时刻。
但是双方的时钟不完全同步,经过若干位之后,就导致某一方没有按照约定的时刻动作(超前了或滞后了),导致数据传输错误。所以异步通信多数要求帧的长度有个上限,无限长的数据帧没有推广的价值。

一次通信中各帧的长度如果不同,可能会出问题,例如相邻两帧的长度不同而前一帧丢失,就会把后一帧当做前一帧接收,结果这一帧就会在帧边界的判断上出错。

还应该防止出现下面情况:协议规定多帧通信,发送结束后接收方应返回一个应答帧,结果由于某种原因,发送的某一帧丢失了,接收方还在等待,而发送方以为已经发送完了而再等待应答帧,就会陷入死锁。

使用特权

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

本版积分规则