导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→问题很简单,用起来很麻烦![snow]

 *第12822篇: 问题很简单,用起来很麻烦!

  
楼 主:snow 2003年5月29日11:32
 问题很简单,用起来很麻烦!
单片机用AT89C52,晶振9.8304M,串口通信方式1,按理论讲应该能够达到9600的串行通信速率,可是不论如何设置TH1和TL1及SMOD的值都无法在9600的速率下正常通信,谁能告诉我为什么?该如何正确设置?串行口工作只能在方式1。而且确信硬件及原理都没问题。
  
2楼:flybullet 2003年5月29日12:34
 换个晶振
换个晶振看看,12mhz,标称值好象是11.059mhz,我一直用,9600比特没问题,好的很.照着书上设初值就行了.
  
3楼:snow 2003年5月29日13:18
 晶振的大小是规定的,不能换成别的,只能用
晶振的大小是规定的,不能换成别的,只能用9.8304M的。是不是9.8304M的晶振根本无法达到9600的波特率?
  
4楼:APEARLIU 2003年5月29日13:31
 计算后误差太大!能说明为什么不能关晶振吗
计算后误差太大!能说明为什么不能关晶振吗?
  
5楼:seper 2003年6月5日14:45
 可以产生9600BPS的波特率,误差为零  见内--------》》》》
你们可以到下面的网站去下载一个单片机的波特率计算器,只需要在设置菜单里面将9。8304这个时钟添加进去,即可立即计算9。8304的波特率:
使用T2,初值为“0XFFE0”,计算结果误差为0
  
6楼:snow 2003年5月29日13:49
 系统的要求造成的,因为单片机还要接一个8
系统的要求造成的,因为单片机还要接一个8251,而8251的外部时钟是由单片机的晶振经过64分频提供的,硬件是别人设计好的,我只是负责在别人的原理基础上进行软件设计,而且据说有人利用这个系统实现过9600的通信,而且单片机的串口也用方式1,我实在没办法在此晶振频率下利用方式1达到9600的速率,误差太大。所以,我想肯定是我的设置有问题。能帮我想想办法达到吗?或者帮我找一个科学的依据以证明绝对无法达到?我将不胜感谢!
  
7楼:APEARLIU 2003年5月29日14:07
 对补起!请用T2做波特率发生器,时间常数
对补起!请用T2做波特率发生器,时间常数FF 9BH,看怎么样。
  
8楼:snow 2003年5月29日14:17
 用T2做波特率发生器,那么用T2的方式几
用T2做波特率发生器,那么用T2的方式几?看你提供的设置参数,应该不是定时器的自动重装载方式。先说声谢谢了!
  
9楼:APEARLIU 2003年5月29日14:28
 刚才没找到资料,现在告诉你:T2有一个专
刚才没找到资料,现在告诉你:T2有一个专门的波特率发生器工作方式。按时钟周期计数,非机器周期,!
  
10楼:APEARLIU 2003年5月29日14:24
 T2作定时器是计的是晶振的周期,非机器周
T2作定时器是计的是晶振的周期,非机器周期也
  
11楼:APEARLIU 2003年5月29日14:22
 用T2做波特率发生器,自动重装载方式,他
用T2做波特率发生器,自动重装载方式,他是16位的,请写入RCAP2H和RCAP2L。
并SETB  TR2      CLR   ET2
  
12楼:snow 2003年5月29日14:28
 非常感谢你提供的信息。我以前没用过T2,
非常感谢你提供的信息。我以前没用过T2,回去我要好好看看书上介绍的。有个不情之情,能否把用T2做波特率发生器时串口初始化的汇编语句写给我?我怕我到时写的不对。
我的要求是不是很可笑?!
  
13楼:APEARLIU 2003年5月29日14:40
 你先看看书,相信能找到正确的方法,若真的
你先看看书,相信能找到正确的方法,若真的不能,我再发汇编语句给你,祝你快乐学习!
  
14楼:snow 2003年5月29日15:53
 能不能回答我一个简单的问题:串口波特率与
