一、引言
單片機作為嵌入式系統的微控制器,已經不是新鮮的事情,作為單片機的定時/計數器的使用可以說沒有什么難度,但對于需要多個獨立計時的事件,單片機的兩個時鐘顯得有點不能滿足要求,其實不然,合理的運用內存和標志位可以實現一個定時器充當多個計時時鐘的效果,本文以51系列單片機為例,實現一個時鐘控制8個獨立馬達的運行過程中,時間分別統計方法。
二、單片機計數/定時器的基本原理簡介
本文以51系列單片機為例介紹定時器的用法,定時/計數器的原理可以分為定時和計數兩部分,定時器的原理是通過設定8位或16位的定時器單元,通過給定定時器單元的初值,然后啟動定時器,于是定時器開始從初值開始累計,每增加一個數需要特定的時間,這個特定的時間是累加指令的機器周期,是由MCU的晶振的頻率決定。對于51系列的單片機機器周期是時鐘周期的1/12,也就是晶振頻率的12分頻。單片機的定時器原理上相當于一個16位的內存單元,通過TMOD可以設定定時/計數器的工作方式。計數值從初值計到全“1”,如果是16位方式則計數單元變成FF,此時并不產生中斷,當下一個計數指令加1,導致存儲單元溢出,在中斷控制寄存器允許的情況下產生中斷,通過中斷服務程序執行特定的任務。計數器的原理不同之處在于,不是單純的加指令,而是對外部的脈沖計數,常用來測量脈沖的寬度。
三、時鐘對多事件分別計數的具體途徑
對于實時性要求不是很高的時間可以通過如下方式實現。在完成基本的定時器工作方式設定以后,也就是設定定時器的計數方式,比如16位或8位,以及計數的初始值,以及啟動中斷的方式,建議使“SETB TR0”的方式。并且允許中斷。在中斷服務程序中,開辟存儲單元,以8個事件為例,每個事件不一定同時發生,每個事件發生以后以相同的時間延遲,再進行下一步的任務,為了完成定時延時,事件發生的時刻記作A1,A2,A3。。。。。。A10,中段服務程序中首先檢查有無這些既定的事件發生,沒有則不做任何處理,恢復計數初值后退出中斷,相反,假如檢測到AX(X=1、2、3。。。。。。)事件發生則給預先選定的對應的內存單元增加1,也就是執行累加運算,比如,
A1~50H; 表示A1對應的存儲單元是50h
A2~51H; 表示A2對應的存儲單元是51h
A3~52H;
。 。
。 。
。 。
A7 57H; 表示A7對應的存儲單元是57h
假如A3事件發生,則對52H內存表示的地址單元增加1,使用的指令是“INC 52H”,可以預先計算事件延時時間與計數單元數值的關系,當對應的數值到了預先設定的值時,執行下一任務。比如開關操作等等,并且恢復初始值以便繼續循環控制。這樣可以分別對A1到A7,8個任務分別計時,時間可以相同也可以不同,具體的情況可以根據中斷程序中寄存器累計的實際值與根據需要所設定的預定值比較而實現。
四、典型應用
也許大家都看到過繁華街道上的拼圖式廣告牌吧,有十幾個或者幾十個三棱柱,通過旋轉,構成不同的畫面,在每幅畫面都停留一段時間,這正好是上面介紹的情況,當一個棱柱的某個畫面轉到特定的角度,比如正對馬路的方向,該畫面必須停留,等所有與此畫面相連接而能拼成完整畫面的其他柱面到來,也就是從柱面開始啟動到下一次停下來需要所有畫面經過相同的時間,然而所有的主面不可能同時啟動,可能為了形成某種觀賞效果,有意依次啟動,或由中間開始啟動,逐漸向兩邊延伸,等等,所有這些事件的轉動控制實質就是定時控制,先啟動,先停止。最終保證所有的畫面構成一幅完整的畫面,而且必須是一個平面,我通過這種方法成功地完成了8組和15組轉動馬達的起停控制,實踐證明這種方法簡單可行。部分原程序如下所示。基本流程和部分程序代碼如下。
以下是定時中斷服務程序的全部代碼,可以完成對8個事件的時間統計,并在時間滿足條件時,調用子程序OUT01,是對外部開關的控制指令。通過這段程序,成功實現了一個定時器對多個事件的自動運行控制(以下程序僅供參考)。
TIME0: CLR TR0
PUSH PSW
PUSH ACC
MOV TL0,#22H;定時100ms重新啟動定時器0
MOV TH0,#1CH
LINSHI: MOV A,2AH
CJNE A,#0FFH,DEA
SETB TR0
POP ACC
POP PSW
RETI
DEA: MOV A,2AH
CJNE A,#00H,DE1
MOV A,2CH
CJNE A,#00H,DE1
;SETB TR0
POP ACC
POP PSW
RETI
DE1: JNB 2AH.0,DEAL1
DE2: JNB 2AH.1,DEAL2
DE3: JNB 2AH.2,DEAL3
DE4: JNB 2AH.3,DEAL4I
DE5: JNB 2AH.4,DEAL5I
DE6: JNB 2AH.5,DEAL6I
DE7: JNB 2AH.6,DEAL7I
DE8: JNB 2AH.7,DEAL8I
LJMP FINISH
DEAL4I: LJMP DEAL4
DEAL5I: LJMP DEAL5
DEAL6I: LJMP DEAL6
DEAL7I: LJMP DEAL7
DEAL8I: LJMP DEAL8
DEAL1: JNB 2CH.0,DE2
INC 50H
MOV A,50H
CJNE A,#20,DE2
CLR 2CH.0
LCALL OUT01
mov 50h,#00h
LJMP DE2
DEAL2: JNB 2CH.1,DE3
INC 51H
MOV A,51H
CJNE A,#20,DE3
CLR 2CH.1
LCALL OUT01
MOV 51H,#00H
LJMP DE3
DEAL3: JNB 2CH.2,DE4
INC 52H
MOV A,52H
CJNE A,#20,DE4
CLR 2CH.2
LCALL OUT01
MOV 52H,#00H
LJMP DE4
DEAL4: JNB 2CH.3,DE5I
INC 53H
MOV A,53H
CJNE A,#20,DE5I
CLR 2CH.3
LCALL OUT01
MOV 53H,#00H
DE5I: LJMP DE5
DEAL5: JNB 2CH.4,DE6I
INC 54H
MOV A,54H
CJNE A,#20,DE6I
CLR 2CH.4
MOV 54H,#00H
LCALL OUT01
DE6I: LJMP DE6
DEAL6: JNB 2CH.5,DE7I
INC 55H
MOV A,55H
CJNE A,#20,DE7I
CLR 2CH.5
LCALL OUT01
MOV 55H,#00H
DE7I: LJMP DE7
DEAL7: JNB 2CH.6,DE8I
INC 56H
MOV A,56H
CJNE A,#20,DE8I
CLR 2CH.6
LCALL OUT01
MOV 56H,#00H
DE8I: LJMP DE8
DEAL8: JNB 2CH.7,FINISH
INC 57H
MOV A,57H
CJNE A,#20,FINISH
CLR 2CH.7
LCALL OUT01
MOV 57H,#00H
FINISH: MOV A,2CH
CJNE A,#00H,TUI
SETB TR0;SETB TR0
POP ACC
POP PSW
RETI
TUI: SETB TR0;開定時器
POP ACC
POP PSW
RETI
OUT01: MOV A,2CH
MOV P2,A
CLR G0
LCALL DELAY
CLR CLOCK
LCALL DELAY
SETB CLOCK
NOP
CLR CLOCK
SETB G0
LCALL DELAY
RET
- 單時鐘完(5376)
- 現和應用(5145)
相關推薦
實時時鐘芯片應用設計時必須要考慮的事項
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A6/8E/wKgZomUMPqOAPCc9AAAPCmI8o7s832.png)
單端時鐘輸入未在Virtex 7器件中布線
多點有線語音通信系統
完成倒計時時鐘的設計資料分享
計時功能設置系統時鐘定時器
CCS5.2 debug 下的clock計時按鈕的計時時鐘是多少?
IWDG的計時時鐘
i.MX6UL基于嵌入式QT實現電容屏多點觸控的方法
labview2015,一點對多點已經會了,如何實現多點交互TCP通信啊???求指導
vivado route_design完成,計時失敗
使用40K的內部時鐘發現計時異常的解決方案
在FPGA內部中使用單時鐘FIOF
基于IXP425和DM642的會議電視多點控制單元硬件設計原理和實現方法介紹
基于單片機的時鐘計時器系統設計與制作 精選資料分享
如何利用單片機AT89C51完成籃球計時器的計時功能?
如何去完成一個數字電子時鐘的設計
如何去實現一種計時十字路***通信號燈及公共時鐘的設計
如何去實現一種基于單片機的倒計時牌控制系統設計
差分時鐘轉單端
干貨|多點鎧裝熱電偶在煉化裝置溫度測量中的應用
怎利用DS1820實現多點測溫的技術?
怎樣通過專用的硬件時鐘芯片來實現硬時鐘設計呢
求。怎樣實現LABVIEW對plc實時多點采集控制等
用89c51設計時鐘控制系統設計
郭天祥 AT24C02計時斷點問題
高精度計算機控制多點位移檢測系統的實現
![](https://skin.elecfans.com/images/2021-soft/load.png)
采用半導體傳感器的多點溫度儀的制作
![](https://skin.elecfans.com/images/2021-soft/load.png)
FPGA大型設計應用的多時鐘設計策略
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A6/38/wKgZomUMPFiACN_-AAATxVH4iIM866.jpg)
基于VSTO技術的Office計時器插件的設計與實現
![](https://skin.elecfans.com/images/2021-soft/load.png)
51單片機數字時鐘功能需求及設計實現(帶鬧鐘)
![](https://skin.elecfans.com/images/2021-soft/load.png)
ClkReset—復位一個用來計時的時鐘
![](https://skin.elecfans.com/images/2021-soft/eye.png)
大屏多點觸控互動技術你知道多少
![](https://skin.elecfans.com/images/2021-soft/eye.png)
基于單片機和DS12C887芯片實現高精度倒計時牌的設計
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/BA/61/o4YBAF6bneqAGJ9jAAESUaMyMtg380.png)
如何利用PIC單片機實現計時秒表功能
![](https://skin.elecfans.com/images/2021-soft/eye.png)
使用51單片機設計時鐘的程序免費下載
![](https://skin.elecfans.com/images/2021-soft/load.png)
Hisan無縫激光投影 大屏多點觸控互動
![](https://skin.elecfans.com/images/2021-soft/eye.png)
倒計時時鐘的設計的設計要求和Protues仿真電路圖資料概述
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/9C/E8/pIYBAF0qg7GAXOLPAAmbGyNl5BA792.png)
使用51單片機實現時鐘計時顯示的基本方法詳細說明
![](https://skin.elecfans.com/images/2021-soft/load.png)
如何實現RTC產品的高精度?
![](https://skin.elecfans.com/images/2021-soft/eye.png)
使用FPGA實現大型設計時的設計策略詳細說明
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于AT89C52單片機和衛星定位技術實現高精度倒計時牌的應用方案
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/E9/06/o4YBAGBr2eaAFpShAAEnMG9Mlrg513.png)
虛擬主參考計時時鐘(vPRTC)
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于FPGA的數字電子時鐘設計
![](https://skin.elecfans.com/images/2021-soft/load.png)
剖析具有挑戰性的設計時鐘方案
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web2/M00/02/06/poYBAGDLCpSAfoZfAAAXBycD25E712.png)
課程設計題九: 倒計時時鐘設計
![](https://skin.elecfans.com/images/2021-soft/load.png)
[HAL] STM32F407ZG HAL庫配置過程 時鐘系統
![](https://skin.elecfans.com/images/2021-soft/load.png)
如何去實現一種基于psoc6的時鐘系統設計?
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/8E/76/wKgaomTHWbuAGQ3WAAEKNWH_U4w934.jpg)
嵌入式單片機開發的“時鐘”是如何實現的?
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com/web2/M00/AA/45/wKgaomU4v1GAcx1dAAAzJ7mTXTg816.jpg)
評論