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