1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標題: 關于51單片機串口通信超時處理 [打印本頁]

作者: tomli561    時間: 2020-3-26 15:31
標題: 關于51單片機串口通信超時處理
現在在做一個狀態機控制器,想讓控制器能夠通過發送下位機的獨立地址然后在接收下位機返回的地址來判斷下位機是否在線。用while(!TI);來等待發送完畢和while(!RI);等待接收完畢,如果在發送和接收過程中一直沒發送或接收完數據那不就一直在死循環里出不來了么,該如何做這里的超時處理,讓超過一段時間發送中斷標志位沒置1就手動置1,退出循環進入下一個字節發送?

作者: game灬boy    時間: 2020-3-26 15:53
寫一個定時器;時間設置為你所需要的超時時間;設置定時器中斷優先級高于串口中斷;在定時器中斷服務函數中清除標志位TI和RI;
作者: 墨梔    時間: 2020-3-26 17:43
接收到數據的時候會進入中斷,這個時候再開始計時就可以了。等待發送完沒有必要吧,發送完直接返回程序就可以了
作者: tomli561    時間: 2020-3-27 10:44
game灬boy 發表于 2020-3-26 15:53
寫一個定時器;時間設置為你所需要的超時時間;設置定時器中斷優先級高于串口中斷;在定時器中斷服務函數中 ...

不行,我主機并沒有在中斷函數中實現發送的
作者: tomli561    時間: 2020-3-27 10:46
墨梔 發表于 2020-3-26 17:43
接收到數據的時候會進入中斷,這個時候再開始計時就可以了。等待發送完沒有必要吧,發送完直接返回程序就可 ...

主要是要對下位機尋址等待呼應,要是呼叫的下位機網絡斷了,那就卡死在那一直等待對方應答了,應為是用的
while(!TI);來判斷TI是否置1的
作者: dzbj    時間: 2020-3-27 12:53
server T0()
作者: dzbj    時間: 2020-3-27 12:55
設置一個計數器并設定最大值 每次呼叫從機時計數器清零 然后查詢計數器變化 如果限定值內收到從機應答 計數器清零 如果計數器超時 則從機不存在




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1