51定時/計數器軟體編程範例

admin @ 2014-03-14 , reply:0

我們以一個實際的時鐘電路來說明定時器的軟體編程方法,時鐘就是我們最為常見的顯示時、分、秒為單位的計時工具,它是典型的應用代表。



    我們使用定時器1,以工作方式1工作,定時器進行125ms定時。採用中斷方法進行溢出次數的累計,當計滿8次即得到1秒的計時。

    一個時鐘的計時累加,要實現分、時的進位,要用到多種進位,秒、分、時中的進位是十進位,秒向分進位和分想時進位卻是六十進位,而每天又有十二小時制或二十四小時制,它們分別又是十二進位和二十四進位。從秒到分和從分到小時可以通過軟體累加和數值比較方法實現。

    在單片機的內部RAM中,需要設置顯示緩衝區,顯示的時、分、秒值是從顯示緩衝區中取出的,在RAM中設置四個單元作為顯示緩衝區,分別是7AH、7BH、7CH。為使電路和原理敘述方便,我們這裡不顯示秒值,秒的進位我們通過閃爍分值實現。這樣我們一共有四位LED分別顯示時和分值。同時時鐘都需要校準的。在程序中還需設置顯示碼錶,要顯示的數值通過查表指令將顯示用的真正碼值送到LED上。我們用單片機AT89C2051的PP3.4和P3.5兩個I/O口外接微動開關來實現時和分的校正,每按一次小時或分值加1,連續按下數值累計下去,實現時鐘的校準。

    在電路中我們還設置了一個蜂鳴器,用作簡單報時用,如可設早上7:30分起床,中午1點30分再有起床報時,每次響時1分鐘,響1秒,停2秒的方式,而不是連續響鈴。這個程序我們採用12小時制,為此,要在程序中設置相應的標誌,以利於主程序識別。同樣計時程序中還會有幾個相關的標誌,主要是控制程序流的轉向。程序中我們都作了較詳細的註釋,這裡不再贅述。

    硬體電路,我們還是以低價的AT89C2051單片機為微處理單元,這個晶元兼容C51指令系統,在C51上編寫的程序,無需任何修改即可方便地移植到這個晶元上來。我們以P0口作為LED的欄位位驅動輸出,秒的“進位”採用分值閃爍提示,亮0.5秒,熄0.5秒。,P3.1—P3.3用於位驅動,使用動態掃描方式顯示,每位LED的顯示時間10—25ms之間均可,掃描頻率不能太高,否則每位LED顯示的時間過短,亮度太低,不易於觀看,以肉眼不感覺到LED閃爍為宜。為了直觀,我們的驅動輸出沒有採用集成電路,而是使用了分立元件—三極體,但工作原理卻是一致的。

    這個電路結構決定LED採用共陽極的數碼管,可以採用LQ5101BS普通的發光二極體,驅動三極體可採用易得的2SA1015和2SC1815等型號,當然也可使用象S9012,S9013,S9014,2N5401,2N5555等小功率三極體,其它器件沒有特殊要求。為便於實驗,單片機AT89C2051可採用DIP20P插座,程序編製好后,調試無錯,即可燒寫到AT89C2051中,值得一提的是,AT89C2051是Flash程序存儲器,程序可反覆擦寫,對於做實驗是非常方便的。



[admin via 研發互助社區 ] 51定時/計數器軟體編程範例已經有4264次圍觀

http://www.cocdig.com/docs/show-post-864.html