打印

奇怪,串口通信11.0592的晶体可以,22.1184的晶体不行

[复制链接]
3859|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
江陵龙少|  楼主 | 2010-12-22 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近,针对DS89C450做了个IAP,通过串口下载程序,BAUD始终固定为9600,为了适应11.0592和22.1184的晶体,做了个握手,发现在22.1184的晶体下,串口通信始终不正常。
这2个晶体下的TH1和TL1初始值分别是FAH和FDH,这个是不会错的,在多次更改程序,换单片机和其他硬件后,我最后确定DS89C450不适合22.1184的晶体,至少是串口通信不适合。
不知道大家有没有类似经历呢?还是其他原因呢?

DATASHEET上说,DS89C450可最高工作在33M的速率下,22.1184是个很常用的晶体啊,请指教

相关帖子

沙发
coody| | 2010-12-22 20:44 | 只看该作者
不知道原因,问下LZ,这个IC多少钱了现在?

使用特权

评论回复
板凳
MIHAWK| | 2010-12-22 21:01 | 只看该作者
类似的问题我也遇到过,用ARM9配置500M串口的时钟源,发送的数据老是乱码,但是分频3或者4后(即500M/3 或 500M/4 作为串口的时钟源)就能正常发送了,求高人指点!

使用特权

评论回复
地板
江陵龙少|  楼主 | 2010-12-22 21:05 | 只看该作者
2# coody

抱歉,我也不清楚

使用特权

评论回复
5
ayb_ice| | 2010-12-23 08:36 | 只看该作者
仔细去看相关章节吧
硬件不可能出现这样的问题

使用特权

评论回复
6
acute1110| | 2010-12-23 08:56 | 只看该作者
我估计,换了晶振内部的寄存器没有设置,所以出了问题,瞎猜的啊!

使用特权

评论回复
7
5880527| | 2010-12-23 09:03 | 只看该作者
很简单的,你把TL1的值从00H往上加,每次加1,每次加1后往电脑发送一组有规律的数据,把那个TL1的数据也一起发送出来,电脑能正确接收数据时的TL1就是你要的初始值,你这个单周期的单片机一般会前后几个数都可以用,你取个中间值就是了

使用特权

评论回复
8
wxm19770109| | 2010-12-23 23:06 | 只看该作者
好像单片机只有11.0592M的精体,才可以算出是个整数的缘故吧,瞎猜的

使用特权

评论回复
9
原野之狼| | 2010-12-24 00:24 | 只看该作者
这种问题仔细看手册应该就能解决

使用特权

评论回复
10
chunyang| | 2010-12-24 00:43 | 只看该作者
注意晶振电路是否有区别,有的MCU在一定主频以上要求跨接电阻等,匹配电容的值也不同,先确认晶振频率是否正确吧。

使用特权

评论回复
11
1121| | 2010-12-24 10:18 | 只看该作者
我在8051上试过11.0592和22.1184的晶体,串口通信都可以正常用.
在DS的8051上试的.即使是11.0592,DS的51也比普通的51执行的速度快.

使用特权

评论回复
12
lhkjg| | 2010-12-24 10:53 | 只看该作者
可以

使用特权

评论回复
13
sj_dai| | 2010-12-24 11:47 | 只看该作者
1.最笨也是最简单的方法:
直接用示波器看输出的波形,让串口输出0x55,如果脉宽不是104us样子肯定是你分频出了问题。
2.没用过DS的芯片,您猜测的22.1184串口不适合串口按常理可能性不大:
没看数据手册,如果是直接对16位系统时钟进行分频(往上计数),11.0592分到9600应该是0x10000-0x480=0xFB80,22.1184分到9600应该是0x10000-0x480=0xF700,注意22.1184的数字要小

使用特权

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

本版积分规则

85

主题

279

帖子

2

粉丝