/*------------------------------------------------------------------*/
/* --- STC MCU International Limited -------------------------------*/
/* --- STC 1T Series MCU RC Demo -----------------------------------*/
/* --- Mobile: (86)13922805190 -------------------------------------*/
/* --- Fax: 86-755-82944243 ----------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------*/
/* --- Web: www.**.com -----------------------------------------*/
/* If you want to use the program or the program referenced in the */
/* article, please specify in which data and procedures from STC */
/*------------------------------------------------------------------*/
/*
²âÊÔ·½·¨£º
¸ù¾ÝÄúµÄÖ÷ʱÖӺͲ¨ÌØÂÊÐÞ¸ÄÏÂÃæµÄÏà¹Ø¶¨Ò壬±àÒëºóÏÂÔØµ½MCU¡£
ͨ¹ý´®¿ÚÖúÊÖÏòMCU·¢ËÍÊý¾Ý£¬MCUÊÕµ½ºóÔÑù·µ»Ø¡£
*/
#include <reg51.h>
sfr AUXR = 0x8E;
sfr BRT = 0x9C;
#define BUF_LENTH 64 //¶¨Òå´®¿Ú½ÓÊÕ»º³å³¤¶È
unsigned char idata RX0_Buffer[BUF_LENTH]; //½ÓÊÕ»º³å
unsigned char uart0_wr; //дָÕë
unsigned char uart0_rd; //¶ÁÖ¸Õë
bit B_TI;
void uart0_init(void);
/*************** Óû§¶¨Òå²ÎÊý *****************************/
//#define MAIN_Fosc 18432000L // define main clock
#define MAIN_Fosc 22118400L // define main clock
//#define MAIN_Fosc 11059200L // define main clock
#define Baudrate0 9600 // define the baudrate,
// 12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ
// 1T mode: 7200~1382400 for 22.1184MHZ, 3600~691200 for 11.0592MHZ
#define T1_1T_Mode 0 // 1: Timer1 set as 1T mode, 0: Timer1 set as 12T mode
/**********************************************************/
/****************** ±àÒëÆ÷×Ô¶¯Éú³É£¬Óû§ÇëÎðÐÞ¸Ä ************************************/
#if (T1_1T_Mode > 0)
#define T1_TimerReload (256 - MAIN_Fosc / 64 / Baudrate0) //Calculate the timer1 reload value ar 1T mode
#else
#define T1_TimerReload (256 - MAIN_Fosc / 192 / Baudrate0) //Calculate the timer1 reload value at 12T mode
#endif
/**********************************************************/
void main(void)
{
uart0_init();
while(1)
{
if(uart0_rd != uart0_wr) //´®¿Úת·¢
{
B_TI = 0;
SBUF = RX0_Buffer[uart0_rd];
if(++uart0_rd >= BUF_LENTH) uart0_rd = 0;
while(!B_TI) ;
B_TI = 0;
}
}
}
void uart0_init(void)
{
PCON |= 0x80; //UART0 Double Rate Enable
SCON = 0x50; //UART0 set as 10bit , UART0 RX enable
TMOD &= ~(1<<6); //Timer1 Set as Timer, defalul 12T
TMOD = (TMOD & ~0x30) | 0x20; //Timer1 set as 8 bits auto relaod
#if (T1_1T_Mode > 0)
AUXR |= (1<<6); //Timer1 set as 1T mode
#endif
TH1 = T1_TimerReload; //Load the timer
TR1 = 1;
ES = 1;
EA = 1;
}
/**********************************************/
void UART0_RCV (void) interrupt 4
{
if(RI)
{
RI = 0;
RX0_Buffer[uart0_wr] = SBUF;
if(++uart0_wr >= BUF_LENTH) uart0_wr = 0;
}
if(TI)
{
TI = 0;
B_TI = 1;
}
}
/*STC12C4052AD 内部RC*/
|