如果妳的相位計只需要在初始的時候發送p0 c0 l0 這三個的話,也就是說後繼的數據都是由相位計發送,
單片機接收的話,初始化部分沒有大問題,但接收數據的部分 ReceStr()有問題,應該是收不到數據吧?
1、串口初始化程序先確定TH1的值和單片機晶振匹配不?0xfd是用於11.0592M晶振的波特率不加倍(smod = 0)方式下的9600bps的
這個可以控制單片機發送,由pc設定9600接收,看單片機串行速率設置是否正確
2、妳現在的串口接收函數執行了也收不到數據, 因為單片機串口只有壹個字節的緩沖,所以壹般用中斷方式來接收數據,
每次有壹個字節收到後,通過中斷來將收到的字節放入程序緩沖去。
還有接收變量怎麽會寫成float的?單字節用char 。
如果是相位計的數據發過來是float類型,那需要妳自己程序轉換,串口發送的只會是8bit的hex數據
3、如果程序需要很準確的延遲的話,延遲函數需要調試壹下的
串口接收例程:
全局變量:
unsigned char x_Buf[50] = {0};
unsigned char * pX = x_Buf;
//volatile unsigned char posBf = 0;
中斷服務:
void Serial_ISR(void) interrupt 4
{
if(RI)
{
RI = 0;
*pX++ = SBUF;
if(pX == &x_Buf[49]+1) pX = x_Buf;
}
}
*************************************************/
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
ES = 1; //串口中斷使能
EA = 1;
}