王鳳芹
〔摘 要〕本論文結(jié)合我們開發(fā)電子回單柜控制系統(tǒng)的實踐經(jīng)驗,詳細地介紹了電子回單柜中單片機的控制程序;提出了系統(tǒng)中出現(xiàn)干擾脈沖、死機的解決方案。
〔關(guān)鍵詞〕電子回單柜;單片機;控制程序
〔中圖分類號〕TP391 〔文獻標識碼〕B 〔文章編號〕1008-0821(2009)02-0214-03
Singlechip Control Program in Electronic Receipt CabinetWang Fengqin
(Department of Computer,Jilin Management and Business College,Changchun 130062,China)
〔Abstract〕In this paper,a detailed introduction to control program of singlechip in electronic receipt cabiney was addressed.Put forward solution method to appear disruptions pulse or lockdown of system.
〔Key words〕electronic receipt cabinet;singlechip;control progranm
電子回單柜的控制系統(tǒng)由硬件和軟件兩個部分所組成。系統(tǒng)軟件,是由主機與單片機的通信協(xié)議和單片機的控制程序所組成。單片機的控制程序又分主程序和中斷服務(wù)程序。其中主程序是用來完成系統(tǒng)的初始化;中斷服務(wù)程序,則完成系統(tǒng)的所有控制和檢測。本文主要介紹單片機控制程序的實現(xiàn)方法。
1 控制程序
系統(tǒng)控制程序主要由主程序、串行口中斷服務(wù)程序[1]、看門狗復(fù)位程序和若干子程序組成,其控制流程如圖1所示。
1.1 主程序
主程序主要完成設(shè)置串行口的通信方式,設(shè)置定時器的工作方式,啟動波特率發(fā)生器,設(shè)置接收和發(fā)送緩沖區(qū),開辟堆棧保護區(qū),觸發(fā)看門狗,關(guān)閉行列譯碼器,關(guān)閉多路開關(guān),關(guān)閉光電二極管電源,開中斷,等待中斷等功能。
1.2 串行口中斷服務(wù)程序
當(dāng)主機向各回單柜發(fā)出控制指令時便發(fā)生串行口的接收中斷。在接收中斷服務(wù)程序中主要完成控制指令的接收、目標柜號和本地柜號的比較、目標回單盒的選中和開啟、開啟狀態(tài)的檢測、關(guān)閉狀態(tài)的檢測、存單狀態(tài)的檢測和狀態(tài)信息的反饋等功能。
當(dāng)進行目標回單盒的選中和開啟操作時,行列譯碼器將同時啟動,使目標回單盒的電磁鐵通電,但關(guān)閉多路開關(guān)。
當(dāng)進行目標回單盒開啟狀態(tài)的測試時,為了避免電磁鐵的無為耗電將列譯碼器關(guān)閉,但行譯碼器仍然工作,且啟動多路開關(guān)。然后檢測比較器的輸出信號。此時如果檢測到了一個負脈信號,立刻向主機發(fā)送“目標回單盒已經(jīng)打開”的狀態(tài)信息,如果檢測不到,那么再次打開、再度測試,如此重復(fù)三次仍然測不到,將向主機發(fā)送“目標回單盒無法打開”的狀態(tài)信息。
結(jié)束目標回單盒開啟狀態(tài)的檢測之后,緊接著進行關(guān)閉狀態(tài)的檢測。我們在調(diào)試過程中發(fā)現(xiàn),當(dāng)把回單盒給開啟和關(guān)閉時,比較器的輸出端連續(xù)出現(xiàn)多個負脈沖信號。這對以后的關(guān)閉檢測和存單檢測造成一個假象和混亂。其中的第二個脈沖,很容易冒充后續(xù)的關(guān)門或者有單信號。這是因為,回單盒的開啟和關(guān)閉以及存單的檢測方法本質(zhì)上沒有區(qū)別,只是在時間上有先后之分而已。當(dāng)小磁鐵在經(jīng)過干簧繼電器位置時會產(chǎn)生磁場的變化,從而引起干簧
繼電器觸點的顫動,這就是在比較器輸出端連續(xù)出現(xiàn)多個負脈沖的根本原因。原因雖然清楚了,但要想把它徹底消除是極其困難的。那么究竟如何解決這個問題呢?我們想到的是延時方法。單片機檢測到第一個負脈沖信號之后,立刻調(diào)用延時子程序,來躲過后續(xù)干擾脈沖的作用時間。實踐證明,此方法不僅簡單又十分管用。另外,回單盒是靠人工關(guān)閉的,因此控制程序無法判斷它在何時關(guān)閉。為此系統(tǒng)規(guī)定了最長關(guān)盒等待時間,而且此時間還可以由系統(tǒng)主機,通過控制指令隨時對其進行調(diào)整。如果在最長關(guān)盒等待時間內(nèi)檢測到負脈沖的關(guān)門信號,那么立刻向主機發(fā)送“目標回單盒已經(jīng)關(guān)閉”的狀態(tài)信息;如果超過了此等待時間,但仍未檢測到負脈沖信號,那么將向主機發(fā)送“目標回單盒尚未關(guān)閉”的狀態(tài)信息。
當(dāng)進行目標回單盒的存單檢測時,接通回單盒控制電路的發(fā)光二極管電源,同時檢測比較器的輸出信號。當(dāng)檢測到低電平信號,則向主機發(fā)送“目標回單盒中有回單”的狀態(tài)信息;如果測到的是高電平信號,那么向主機發(fā)送“目標回單盒中無回單”的狀態(tài)信息。
1.3 為了避免因外界干擾引起的系統(tǒng)“死機”,單片機控制電路專門設(shè)計了看門狗[2]復(fù)位電路,其定時時間為1.6秒
在主程序和中斷服務(wù)程序中,多處安排了此看門狗的觸發(fā)程序。所以在正常情況下,由于看門狗的觸發(fā)間隔時間不會超過1.6秒,因此控制程序也不能復(fù)位。然而,當(dāng)程序因某種原因進入死循環(huán)時,由于在1.6秒內(nèi)執(zhí)行不到看門狗的觸發(fā)程序,因此單片機將復(fù)位,使控制程序起死回生,重新投入運行。這樣的自動補救措施,對保證系統(tǒng)的安全性和可靠性是至關(guān)重要的。
1.4 控制程序中有兩個子程序供中斷服務(wù)程序地調(diào)用一個為基準延時子程序,另一個為發(fā)送子程序。前者是用來延時的,后者則是專門用來給主機反饋狀態(tài)信息的。在本控制系統(tǒng)中用到很多延時環(huán)節(jié),其中延時時間的準確設(shè)定是一件比較困難的事情。為了方便地找準最佳的延時時間,我們預(yù)先編制了較短時間的基準延時子程序。這樣,在調(diào)試過程中只要修改該子程序的連續(xù)調(diào)用次數(shù),就可以調(diào)整延時時間,從而可以簡化延時時間的設(shè)定過程。
2 結(jié) 論
通過多次的集中測試和如今的現(xiàn)場應(yīng)用表明,本控制系統(tǒng)的控制方法具有程序結(jié)構(gòu)合理,運行穩(wěn)定和可靠等諸多特點。至今已經(jīng)持續(xù)運行了3個多月,但尚未發(fā)現(xiàn)明顯的故障和錯誤。特別是采用回單盒的動態(tài)分配技術(shù)之后,回單盒的實際使用效率和容量明顯得到提高,在這一點上傳統(tǒng)的回單柜是無法跟它比擬的。
參考文獻
[1]王福瑞.單片微機測控系統(tǒng)設(shè)計大全[M].北京:北京航空航天大學(xué)出版社,1999.3.
[2]萬福君.MCS-51單片機原理、系統(tǒng)設(shè)計與應(yīng)用[M].北京:清華大學(xué)出版社,2008.6.