一、引言
單片機作為嵌入式系統的微控制器,已經不是新鮮的事情,作為單片機的定時/計數器的使用可以說沒有什么難度,但對于需要多個獨立計時的事件,單片機的兩個時鐘顯得有點不能滿足要求,其實不然,合理的運用內存和標志位可以實現一個定時器充當多個計時時鐘的效果,本文以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組轉動馬達的起停控制,實踐證明這種方法簡單可行。部分原程序如下所示?;玖鞒毯筒糠?a target="_blank">程序代碼如下。


以下是定時中斷服務程序的全部代碼,可以完成對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
- 單時鐘完(5444)
- 現和應用(5187)
一種實現計時器變為倒計時器的設計方案
9365
實時時鐘芯片應用設計時必須要考慮的事項
7505
基于DS18B20和LabVIEW的多點溫度測量系統
2389單端時鐘輸入未在Virtex 7器件中布線
多點有線語音通信系統
完成倒計時時鐘的設計資料分享
CCS5.2 debug 下的clock計時按鈕的計時時鐘是多少?
FPGA的sata接口設計時需要注意哪些問題
IWDG的計時時鐘
i.MX6UL基于嵌入式QT實現電容屏多點觸控的方法
labview2015,一點對多點已經會了,如何實現多點交互TCP通信?????求指導
vivado route_design完成,計時失敗
【EASY EAI Nano-TB(RV1126B)開發板試用】+電子時鐘計時效果的實現
基于IXP425和DM642的會議電視多點控制單元硬件設計原理和實現方法介紹
如何去實現一種計時十字路***通信號燈及公共時鐘的設計
差分時鐘轉單端
怎利用DS1820實現多點測溫的技術?
求。怎樣實現LABVIEW對plc實時多點采集控制等
用89c51設計時鐘控制系統設計
郭天祥 AT24C02計時斷點問題
高精度計算機控制多點位移檢測系統的實現
10大型設計中FPGA的多時鐘設計策略
828采用CyClockWizard軟件實現系統設計和時鐘管理
849采用半導體傳感器的多點溫度儀的制作
55FPGA大型設計應用的多時鐘設計策略
1591
基于P87LPC762單片機的電子計時牌設計
2017
內置晶體實時時鐘(RTC)優勢概述
8975基于VSTO技術的Office計時器插件的設計與實現
8ClkReset—復位一個用來計時的時鐘
11565大屏多點觸控互動技術你知道多少
6202基于單片機和DS12C887芯片實現高精度倒計時牌的設計
2965
如何利用PIC單片機實現計時秒表功能
6012使用51單片機設計時鐘的程序免費下載
051單片機時鐘計時器學習板的基本原理解析
5561Hisan無縫激光投影 大屏多點觸控互動
2474倒計時時鐘的設計的設計要求和Protues仿真電路圖資料概述
8233
使用51單片機實現時鐘計時顯示的基本方法詳細說明
12如何實現RTC產品的高精度?
6489使用FPGA實現大型設計時的設計策略詳細說明
11基于AT89C52單片機和衛星定位技術實現高精度倒計時牌的應用方案
5735
虛擬主參考計時時鐘(vPRTC)
6有效容忍單粒子多點翻轉的加固鎖存器
14剖析具有挑戰性的設計時鐘方案
2332
課程設計題九: 倒計時時鐘設計
48(29)FPGA原語設計(差分時鐘轉單端時鐘)
5(30)FPGA原語設計(單端時鐘轉差分時鐘)
10如何去實現一種基于psoc6的時鐘系統設計?
1516
嵌入式單片機開發的“時鐘”是如何實現的?
1962
多點對多點的組網方式有5個特點
1179單北斗同步時鐘原廠,電力同步時鐘推薦 賽思單北斗同步時鐘方案落地內蒙古電力通信網,鑄就電網安全基
1977
電子發燒友App




評論