主函數(shù)
void uartdo()
{
if(uart_index==0)
return;
if(uart_recv[uart_index-2]==0x0d && uart_recv[uart_index-1]==0x0a)
{
if(uart_index==4 && uart_recv[0]=='S' && uart_recv[1]=='T')
sprintf(sendstring,"$%02d,%5.2f\r\n",(uint)distance,temp);
else if(uart_index==6 && uart_recv[0]=='P' && uart_recv[1]=='A' && uart_recv[2]=='R' && uart_recv[3]=='A')
sprintf(sendstring,"#%02d,%02d\r\n",(uint)para_buf[1],(uint)para_buf[0]);
else
sprintf(sendstring,"ERROR\r\n");
send(sendstring);
uart_index=0;
}
else if(uart_index>=7)
{
sprintf(sendstring,"ERROR\r\n");
send(sendstring);
uart_index=0;
}
memset(uart_recv,0,uart_index);
}
uart.c
void UartInit(void) //9600bps@12.000MHz
{
SCON = 0x50; //8???,?????
AUXR |= 0x01; //??1?????2???????
AUXR |= 0x04; //???2???Fosc,?1T
T2L = 0x8F; //??????
T2H = 0xFD;
AUXR |= 0x10; //?????2
ES = 1;
EA = 1;
}
void sendbyte(unsigned char dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
void send(unsigned char *dat)
{
while(*dat!='\0')
sendbyte(*dat++);
}
|