本發(fā)明屬于單片機控制技術(shù)領(lǐng)域,具體涉及一種依靠輔助單片機擴展51單片機外部中斷數(shù)量的方法。
背景技術(shù):
51單片機具有價格低廉的特點,其單價一般都在5元以內(nèi)。但其外部中斷數(shù)量一般較少,以宏晶公司的STC89C51為例,其只有兩個外部中斷源。即使該公司之后推出的12系列、15系列單片機能夠提供更多的外部中斷,但這些增加的外部中斷僅能夠?qū)崿F(xiàn)下降沿觸發(fā),而無法如INT0、INT1兩個中斷源一樣實現(xiàn)上升沿、下降沿均觸發(fā)。因此,當(dāng)控制系統(tǒng)所需的外部中斷數(shù)量較多時,單靠51單片機將難以滿足控制需求。
當(dāng)前有一種較常見的外部中斷擴展方式,即將多個外部信號源和邏輯“與”門芯片腳的輸入相連,同時將這些外部信號源與單片機的普通I/O口連接。并將邏輯“與”門芯片的輸出引腳與單片機的外部中斷INT0或INT1(宏晶公司一般為P3.0和P3.1)相連。將所用到的單片機I/O口均配置為準(zhǔn)雙向模式。此時,當(dāng)外部中斷信號源都為高電平,外部中斷引腳有一個為高電平,另一個為低電平,則外部中斷引腳為低電平。因此,當(dāng)三個外部中斷源中有一個變成低電平時,單片機外部中斷接收到一個下降沿,被觸發(fā)。在外部中斷程序中,掃描單片機與中斷信號源相連的所有普通I/O口,掃描發(fā)現(xiàn)為低電平的I/O口對應(yīng)的中斷源就是所需觸發(fā)的中斷信號。單片機就能夠做出相應(yīng)的響應(yīng)。當(dāng)?shù)碗娖降耐獠恐袛嘣醋兓馗唠娖綍r,與門芯片的輸出變?yōu)楦唠娖?,單片機外部中斷接收到一個上升沿,再次觸發(fā),并做出相應(yīng)的響應(yīng)。
上述外部中斷擴展方式在一定程度上能夠?qū)崿F(xiàn)對上升沿、下降沿均觸發(fā)的外部中斷進(jìn)行擴展,但其存在如下缺陷:
1.當(dāng)信號源變?yōu)榈碗娖綍r,能夠觸發(fā)外部中斷。此時,若該信號源未及時變回高電平,而另一中斷源也變?yōu)榈碗娖?,希望觸發(fā)中斷,但由于一個輸入為低電平和兩個輸入為低電平時,輸出均為低電平,則單片機將無法接收到第二個中斷請求,系統(tǒng)將錯過這個外部中斷,產(chǎn)生相應(yīng)的錯誤。
2.“與”門芯片有兩輸入、三輸入、四輸入,當(dāng)外部輸入信號數(shù)量超過與門的輸入數(shù)量,則要通過串聯(lián)多塊“與”門芯片來完成相應(yīng)的觸發(fā);當(dāng)外部中斷信號源數(shù)量小于“與”門輸入數(shù)量時,又需要將未接信號源的“與”門輸入引腳接上高電平。因此,“與”門芯片在使用時不便于兼容不同的外部信號數(shù)量。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是針對現(xiàn)有技術(shù)的不足,提供一種依靠輔助單片機擴展51單片機外部中斷數(shù)量的方法。
本發(fā)明的具體步驟如下:
步驟一、兩塊子單片機均將各自的一個I/O口作為外部中斷請求的輸出口與主單片機的外部中斷I/O口相連;子單片機的其余I/O口根據(jù)外部信號源數(shù)量n定義為輸入口,兩個子單片機的輸入口總數(shù)為n,n≤14,且每個單片機至少有一個輸入口。n個外部信號源與子單片機對應(yīng)的輸入口相連,同時與主單片機的普通I/O口連接。用到的子單片機I/O口及主單片機I/O口均配置為準(zhǔn)雙向模式,主單片機的外部中斷設(shè)置為上升沿、下降沿均觸發(fā)。
步驟二、子單片機不斷掃描定義的輸入口電平狀態(tài),一旦某一輸入口的輸入電平與記錄電平不同,則記錄電平更新為當(dāng)前中斷信號源狀態(tài)。且子單片機的輸出口電平發(fā)生變化,從而使主單片機外部中斷I/O口變化,觸發(fā)主單片機的外部中斷。
步驟三、主單片機的外部中斷觸發(fā)從以下三種中斷觸發(fā)方式中選擇一種:
(1)上升沿、下降沿均觸發(fā)主單片機外部中斷:主單片機通過外部中斷程序掃描與外部信號源相連的所有普通I/O口,掃描發(fā)現(xiàn)與記錄電平不同的I/O口對應(yīng)的外部信號源就是所需觸發(fā)的中斷信號源,則執(zhí)行與該中斷信號源對應(yīng)的程序,并將記錄電平更新為當(dāng)前中斷信號源狀態(tài)。
(2)僅上升沿觸發(fā)主單片機外部中斷:主單片機通過外部中斷程序掃描與外部信號源相連的所有普通I/O口,掃描發(fā)現(xiàn)與之前記錄電平不同的I/O口對應(yīng)的外部信號源,則記錄電平更新為當(dāng)前中斷信號源狀態(tài);若該外部信號源為高電平,執(zhí)行與該中斷信號源對應(yīng)的程序,若該外部信號源為低電平,則退出中斷。
(3)僅下降沿觸發(fā)主單片機外部中斷:主單片機通過外部中斷程序掃描與外部信號源相連的所有普通I/O口,掃描發(fā)現(xiàn)與之前記錄電平不同的I/O口對應(yīng)的外部信號源,則記錄電平更新為當(dāng)前中斷信號源狀態(tài);若該外部信號源為低電平,執(zhí)行與該中斷信號源對應(yīng)的程序。若該中斷信號源為高電平,則退出中斷。
所述的主單片機采用IAP15W4K58S4芯片;子單片機采用STC15F104E芯片。
本發(fā)明具有的有益效果:
1、本發(fā)明給出一種使用子單片機不斷掃描外部中斷源信號,并由子單片機向主單片機發(fā)送中斷觸發(fā)請求的擴展方式,使所有中斷請求均能夠被主單片機接收,有效保證系統(tǒng)的穩(wěn)定性;同時,能夠有效兼容外部中斷源數(shù)量不同的系統(tǒng)。
2、本發(fā)明選用STC15F104E作為子單片機,該單片機不同封裝的單價均在3元以下,其內(nèi)部產(chǎn)生時鐘信號,不需要外接晶振,最高時鐘頻率可達(dá)33MHz,能夠?qū)崿F(xiàn)快速掃描;其寫入擴展程序后與主單片機簡單連接即可使用;用極低的成本即可完成擴展外部中斷數(shù)量的目的。
附圖說明
圖1為本發(fā)明中子單片機的程序流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明作進(jìn)一步說明。
依靠輔助單片機擴展51單片機外部中斷數(shù)量的方法,具體步驟如下:
步驟一、兩塊子單片機均將各自的一個I/O口作為外部中斷請求的輸出口與主單片機的外部中斷I/O口相連;子單片機的其余I/O口根據(jù)外部信號源數(shù)量n定義為輸入口,兩個子單片機的輸入口總數(shù)為n,n≤14,且每個單片機至少有一個輸入口,本實施例中兩塊子單片機的輸入口均為3個。n個外部信號源與子單片機對應(yīng)的輸入口相連,同時與主單片機的普通I/O口連接。用到的子單片機I/O口及主單片機I/O口均配置為準(zhǔn)雙向模式,主單片機的外部中斷設(shè)置為上升沿、下降沿均觸發(fā)。主單片機采用IAP15W4K58S4芯片;子單片機采用STC15F104E芯片。
步驟二、如圖1所示,子單片機不斷掃描定義的輸入口電平狀態(tài),一旦某一輸入口的輸入電平與記錄電平不同,則記錄電平更新為當(dāng)前中斷信號源狀態(tài)。且子單片機的輸出口電平發(fā)生變化,從而使主單片機外部中斷I/O口變化,觸發(fā)主單片機的外部中斷。
步驟三、主單片機的外部中斷觸發(fā)從以下三種中斷觸發(fā)方式中選擇一種:
(1)上升沿、下降沿均觸發(fā)主單片機外部中斷:主單片機通過外部中斷程序掃描與外部信號源相連的所有普通I/O口,掃描發(fā)現(xiàn)與記錄電平不同的I/O口對應(yīng)的外部信號源就是所需觸發(fā)的中斷信號源,則執(zhí)行與該中斷信號源對應(yīng)的程序,并將記錄電平更新為當(dāng)前中斷信號源狀態(tài)。
(2)僅上升沿觸發(fā)主單片機外部中斷:主單片機通過外部中斷程序掃描與外部信號源相連的所有普通I/O口,掃描發(fā)現(xiàn)與之前記錄電平不同的I/O口對應(yīng)的外部信號源,則記錄電平更新為當(dāng)前中斷信號源狀態(tài);若該外部信號源為高電平,執(zhí)行與該中斷信號源對應(yīng)的程序,若該外部信號源為低電平,則退出中斷。
(3)僅下降沿觸發(fā)主單片機外部中斷:主單片機通過外部中斷程序掃描與外部信號源相連的所有普通I/O口,掃描發(fā)現(xiàn)與之前記錄電平不同的I/O口對應(yīng)的外部信號源,則記錄電平更新為當(dāng)前中斷信號源狀態(tài);若該外部信號源為低電平,執(zhí)行與該中斷信號源對應(yīng)的程序。若該中斷信號源為高電平,則退出中斷。
該依靠輔助單片機擴展51單片機外部中斷數(shù)量的方法,一旦某一信號源產(chǎn)生變化,外部中斷輸出口的狀態(tài)就會發(fā)生變化,該狀態(tài)下主單片機便不會錯過在執(zhí)行當(dāng)前外部中斷時產(chǎn)生的外部中斷。子單片機的掃描速度越高,主單片機的外部中斷越不容易遺漏。子單片機的掃描速度主要由兩方面決定:1.程序的長短,掃描時判斷語句通常是單周期指令,執(zhí)行該語句需要用時一個機器周期。程序越短掃描時間越短,即定義的掃描I/O口越少,掃描精度越高。2.機器周期的長短,單片機執(zhí)行語句通常為單機器周期指令。機器周期由時鐘周期決定,時鐘周期由晶振的頻率決定。晶振頻率越高,機器周期越短,執(zhí)行的越快,越不容易出錯,下載時配置晶振頻率為30M。