樓主,我覺得你應該抽點時間,看看串口通訊在芯片、線路上是怎么實現的。這個是基礎,學明白了,如何解決問題,你會有重新認識。用來實現數據傳送的,是芯片中的寄存器,你把數據送進去,通過線路送到接收方的寄存器。收發正常的場合,兩邊寄存器里的內容是一致的。當你把可顯示、打印的ASCII和不可顯示、打印的16禁止數據混合傳輸的時候,比如以下語句(假設printf做個輸出轉向,轉向給串口輸出,假設comout是輸出16進制數據給串口):
printf("12345"); // 注:這五個字符,對應的6進制數據為:0x31,0x32,0x33,0x34,0x35
unsigned char dat[]={0xF1,0xC1,0x00,0x23};
comout(dat,0,3); // 像串口發送dat數組中從0號元素開始,到3號元素截止的數據,包含0號元素和3號元素
那么經過這些發送,接收方收到的數據,以16進制表達:0x31,0x32,0x33,0x34,0x35,0xF1,0xC1,0x00,0x23
當你使用APP接收這些數據,如果以文本形式表示出來的時候,因為前五個對應的是可顯示打印的數據,所以顯示“12345”,但后五個是沒法顯示的。
上面的發送,是可以用以下形式,一樣實現:
unsigned char dat[]={0x31,0x32,0x33,0x34,0x35,0xF1,0xC1,0x00,0x23};
comout(dat, 0, 8); |