打印

一种无晶振单片机RS232通信思路,不知可行否

[复制链接]
2651|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsl.|  楼主 | 2009-2-28 22:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
缘由: 有一单片机,内置RC振荡,指令周期2~3us.
      单片机需要通过R232向PC端发送数据,
      但RC振荡精度差(+/-10%),不能用于R232的通信的定时器. 

思路: PC 端 TX 信号(经过max232)连接到 MCU 的外部中断口INT0.
      PC 定时(每隔4ms)向发送 0xAA(10101010),MCU利用此脉冲中断信号做为基准,同时向外发送比特流. 实现MCU到PC的单向通信.

不知道可行否?  

相关帖子

沙发
gw29| | 2009-2-28 23:33 | 只看该作者

re

不行

使用特权

评论回复
板凳
xsl.|  楼主 | 2009-2-28 23:42 | 只看该作者

re

为啥?

经计算,2400波特率,每bit 416.7us

1, 3%的误差相当于 416.7*3%= 12.5us  ,单片机指令2us, 在这个误差之内.
2, 而且,利用脉冲触发中断, 发送完 一个字节的数据之后 误差不会累积.

这两天看看有没有空,试试看

使用特权

评论回复
地板
李冬发| | 2009-3-1 00:35 | 只看该作者

用不着每4ms发一次0xaa吧

在收到不到合法的数据包时,测串行数据脉宽就可以了。多测几个,值应该在某值的附近或其倍数的附近。否则继续测,一直到有几个合理值后就可以计算出自己的时钟值。再重设波特率参数。

使用特权

评论回复
5
quakegod| | 2009-3-1 03:23 | 只看该作者

嗯,你看那个STC单片机的串行下载

单片机刚上电的时候,对收到的数据包进行分析,
就能知道自己的时钟频率是多少了
然后以这个时钟频率为基础,设置波特率参数。

使用特权

评论回复
6
bg6nw| | 2009-3-1 06:24 | 只看该作者

记得匠人的BLOG里面

有一个自适应波特率的例子,可以参考一下

使用特权

评论回复
7
xsl.|  楼主 | 2009-3-1 10:05 | 只看该作者

好!大好! 借一下乘虚匠人的经验!

使用特权

评论回复
8
xsl.|  楼主 | 2009-3-1 10:26 | 只看该作者

匠人那里说的是自动检测标准的波特率,不合用

假设PC使用2400的波特率.
MCU用IO模拟,且用内置的1M RC 振荡做为时钟.

问题是如何纠正由于 RC振荡误差 引起的波特率的误差. 像4 5 楼提到的那样.

使用特权

评论回复
9
ayb_ice| | 2009-3-1 11:52 | 只看该作者

降低波特率

使用特权

评论回复
10
chunyang| | 2009-3-1 20:54 | 只看该作者

能否修正还要看MCU是否支持高分辨的波特率发生器

    比如普通51的12分频就很难修正,不分频的话,修正率就会高出12倍。至于方法问题,就是根据PC发出的定周期信号用定时器测量,然后做常数修正即可,很简单的。

使用特权

评论回复
11
xsl.|  楼主 | 2009-3-1 22:51 | 只看该作者

MCU没有波特率发生器,只能用IO模拟

RTC也只有 最高1/128s的中断速率.

效仿SPI的,用PC端TXD信号做为时钟,MCU根据TXD"时钟信号",每隔周期发送一个位数据.  这样就不需要做"校正"RC

使用特权

评论回复
12
wh6ic| | 2009-3-2 11:55 | 只看该作者

没必要4mS重发一次

上电热稳定后RC振荡器的输出只于电源电压有关,可以认为是不变的,握手成功后就基本上不用测了。当然前端经常上下电还是需要超时后发出握手字节。

使用特权

评论回复
13
cooperate| | 2009-3-2 20:56 | 只看该作者

有点困难

    MCU才0.4-05MIPS,RC误差最大已10%,做1200bps下勉强可行,速度再高的话估计软件很难做。当然具体要看你用的是什么mcu了。
   从性能看,LZ的MCU应该是低端的台湾mcu,要做好,恐怕要多费点脑汁了,呵呵

使用特权

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

本版积分规则

3

主题

86

帖子

0

粉丝