引言

  是在每天、每周、每月等的中常見的問題。例如居民生活區(qū)的加壓泵房,在用水量較少時(shí)(如深夜至凌晨),關(guān)閉加壓系統(tǒng),僅由管網(wǎng)供水;在用水量較大時(shí),定時(shí)開啟加壓系統(tǒng),進(jìn)行恒壓供水。為了實(shí)現(xiàn)定時(shí),系統(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í)開關(guān)機(jī)判斷方法

  實(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)系。

基于查表的定時(shí)開關(guān)機(jī)判斷方法

  經(jīng)過分析,表1出現(xiàn)了無關(guān)項(xiàng)(x),序號(hào)2和5所對應(yīng)的比較結(jié)果是不會(huì)出現(xiàn)的??梢愿鶕?jù)表1編制出適合不同單片機(jī)的程序表格(如MCS51,Tabl:db O,1,55h,O,1,55h,0,1)。其中無關(guān)項(xiàng)對應(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ī)。

基于查表的定時(shí)開關(guān)機(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)中。