/*************************************************/
/*********************串口部分********************/
void init_uart()
{
P3CR &= 0xF9 ; //RX,TX端口设置为输入
// P3CR |= 0x04;
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
TH1 = BRG ; //Baud:9600 fosc=11.0592MHz
TL1 = BRG ;
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable REN
PCON = 0x80 ; //SMOD=1;
IEN0 |= 0x90 ; //Enable Serial Interrupt,EA=1,ES=1;
TR1 = 1 ; // timer 1 run
}
//接受串口发送过来的数据
void UART_ISR() interrupt 4
{
if(RI && REN)
{
tick.usartRX = 10;
IntRXMsgREC(SBUF);
RI = 0;
}
if(TI && TXEN)//TXEN为自己定义的一个串口发送使能标志
{
TI = 0;
if(!Print2Usart()) //如果队列为空,停止发送
{
TX_ENClr();
}
}
}
bit Print2Usart(void)
{
static uint8 xdata UsartPtr = 0;
if(TXBuff.Str.Sta == DONE && UsartPtr < TXBuff.Str.len+2)
{
SBUF = TXBuff.mem[UsartPtr++];
if(UsartPtr > TXBuff.Str.len+1)
{
UsartPtr = 0;
TXBuff.Str.Sta = READY;
}
return true;
}
else
{
UsartPtr = 0;
TXBuff.Str.Sta = READY;
return false;
}
}
|