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

[复制链接]
2611|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就那么点寄存器,自己去仔细看书!

huangqi412 发表于 2007-11-27 15:09 | 显示全部楼层

看相应位就好了,

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

本版积分规则

856

主题

1046

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部