能不能回答我一个简单的问题:串口波特率与定时器T1的关系是这样的吗:定时器计数溢出一次串口发送或接收到1 bit?如果不是,那是什么样的关系呢?
  
15楼:snow 2003年5月29日14:45
 你的信息对我来讲很重要!非常感谢!而且我
你的信息对我来讲很重要!非常感谢!而且我的确应该找个集中的时间系统的研究一下单片机的原理。
  
16楼:APEARLIU 2003年5月29日14:35
 晶振9.8304M,对于T1、T0,计算
晶振9.8304M,对于T1、T0,计算的时间常数为5.33333,无法写入MCU,对于T2,计的是时钟周期,当然可以,你也可以找到相关的资料。
  
17楼:snow 2003年5月29日14:42
 说实在的,我对单片机现在是入门阶段,对好
说实在的,我对单片机现在是入门阶段,对好多概念理解得都不够深刻,有种知其然而不知其所以然的困惑。而且任务催得紧,有的东西来不及仔细体会就得出结果。所以,我想请你把用T2做定时器的初始化设置语句写给我,因为我来不及查资料和仔细去理解。实在是特殊情况!惭愧!!
  
18楼:APEARLIU 2003年5月29日17:42
 ;*******************
;**********************************************************
FIRST: MOV SP,#2FH
 MOV TH1,#0FAH
 MOV TL1,#0E0H
 MOV TH0,#3CH
 MOV TL0,#0A9H
 MOV TMOD,#11H
 MOV ADDX,BTLADDH
 MOV ADDX+1,BTLADDL
 MOV T2CON,#00110000B
 MOV SCON,#01010000B
 MOV PCON,#00H
 SETB TR2
 SETB TR0
 SETB TR1
 SETB ET0
 SETB ET1
 SETB ES
 SETB PS
 CLR EA
 MOV P3,#0FFH
 MOV BTL,#02H
 LCALL WRIT_BTL  ;初始化通讯波特率
;**********************************************************
;晶振为11.0592MHz

WRIT_BTL:  ;写入波特率
 MOV A,BTL
BTL1:  
 CJNE A,#01H,BTL2
 MOV RCAP2H,#0FFH  ;2.4K
 MOV RCAP2L,#70H
 SETB TR2
 RET
BTL2:  
 CJNE A,#02H,BTL3
 MOV RCAP2H,#0FFH  ;4.8K
 MOV RCAP2L,#0B8H
 SETB TR2
 RET
BTL3:  
 CJNE A,#03H,BTL4
 MOV RCAP2H,#0FFH  ;9.6K
 MOV RCAP2L,#0DCH
 SETB TR2
 RET
BTL4:  
 CJNE A,#04H,BTL5
 MOV RCAP2H,#0FFH  ;19.2K
 MOV RCAP2L,#0EEH
 SETB TR2
 RET
BTL5:  
 CJNE A,#05H,BTL6  ;38.4K
 MOV RCAP2H,#0FFH
 MOV RCAP2L,#0F7H
 SETB TR2
 RET
BTL6:  
 CJNE A,#06H,BTL7  ;115.2K
 MOV RCAP2H,#0FEH
 MOV RCAP2L,#0FDH
 SETB TR2
 RET
BTL7:  
 MOV RCAP2H,#0FEH  ;1.2K
 MOV RCAP2L,#0E0H
 SETB TR2
 RET

  
19楼:snow 2003年5月29日18:12
 你的程序中对T0和T1都做了设置,它们是
你的程序中对T0和T1都做了设置,它们是干什么用的?
令:晶振是11.0592M,而若换成9.8304M的,该怎样设置(要求9600的波特率)?
  
20楼:APEARLIU 2003年5月29日18:21
 计算公式:波特率=T2溢出率/16

计算公式:波特率=T2溢出率/16
我的T0、T1你不必关心,请关注T2CON,PCON和日擦赔话。RCAP2H,RCAP2L就行了,我懒得去删除多余得内容

>>>>>>对该主题发表你的看法

本主题贴数42,分页: [第1页] [第2页] [第3页]


[上一篇主题]:救助!!!!!!!!!!!!!

[下一篇主题]:请大家不吝赐教!!!!!!!!!!!!!