引言
定時開關(guān)機是在每天、每周,、每月等的定時開關(guān)機中常見的問題,。例如居民生活區(qū)的加壓泵房,在用水量較少時(如深夜至凌晨),,定時關(guān)閉加壓系統(tǒng),,僅由管網(wǎng)供水;在用水量較大時,定時開啟加壓系統(tǒng),,進行恒壓供水,。為了實現(xiàn)定時開關(guān)機,系統(tǒng)需要外接一個實時時鐘芯片(如DSl302),,以獲得實時時間,。
一定周期(如每天)的定時開關(guān)機,需要解決實時時間中的進位問題,。以時分為例,,明天的1:00比今天23:59離當前更遠,因為實際上前者相當于25:00,。因此,,如果要判斷時分的大小,需要同時比較日期,,增加了判斷的難度,。本文主要以24小時內(nèi)定時開關(guān)機為例,說明通過查表解決定時開關(guān)機判斷問題的方法,,該方法只需要比較小時和分鐘,。
1 24小時內(nèi)一次定時開關(guān)機
分為兩種情況進行分析。一種情況是,,開機時間(即開機起始的時間)大于關(guān)機時間(即關(guān)機起始的時間),。例如開機時間為05:OO,關(guān)機時間為02:00,,如圖1(a)所示,。另一種情況是,開機時間小于關(guān)機時間,。例如開機時間為04:00,,關(guān)機時間為23:OO,如圖1(b)所示,。圖中陰影部分均為關(guān)機的時間段,。
從圖1(a)中可以看出,如果實時時間同時大于,,或同時小于開機時間和關(guān)機時間,,則系統(tǒng)開機;如果實時時間大于關(guān)機時間且小于開機時間,,則系統(tǒng)關(guān)機,。
從圖1(b)中可以看出,如果實時時間同時大于,,或同時小于開機時間和關(guān)機時間,,則系統(tǒng)關(guān)機,;如果實時時間大于關(guān)機時間且小于開機時間,則系統(tǒng)開機,。其結(jié)果正好和圖1(a)相反,。
實際上,系統(tǒng)是否需要開機由以下3個時間的比較結(jié)果共同決定:實時時間與開機時間,、實時時間與關(guān)機時間,、開機時間與關(guān)機時間。這3種比較結(jié)果共有8種組合可能,。根據(jù)以上分析即可得到表1,,用O和1來表示它們之間的邏輯關(guān)系。
經(jīng)過分析,,表1出現(xiàn)了無關(guān)項(x),,序號2和5所對應的比較結(jié)果是不會出現(xiàn)的??梢愿鶕?jù)表1編制出適合不同單片機的程序表格(如MCS51,,Tabl:db O,1,,55h,,O,1,,55h,0,,1),。其中無關(guān)項對應的結(jié)果可以用特定數(shù)值(如55h)表示出錯,由上層應用程序處理,。在程序編制時,,只需要將3種時間相互比較的結(jié)果經(jīng)過組合,就可以通過查表得到結(jié)果,。開機時間與關(guān)機時間的比較結(jié)果在設定時即可確定并預先保存,,在實際運行時只需要比較實時時間與開機時間、實時時間與關(guān)機時間,。
2 24小時內(nèi)多次定時開關(guān)機及其他情況
如圖2所示,,24小時內(nèi)設定了4組開關(guān)機時間。圖中陰影部分為關(guān)機的時間段,。根據(jù)不同開,、關(guān)機時間組,分別按照上述方法根據(jù)表1進行查表,,將得到的所有結(jié)果相與,,以決定開機或關(guān)機,。只有實時時間滿足所有的開機時間條件時,系統(tǒng)才可以開機,。
在某個非循環(huán)的固定時間段內(nèi)(如2009-10-1 06:00至2009-10-8 23:00)開機,,實際上只需判斷實時時間是否在時間段內(nèi),該情況默認關(guān)機時間大于開機時間,。參考文獻中的應用即此種情況,。
以某個固定周期為循環(huán)(如每周、每月等)時,,只需在3種時間相互比較大小時改變算法,,仍可以根據(jù)三者的比較結(jié)果,通過查表得到系統(tǒng)的輸出,。
結(jié)語
本文提出一種利用查表法解決單片機應用系統(tǒng)中在一定循環(huán)周期內(nèi)定時開關(guān)機判斷問題的方法,。將實時時問、開機時間,、關(guān)機時間三者相互比較,,根據(jù)比較結(jié)果進行查表并確定控制結(jié)果。該方法簡單,、實用,,也可以用于其他嵌入式系統(tǒng)或控制系統(tǒng)中。