串列埠中斷程式流程圖

  序列介面簡稱串列埠,也稱序列通訊介面或序列通訊介面***通常指COM介面***,是採用序列通訊方式的擴充套件介面。什麼原因導致串列埠中斷,中斷的問題在哪裡。小編給大家整理了關於,希望你們喜歡!

  

  引起串列埠中斷的問題

  1、 你要傳送的資料,經序列口傳送後,SCON中的TI會置1,這時候就會有序列口中斷,通知微控制器資料已經發送成功,微控制器就可以進入序列口中斷程式***彙編中***地址0023H***,這時候你就可以再一次傳送資料,也就是將資料寫到SBUF中,傳送後中斷返回,等到傳送成功後會再一次產生序列口中斷,這時你就可以再次進入中斷處理程式,傳送資料。

  流程是: ***主程式中***傳送資料--等待中斷--傳送成功產生中斷--進入中斷清除TI,再次傳送--中斷返回---等待中斷---傳送成功產生中斷--進入中斷清除TI,再次傳送。。。。 迴圈而已

  2、如果你想定時傳送,比如每隔一段時間傳送一次,這時你可以用定時器,在定時器的中斷處理程式中傳送資料,而不去理會序列口中斷***可以關閉序列口中斷或者在序列口中斷中什麼也不做直接返回***。

  需要注意的是:如果你用序列口工作方式1或者3,那麼定時器1就被作為波特率發生器,是不能開定時器1的中斷的。定時器0不受影響,可以用。如果你選的是方式2,則兩個定時器都可以用,也可以組合使用,產生較長時間定時。

  3、你想用外中斷觸發,來發送資料的話,和2情況相同,此時可以由你自己手工控制什麼時候傳送,只需要關閉序列口中斷***預設為關閉***,開外中斷,在外中斷處理程式中傳送資料,要想知道傳送成功了沒有,可以檢查TI,不影響外中斷。

  綜合來說就是中斷可開可閉,也可以同時用兩個甚至多個,但這樣容易引起資料發不到就被另一箇中斷打斷,最好根據實際情況選擇其中一種

  關於計數結束

  你的計數結束表述不明確啊,是計數器溢位了計數結束呢,還是說後面沒有脈衝了***即外部脈衝結束了***計數結束呢?如果是前者,很簡單隻要在計數器的中斷處理程式中完成你所需的操作,如果是後者,就沒那麼簡單了,因為微控制器不可能知道什麼時候外部脈衝什麼時候結束,除非用外部中斷的方式通知微控制器,你可以在外部中斷處理程式中,完成取數,給上位機通過串列埠送數,這時候你必須做出選擇 1,如果某次計數結束,你上一次經過串列埠傳送的資料,還沒傳送成功,你放棄本次傳送 2,如果某次計數結束,你上一次經過串列埠傳送的資料,還沒傳送成功,你繼續傳送,覆蓋原來資料。

  其實你應該把你的東西詳細說出來,你只說一個方面,可能你的想法不太對路,我還要按照你的不太對路的想法給你解釋,這樣不太方便。 如果你想計數的話,一般的方法是,給一個定時器設定一個時間,另一個做計數器,定時器時間一到,就在段中取數,給上位機送數,定時器可工作在方式2,迴圈送數。不知道你是不是想做這個。

  如果你是傳送資料,你不應該把注意力放在串列埠中斷上,除非你過分追求傳送的成功率,一般情況下都能傳送成功。

  你說的“用串列埠中斷傳數給上位機”,這句話本身就有問題,TI是在傳送完畢後產生中斷,你甚至可以不理它,用定時器中斷的處理程式來完成取數,送數。所以說你必須明確到底是傳送完畢後立即再次傳送***利用TI***,還是每次你所謂的“計數結束”後傳送資料***此時勸你不要在意TI***。