![]() |
有意思,學習了! |
接受到的數據用數值用數組存起來,buf[n]= |
這個數據有頭有尾的,每次接受完一包后,直接拿第5和6位就可以了,在接受完一包數后做個標記,主程序判斷這個接收完成標記就處理第五和六的數,處理完成,這個標記清除,同時在產生這個標記直到處理數據完成前串口中斷里面是不能接受數據的。 |
Y_G_G 發表于 2024-6-16 16:07 有道理,我的思路應該不太對,有時間找點資料學習一下,我一直都是自己瞎捉摸寫的 |
在中斷中只做接收,并存放在緩沖里,在主程序查找就可以 所謂第五個數據,我不確定你這個數據是什么樣子的,是每次都是一樣的長度還是長度都不一樣的? 如果是長度都是一樣的,就在接收的時候存放在數組中,直接引用就可以了 |
lxh2002 發表于 2024-6-14 15:44 這個寫法是否有些啰嗦了,在中斷里面運行這么長的代碼,應該把判斷放到while循環中去,中斷里只進行接收 |
四串口與電腦收發測試程序,觀方有講解 可以去看看 |
sbufch[1] = sbufch[2]; sbufch[2] = sbufch[3]; sbufch[3] = sbufch[4]; sbufch[4] = sbufch[5]; sbufch[5] = sbufch[6]; sbufch[6] = sbufch[7]; sbufch[7] = sbufch[8]; sbufch[8] = sbufch[9]; sbufch[9] = SBUF; if(sbufch[1]==0XA0&&sbufch[2]==0X0A) //判斷是否為起始頭標志 { if(sbufch[3]==0X00||sbufch[3]==sbufch[0]) //判斷是否為起始頭標志 { COMMAND(); } } 這個是一串9個字節的接受判斷,0xa0 0x0a 這2個字節是數據頭,找到后執行COMMAND子程序,想怎么做都可以 |
wdgao 發表于 2024-6-14 14:58 是的,前提是把數據準確的收完,以免取錯位置。從你的數據來看是30 30 30 35 ,ascii就是0005 |
接收到的數據放到緩沖數組里,要哪一位取哪一位即可。 |