串口中斷程序流程圖
串行接口簡稱串口,也稱串行通信接口或串行通訊接口(通常指COM接口),是采用串行通信方式的擴(kuò)展接口。什么原因?qū)е麓谥袛?,中斷的問題在哪里。小編給大家整理了關(guān)于串口中斷程序流程圖,希望你們喜歡!
串口中斷程序流程圖
引起串口中斷的問題
1、 你要發(fā)送的數(shù)據(jù),經(jīng)串行口發(fā)送后,SCON中的TI會置1,這時(shí)候就會有串行口中斷,通知單片機(jī)數(shù)據(jù)已經(jīng)發(fā)送成功,單片機(jī)就可以進(jìn)入串行口中斷程序(匯編中入口地址0023H),這時(shí)候你就可以再一次發(fā)送數(shù)據(jù),也就是將數(shù)據(jù)寫到SBUF中,發(fā)送后中斷返回,等到發(fā)送成功后會再一次產(chǎn)生串行口中斷,這時(shí)你就可以再次進(jìn)入中斷處理程序,發(fā)送數(shù)據(jù)。
流程是: (主程序中)發(fā)送數(shù)據(jù)--等待中斷--發(fā)送成功產(chǎn)生中斷--進(jìn)入中斷清除TI,再次發(fā)送--中斷返回---等待中斷---發(fā)送成功產(chǎn)生中斷--進(jìn)入中斷清除TI,再次發(fā)送。。。。 循環(huán)而已
2、如果你想定時(shí)發(fā)送,比如每隔一段時(shí)間發(fā)送一次,這時(shí)你可以用定時(shí)器,在定時(shí)器的中斷處理程序中發(fā)送數(shù)據(jù),而不去理會串行口中斷(可以關(guān)閉串行口中斷或者在串行口中斷中什么也不做直接返回)。
需要注意的是:如果你用串行口工作方式1或者3,那么定時(shí)器1就被作為波特率發(fā)生器,是不能開定時(shí)器1的中斷的。定時(shí)器0不受影響,可以用。如果你選的是方式2,則兩個(gè)定時(shí)器都可以用,也可以組合使用,產(chǎn)生較長時(shí)間定時(shí)。
3、你想用外中斷觸發(fā),來發(fā)送數(shù)據(jù)的話,和2情況相同,此時(shí)可以由你自己手工控制什么時(shí)候發(fā)送,只需要關(guān)閉串行口中斷(默認(rèn)為關(guān)閉),開外中斷,在外中斷處理程序中發(fā)送數(shù)據(jù),要想知道發(fā)送成功了沒有,可以檢查TI,不影響外中斷。
綜合來說就是中斷可開可閉,也可以同時(shí)用兩個(gè)甚至多個(gè),但這樣容易引起數(shù)據(jù)發(fā)不到就被另一個(gè)中斷打斷,最好根據(jù)實(shí)際情況選擇其中一種
關(guān)于計(jì)數(shù)結(jié)束
你的計(jì)數(shù)結(jié)束表述不明確啊,是計(jì)數(shù)器溢出了計(jì)數(shù)結(jié)束呢,還是說后面沒有脈沖了(即外部脈沖結(jié)束了)計(jì)數(shù)結(jié)束呢?如果是前者,很簡單只要在計(jì)數(shù)器的中斷處理程序中完成你所需的操作,如果是后者,就沒那么簡單了,因?yàn)閱纹瑱C(jī)不可能知道什么時(shí)候外部脈沖什么時(shí)候結(jié)束,除非用外部中斷的方式通知單片機(jī),你可以在外部中斷處理程序中,完成取數(shù),給上位機(jī)通過串口送數(shù),這時(shí)候你必須做出選擇 1,如果某次計(jì)數(shù)結(jié)束,你上一次經(jīng)過串口發(fā)送的數(shù)據(jù),還沒發(fā)送成功,你放棄本次發(fā)送 2,如果某次計(jì)數(shù)結(jié)束,你上一次經(jīng)過串口發(fā)送的數(shù)據(jù),還沒發(fā)送成功,你繼續(xù)發(fā)送,覆蓋原來數(shù)據(jù)。
其實(shí)你應(yīng)該把你的東西詳細(xì)說出來,你只說一個(gè)方面,可能你的想法不太對路,我還要按照你的不太對路的想法給你解釋,這樣不太方便。 如果你想計(jì)數(shù)的話,一般的方法是,給一個(gè)定時(shí)器設(shè)定一個(gè)時(shí)間,另一個(gè)做計(jì)數(shù)器,定時(shí)器時(shí)間一到,就在段中取數(shù),給上位機(jī)送數(shù),定時(shí)器可工作在方式2,循環(huán)送數(shù)。不知道你是不是想做這個(gè)。
如果你是發(fā)送數(shù)據(jù),你不應(yīng)該把注意力放在串口中斷上,除非你過分追求發(fā)送的成功率,一般情況下都能發(fā)送成功。
你說的“用串口中斷傳數(shù)給上位機(jī)”,這句話本身就有問題,TI是在發(fā)送完畢后產(chǎn)生中斷,你甚至可以不理它,用定時(shí)器中斷的處理程序來完成取數(shù),送數(shù)。所以說你必須明確到底是發(fā)送完畢后立即再次發(fā)送(利用TI),還是每次你所謂的“計(jì)數(shù)結(jié)束”后發(fā)送數(shù)據(jù)(此時(shí)勸你不要在意TI)。
串口中斷程序流程圖相關(guān)文章:
2.串口通信流程圖
3.程序控制流程圖