5949|4

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

定时器1做串行口波特率发生器,赋简单源程序 [复制链接]

我现用定时器1做AT89C51串行口波特率发生器实验,程序如下:
#include

#define uchar unsigned char
#define uint  unsigned int

uchar g_ucReceivedData;  /* 保存串口发来的数据 */

void Delay(uint x)
{
     while (x--);
}

/*--------定时器0  中断---------*/
void T0_interrupt() interrupt 1
{
     TH0 = 0x00;
     TL0 = 0x00;

}
/*--------定时器1  1中断---------*/
      /*
void T1_interrupt() interrupt 3
{
        TL1 = TH1 = 251;
}       */
/*--------串口  中断------------*/
void  Serial() interrupt 4
{
     g_ucReceivedData = SBUF;      /* 接收串口发来的数据 */
     if (RI)
     {
         SBUF = g_ucReceivedData;  /* 再发送刚收到的串口数据 */
         RI = TI = 0;
     }
}

void SysInit()
{
     TMOD = 0x21;     /* 定时器1 工作方式2:自动重装 */
     TL1 = TH1 = 253; /* 38400   40MHZ晶振 */
     TR1 = 1;
     
     SCON = 0xd0;     /* 串口方式3,自定义波特率 */
     PCON = 0x00;
     IE        = 0x9a;
     IP        = 0x10;

     TH0  = 0x00;
     TL0  = 0x00;
     TR0  = 1;
     
     // TF1 = 0;
     ET1 = 0;        /* 屏蔽定时器1中断函数, 只让定时器1产生溢出脉冲但不进入中断函数 */
}

void main()
{
     uchar i;
     SysInit();

     while (1)
     {
          i = i;
     }
}


    程序遇到的问题:波特率设置在19200及更慢的速度时,用串口调试工具可以看到收发数据保持相同,高于19200时数据出现不一样,比如我发送12,接收区显示是12 FF;速率调更高时会有接受不到的现象.
    我用的波特率计算公式:    256 - 40000000/384×38400 = 253.287

    请问高手是不是因为我的计算公式精度不够,误差大导致或是我接收用的算法不当所引起的呢?
    谢谢!




最新回复

应该在芯片的datasheet上有波特率的计算公式吧? 我用C8051F没有这样的问题 串口的速度可以有500K  详情 回复 发表于 2008-11-26 08:38
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
嵌入式基础里面有详细的说明呀!不能设置太高,一班是1155200 吧,没错的话,是这个数字
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
噢,我刚接触C51,我最高波特率要求是500K,
不了解嵌入式,
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
我改用AT89S52的芯片试过,它有定时器2,
用定时器2做波特率发生器时可以在大于300K波特率下工作
现在想用AT89C51做,没有定时器2,不知道定时器1能不能实现
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
应该在芯片的datasheet上有波特率的计算公式吧?

我用C8051F没有这样的问题 串口的速度可以有500K
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表