|
楼主 |
发表于 2012-3-29 19:32:23
|
显示全部楼层
本帖最后由 abuffalo 于 2012-3-29 19:43 编辑
void UartInit(void)
{
P1M1 &= 0xFE; // For TxD = P1.0 Push-Pull (M1=0, M2=1)
P1M2 |= 0x01;
SCON = 0x50; // select BRG as UART Baud Rate Gen
SSTAT = 0x60; // separate Rx / Tx interrupts
BRGR0 = 0xB0; // setup BRG for 38400 baud @ 7.373MHz internal RC oscillator
BRGR1 = 0x00;
BRGCON = 0x03; // enable BRG
ESR = 1; // enable UART interrupt
//EST = 1;
}
uint8 RcvBuffer[30];
uint8 WritePtr = 0;
uint8 ReadPtr = 0;
void UART_RX_ISR(void) interrupt 4 // 接收中断
{
RI = 0; // 清接收标志位为0
RcvBuffer[WritePtr++] = SBUF;
if (WritePtr == 30) WritePtr = 0;
}
extern uint8 RcvBuffer[];
extern uint8 WritePtr;
extern uint8 ReadPtr;
void main(void)
{
// IO初始化
IOInit();
// Uart初始化
UartInit();
// 开中断
EA = 1;
while(1)
{
if (ReadPtr != WritePtr)
{
TI = 0;
SBUF = RcvBuffer[ReadPtr++];
while (!TI);
if (ReadPtr == 30) ReadPtr = 0;
}
}
} |
|