打印

那位兄弟对AT89C51RD2的寄存器熟悉

[复制链接]
1982|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuandaoxy|  楼主 | 2007-11-27 12:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有ATMEL的两个串口例程,要转到STC的实验板上晶振18.432
而例程是11.0592,,波特率改成9600,我对寄存器不太熟悉

那位兄弟能改一下,函数的功能是串口把接收到的字符再发回去

DEMO1:

include "reg_c51.h"

char uart_data;

void main (void) 
{
   SCON = 0x50; /* uart in mode 1 (8 bit), REN=1 */
   BDRCON &=0xEC;               /* BRR=0; SRC=0; */
   BDRCON |=0x0C;               /* TBCK=1;RBCK=1; SPD=0 */
   BRL=0xFD;                    /* 9600 Bds at 11.059MHz */
     ES = 1;                              /* Enable serial interrupt    */
    EA = 1;                             /* Enable global interrupt */
   BDRCON |=0x10;               /* Baud rate generator run*/

   while(1);                    /* endless */
}        

void serial_IT(void) interrupt 4 
{

    if (RI == 1) 
    {        /* if reception occur */
      RI = 0;   /* clear reception flag for next reception */
      uart_data = SBUF;          /* Read receive data */
      SBUF = uart_data;    /* Send back same data on uart*/
    }
    else TI = 0;                  /* if emission occur */
      /* clear emission flag for next emission*/        
}


//////////////////////////////////////////////////////////////////////


DEMO2:

#include "reg_c51.h"

char uart_data;

/void main (void) 
{
    SCON = 0x50;    /*uart in mode 1 (8 bit), REN=1 */
   T2CON &= 0xF0;               /* EXEN2=0; TR2=0;C/T2#=0;CP/RL2#=0;*/
   T2CON |= 0x30;               /* RCLK = 1; TCLK=1; */
   TH2=0xFF;                    /* init value */
   TL2=0xFD;                    /* init value */
   RCAP2H=0xFF;             /* reload value, 115200 Bds at11.059MHz */
   RCAP2L=0xFD;            /* reload value, 115200 Bds at 11.059MHz */
    ES = 1;                              /* Enable serial interrupt */
    EA = 1;                             /* Enable global interrupt */
   TR2 = 1;                     /* Timer 2 run */

   while(1);                    /* endless */
}        

void serial_IT(void) interrupt 4 
{

    if (RI == 1) 
    {                                 /* if reception occur */
      RI = 0;                        /* clear reception flag for next reception */
      uart_data = SBUF;          /* Read receive data */
      SBUF = uart_data;             /* Send back same data on uart*/
    }
    else TI = 0;                   /* if emission occur */
                                    /* clear emission flag for next emission*/        
}



相关帖子

沙发
ayb_ice| | 2007-11-27 14:16 | 只看该作者

寄存器不熟可以看DATASHEET

使用特权

评论回复
板凳
hellomcu| | 2007-11-27 14:21 | 只看该作者

找本书来,看一下波特率的计算方式

找本书来,看一下波特率的计算方式。书上都有的了,寄存器不清楚就看下其应用含义

相关链接:http://shop3508126.taobao.com

使用特权

评论回复
地板
xwj| | 2007-11-27 14:38 | 只看该作者

51就那么点寄存器,自己去仔细看书!

使用特权

评论回复
5
huangqi412| | 2007-11-27 15:09 | 只看该作者

看相应位就好了,

使用特权

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

本版积分规则

855

主题

1044

帖子

4

粉丝