打印

AVR模拟模拟串口如何设置波特率(急)

[复制链接]
6326|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雅士侬家|  楼主 | 2010-8-30 16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 雅士侬家 于 2010-8-30 16:53 编辑

请教一下,我要做一个波特率在460800下的模拟串口程序。
发送用PD3角,接受用INT0中断的方式接收,晶体振频率为12MHZ
请教一下,我发送一个0x55时,大概要多长的时间?怎么算的?谢谢

相关帖子

沙发
mohanwei| | 2010-8-30 17:01 | 只看该作者
速度能跟上么……

使用特权

评论回复
板凳
雅士侬家|  楼主 | 2010-8-30 17:06 | 只看该作者
可以跟上呀,我用示波器抓了一下,发送2个Byte用的时间是25us。可是怎么测接收就不懂了,因为找不到那么高波特率的串口调试助手

使用特权

评论回复
地板
mohanwei| | 2010-8-30 17:09 | 只看该作者
460800bps,1bit约1s/460800=2.17us
按1位起始位,8位数据位,1位停止位来算的话,传输一个字节约10bit*1s/460800=21.7us
用汇编来编的话,好像可以实现,但是晶振可能需要合理选一个,才能减小波特率误差。

使用特权

评论回复
5
mohanwei| | 2010-8-30 17:12 | 只看该作者
串口助手不是问题,但是你可能需要买一根USB转串口线,或者用PC串口卡才能达到这么高的速度,台式机自带标准串口最高才115200

使用特权

评论回复
6
ayb_ice| | 2010-8-30 17:25 | 只看该作者
本帖最后由 ayb_ice 于 2010-8-30 17:27 编辑

速度不够
10位才21.7us,一位才2.17US,随便产生一个指令的误差可能就挂了,接收时中断延时就可能挂了

使用特权

评论回复
7
雅士侬家|  楼主 | 2010-8-30 17:27 | 只看该作者
台式机是只能接受最高才115200,不过我手上刚好有转USB接口的板子。就是怎么给它发送数据是问题,没有那么高的调试助手

使用特权

评论回复
8
雅士侬家|  楼主 | 2010-8-30 17:30 | 只看该作者
另:更正上面的的 ,是用示波器抓到发送1个Byte的时间是25us

使用特权

评论回复
9
acute1110| | 2010-8-30 18:31 | 只看该作者
为了解决你接受调试的问题,可以用一片CPLD 自己写一个,串转并得逻辑,其实网上也有很多,这样可以解决调试的问题。一般的串口调试工具的确不会这么高速,主要是主板上的串口转换芯片业不支持。我以前用cpld来调试,很方便的,时间太久了,cpld的代码我也找不到了,不过网上很多相似的。

使用特权

评论回复
10
chunyang| | 2010-8-30 20:21 | 只看该作者
这么高速度12M运行频率搞不定,而且中断响应有延时,相关指令周期和中断延时要小于最小周期的一半以上才可以实现。

使用特权

评论回复
11
QuakeGod| | 2010-8-31 02:07 | 只看该作者
根据偶的经验, 24M晶振的经典51,模拟串口最多能做到9600bps,占用CPU时间大概50%多,
24M晶振1T的51,做到38400bps模拟串口没有问题,估计最快也就57600bps,到不了115200bps.
实际上AVR和51的串口,波特率是可以很随意设置的,硬件串口也可以超过115200bps,
软件模拟太耗CPU时间。

使用特权

评论回复
12
sszxxm| | 2010-8-31 08:13 | 只看该作者
软件UART试验程序,11.0592MHz时钟频率,实际测试在标准的
12T模式下,最高可实现9600bps连续收发无误码,6T下19200bps,到极限了。做的是不停收发测试。无丢失码。

软件模拟是不得已而为之,太占用资源了

使用特权

评论回复
13
雅士侬家|  楼主 | 2010-8-31 08:26 | 只看该作者
谢谢各位大侠,忘了说我用的是mega168pa,晶振是12M的。
另外想问一下4楼,您的算法没有把晶振的时间算进去,好像不对吧

使用特权

评论回复
14
mohanwei| | 2010-8-31 09:21 | 只看该作者
可以用这个通信调试助手,支持USB转串口线的常用高速波特率25600,230400,460800
和921600
通信调试助手V1.0.14.rar (52.69 KB)

使用特权

评论回复
15
mohanwei| | 2010-8-31 09:25 | 只看该作者
波特率描述的是串行通信传输1秒钟能传输多少bit数据,和晶振没有什么直接关系。但是你用软件模拟的方式,靠指令来延时,就要关心晶振了。

使用特权

评论回复
16
雅士侬家|  楼主 | 2010-8-31 09:36 | 只看该作者
谢谢14楼的调试助手,太全面了

使用特权

评论回复
17
hxcic| | 2010-8-31 11:17 | 只看该作者
:handshakethanks..

使用特权

评论回复
18
lumin5569| | 2010-8-31 13:47 | 只看该作者
指导啊的啊大 学习 1# 雅士侬家

使用特权

评论回复
19
xyguoking| | 2010-12-13 22:16 | 只看该作者
如何做到115200啊

使用特权

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

本版积分规则

0

主题

15

帖子

0

粉丝