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