⑴ 單片機通過串口向PC不間斷發送變化的數據,PC接收總是延遲
這個問題很常見了,解決方法:
如果你能更改上位機軟體,將上位機軟體接收數據那塊改為"一旦接收緩沖區有數據,立刻讀出來顯示".
如果你沒辦法更改上位機軟體,那麼你可以間隔發送,比如兩包數據間隔為0.5S,或者找一款可以實時顯示的調試助手,推薦使用ttermpro測試下
⑵ 單片機串口發送數據不及時怎麼處理
不是很明白你要實現的功能。
你的中斷函數里寫的是如果接收到串口信息時,就將標志位置1,同時獲取此時P1口的按鍵狀態。
然後主程序檢測到標志位被置1,就將剛剛獲取的P1口按鍵狀態發回給上位機是這樣嗎?
不用說了,肯定是這樣。
我說說你程序的問題吧,首先你的P1口到底接了些什麼外圍電路我不知道,如果是按鍵,還分哪類按鍵呢,比如拔動開關,或者是普通按鍵。如果是拔動開關的話,那麽這個程序也沒多大問題。因為拔動開關是可以讓你的按鍵電平鎖定在高電平或低電平的,但如果是普通按鍵的話,那麽你的程序就很大問題了。
首先要產生RX信號,讓程序進入中斷,同時你的按鍵要按下。兩步要同時。所以導致你要不斷地按,狂按。
其實如果你的單片機不接收上位機傳來的串口信號,可以直接去掉中斷的。
while(1)
{
if(P1!=0XFF) // 證明有按鍵按下
{
pd1=P1; //將值取出。
while(P1!=0xff) ; //直到鬆手。
SBUF=pd1; //SUBF接受/發送緩沖器
P2=pd1;
//delay(); 這句delay沒多大意義。
while(TI==0);
TI=0;
Flag=0;
}
}
也可能是我誤解了你的意思,有什麼問題歡迎一起探討,希望我的回答對你有幫助。
⑶ 單片機串口通信,發送數據感覺不對,請大佬幫看看
你的主循環轉得太快,前一個數據還沒發送完就把SBUF又填充新數值,這樣很容易破壞發送的幀。
既然你不開中斷,就應當採用查詢工作方式,查詢TI標志位確認發送完成之後再進行下一步工作。
⑷ 51單片機 開啟串口TI後時鍾變慢
第一:這種情況只有在開串口中斷才會出現,你的程序中有IE=0x90;的語句嗎?
第二:開啟串口發送,是向SBUF中送數,如SBUF=0x8AH;但不能人為地TI=1,這樣做是錯誤的,當串口發送一個位元組後會自動置TI=1的,表示已發送完一個位元組,這樣,要由軟體清TI=0,再發送下一個位元組。
第三,人為地置TI=1,就會出現在沒有發送數據的情況下也會產生中斷,如果還沒有串口中斷子函數,也沒有清TI=0的語句,就會不停地中斷,當然就會影響執行延時子函數,那延時的時間肯定要長了。
⑸ stc8h單片機串口通訊數據不發送
stc8h單片機串口通訊數據不發送如果都配置檢測沒什麼問題,能夠正常的發送數據但是不能夠接收數據的話就要考慮是不是IO沒有配置好。將指指基RX的埠配置成設置I/O口為准雙向口模式,唯謹再次逗好進行嘗試。