打印

帮忙算一下,这个程序波特率

[复制链接]
2352|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
beyondabcd|  楼主 | 2008-3-19 19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ORL PCON,#80H
MOV SCON,#60H
MOV TL1,#FFH
MOV TH1,#FFH
MOV TMOD,#21H
SETB TR1
SETB REN

晶振为33M,他们说这个程序波特率为57.6K,可我算的也不是这个数呀,大家帮帮忙看看波特率是多少?在帮忙把公式写上。

相关帖子

沙发
后学| | 2008-3-20 08:19 | 只看该作者

不是有示波器么。。。

使用特权

评论回复
板凳
xwj| | 2008-3-20 08:22 | 只看该作者

什么MCU?指令周期数?

波特率明显不是57.6K,
计算方法自己不会去看书吗???

使用特权

评论回复
地板
5880527| | 2008-3-20 09:34 | 只看该作者

串行通讯建议去下一个串口调试软件

否则两边都黑灯瞎火的看不见,有了那软件几乎不用计算波特率了

使用特权

评论回复
5
孤星119| | 2008-3-20 09:44 | 只看该作者

xwj :呵呵,具体我懒得算,不过用软件算是正好57.6K

使用特权

评论回复
6
xwj| | 2008-3-20 09:54 | 只看该作者

切,你自己看下他的重载值.

使用特权

评论回复
7
孤星119| | 2008-3-20 10:03 | 只看该作者

错了.忘把SOMD算上了

使用特权

评论回复
8
孤星119| | 2008-3-20 10:06 | 只看该作者

xwj:赋FF不行么?能说一下么?

使用特权

评论回复
9
xwj| | 2008-3-20 10:10 | 只看该作者

唉,你自己不会去算吗?

别找我了,懒得理你...

使用特权

评论回复
10
孤星119| | 2008-3-20 10:37 | 只看该作者

呵呵,让LS生气了.

当时认为SMOD为0了.当波特率为57.6K时算出来.应设重复值为254.5约为FF了.

使用特权

评论回复
11
computer00| | 2008-3-20 11:08 | 只看该作者

直接给你个代码...

#define Fclk      22118400UL         /*使用22.1184M晶体*/


//使用T2做波特率发生器可以获得更多的波特率设置。
//删除本行将使用T1作为波特率发生器,最低波特率为300bps,最高为115200bps。
#define USE_T2

/********************************************************************
函数功能:设置串口波特率。
入口参数:波特率。
返    回:实际设定的波特率。
备    注:无。
********************************************************************/
uint32 SetUartBitRate(uint32 BitRate)

 EA=0;
#ifdef USE_T2
 if(BitRate<=230400)
 {
  RCAP2L=0x10000-(Fclk/(BitRate*32));
  RCAP2H=(0x10000-(Fclk/(BitRate*32)))>>8;
 }
 BitRate=(Fclk/32)/(0x10000-((((uint32)RCAP2H)<<8)+RCAP2L));
#else
 if(BitRate<225)
 {
  BitRate=225;
  PCON&=~0x80;  //波特率不加倍
  TH1=256-Fclk/(BitRate*12*16*2);
  TL1=256-Fclk/(BitRate*12*16*2);
  BitRate=(Fclk/12/32)/(0x100-((uint32)TH1));
 }
 else if(BitRate<1200)
 {
  PCON&=~0x80;  //波特率不加倍
  TH1=256-Fclk/(BitRate*12*16*2);
  TL1=256-Fclk/(BitRate*12*16*2);
  BitRate=(Fclk/12/32)/(0x100-((uint32)TH1));
 }
 else if(BitRate<=115200)
 {
  PCON|=0x80;  //波特率加倍
  TH1=256-Fclk/(BitRate*12*16);
  TL1=256-Fclk/(BitRate*12*16);
  BitRate=(Fclk/12/16)/(0x100-((uint32)TH1));
 }
 else
 {
  BitRate=115200;
  PCON|=0x80;  //波特率加倍
  TH1=256-Fclk/(BitRate*12*16);
  TL1=256-Fclk/(BitRate*12*16);
  BitRate=(Fclk/12/16)/(0x100-((uint32)TH1));
 }
#endif
 EA=1;
 return BitRate;
}
////////////////////////End of function//////////////////////////////


/********************************************************************
函数功能:串口初始化。
入口参数:无。
返    回:无。
备    注:无。
********************************************************************/
void InitUART(void)
{
 EA=0;
 
#ifndef USE_T2
 TMOD&=0x0F;
 TMOD|=0x20;    //定时器1工作在模式2
 TCON=0x05;
#endif

 SCON=0x50;       //串口工作在模式1
 
 SetUartBitRate(9600);  //波特率初始化为9600

#ifdef USE_T2
 T2CON=0x34;     //使用T2作为波特率发生器
#endif

 ES=1;         //串行中断允许

#ifndef USE_T2
 TR1=1;        //启动定时器1
#endif

 REN=1;        //允许接收 
 EA=1;         //允许中断
 Sending=0;    //允许发送
}
////////////////////////End of function//////////////////////////////

使用特权

评论回复
12
gyt| | 2008-3-20 14:41 | 只看该作者

进来看看

使用特权

评论回复
13
beyondabcd|  楼主 | 2008-3-21 18:58 | 只看该作者

谢谢各位,我明白了

使用特权

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

本版积分规则

19

主题

52

帖子

1

粉丝