
定時(shí)/計(jì)數(shù)器軟件編程范例
我們以一個(gè)實(shí)際的時(shí)鐘電路來說明定時(shí)器的軟件編程方法,時(shí)鐘就是我們最為常見的顯示時(shí),、分,、秒為單位的計(jì)時(shí)工具,它是典型的應(yīng)用代表,。時(shí)鐘的最小計(jì)時(shí)單位是秒,,但使用單片機(jī)定時(shí)器來進(jìn)行計(jì)時(shí),若使用6.0MHz的晶振,,即使按工作方式1工作,,最大的計(jì)時(shí)時(shí)間也只能到131ms,所以我們可把每個(gè)定時(shí)時(shí)間取125ms,,這樣定時(shí)器溢出8次(125ms╳8=1000ms)就得到最小的計(jì)時(shí)單位秒,。而要實(shí)現(xiàn)8次計(jì)數(shù)用軟件方法實(shí)現(xiàn)是輕而易舉的。我們使用定時(shí)器1,,以工作方式1工作,,定時(shí)器進(jìn)行125ms定時(shí)。采用中斷方法進(jìn)行溢出次數(shù)的累計(jì),,當(dāng)計(jì)滿8次即得到1秒的計(jì)時(shí),。一個(gè)時(shí)鐘的計(jì)時(shí)累加,要實(shí)現(xiàn)分,、時(shí)的進(jìn)位,,要用到多種進(jìn)制,秒,、分,、時(shí)中的進(jìn)位是十進(jìn)制,秒向分進(jìn)位和分想時(shí)進(jìn)位卻是六十進(jìn)制,,而每天又有十二小時(shí)制或二十四小時(shí)制,,它們分別又是十二進(jìn)制和二十四進(jìn)制,。從秒到分和從分到小時(shí)可以通過軟件累加和數(shù)值比較方法實(shí)現(xiàn)。在單片機(jī)的內(nèi)部RAM中,,需要設(shè)置顯示緩沖區(qū),,顯示的時(shí)、分,、秒值是從顯示緩沖區(qū)中取出的,,在RAM中設(shè)置四個(gè)單元作為顯示緩沖區(qū),分別是7AH,、7BH,、7CH。為使電路和原理敘述方便,,我們這里不顯示秒值,,秒的進(jìn)位我們通過閃爍分值實(shí)現(xiàn)。這樣我們一共有四位LED分別顯示時(shí)和分值,。同時(shí)時(shí)鐘都需要校準(zhǔn)的,。在程序中還需設(shè)置顯示碼表,要顯示的數(shù)值通過查表指令將顯示用的真正碼值送到LED上,。我們用單片機(jī)AT89C2051的PP3.4和P3.5兩個(gè)I/O口外接微動(dòng)開關(guān)來實(shí)現(xiàn)時(shí)和分的校正,,每按一次小時(shí)或分值加1,連續(xù)按下數(shù)值累計(jì)下去,,實(shí)現(xiàn)時(shí)鐘的校準(zhǔn),。在電路中我們還設(shè)置了一個(gè)蜂鳴器,用作簡(jiǎn)單報(bào)時(shí)用,,如可設(shè)早上7:30分起床,,中午1點(diǎn)30分再有起床報(bào)時(shí),每次響時(shí)1分鐘,,響1秒,,停2秒的方式,而不是連續(xù)響鈴,。這個(gè)程序我們采用12小時(shí)制,,為此,要在程序中設(shè)置相應(yīng)的標(biāo)志,,以利于主程序識(shí)別,。同樣計(jì)時(shí)程序中還會(huì)有幾個(gè)相關(guān)的標(biāo)志,主要是控制程序流的轉(zhuǎn)向,。程序中我們都作了較詳細(xì)的注釋,,這里不再贅述。硬件電路,,我們還是以低價(jià)的AT89C2051單片機(jī)為微處理單元,,這個(gè)芯片兼容C51指令系統(tǒng),,在C51上編寫的程序,無需任何修改即可方便地移植到這個(gè)芯片上來,。我們以P0口作為LED的字段位驅(qū)動(dòng)輸出,,秒的“進(jìn)位”采用分值閃爍提示,亮0.5秒,,熄0.5秒,。,P3.1—P3.3用于位驅(qū)動(dòng),,使用動(dòng)態(tài)掃描方式顯示,,每位LED的顯示時(shí)間10—25ms之間均可,掃描頻率不能太高,,否則每位LED顯示的時(shí)間過短,,亮度太低,不易于觀看,,以肉眼不感覺到LED閃爍為宜,。為了直觀,我們的驅(qū)動(dòng)輸出沒有采用集成電路,,而是使用了分立元件—三極管,但工作原理卻是一致的,。
這個(gè)電路結(jié)構(gòu)決定LED采用共陽極的數(shù)碼管,,可以采用LQ5101BS普通的發(fā)光二極管,驅(qū)動(dòng)三極管可采用易得的2SA1015和2SC1815等型號(hào),,當(dāng)然也可使用象S9012,S9013,S9014,2N5401,2N5555等小功率三極管,,其它器件沒有特殊要求。為便于實(shí)驗(yàn),,單片機(jī)AT89C2051可采用DIP20P插座,,程序編制好后,調(diào)試無錯(cuò),,即可燒寫到AT89C2051中,,值得一提的是,AT89C2051是Falsh程序存儲(chǔ)器,,程序可反復(fù)擦寫,,對(duì)于做實(shí)驗(yàn)是非常方便的。