⑴ 單片機定時器原理及使用
這里通俗的說下C51單片機的定時器的工作原理,C51單片機的定時器是由計數器構成的,所計量的時間是通過計算固定周期的脈沖個數的累計獲得的,通過設置定時器的工作模式,可以由16位(高、低兩個8位)寄存器模式或其他位數的寄存器模式來計數,以16位計數模式來討論,那就是無論那種工作模式只有當計數用的寄存器的各個位全部置1,也就是滿值後下一個計數脈沖進入時使寄存器產生溢出,而這個溢出才會使計數產生中斷從而完成一次定時控制,因此,如果我們想產生某個時長的定時,那麼我需要將這個時長根據單片機運行的時鍾頻率、周期等等相關因素換算成需要計數的個數,進而在這個滿值的16位寄存器中扣除需要計數的個數,啟動運行後當計數值補充滿了寄存器就完成了一次計時,而一個16位寄存器滿值為2的16次方=65536,假如一個計數脈沖的周期為1us,那麼滿值後就會耗時65536us,假如我們需要計時36us,那麼我們只需要為寄存器賦值65500就可以了,這里需要注意的是,因為C51單片機的寄存器是8位的,我們需要將這個65500拆分出高8位數據裝入THx中計算方法為THx=65500/256,再計算出低8位數據裝入TLx中,THx=65500%256。
⑵ 單片機定時器/計數器主要有什麼作用
定時器:主要用於產生固定時間(比較精確),也可以作為UART等外設的頻率發生器
計數器:主要是計量引腳產生脈沖的個數
⑶ 用51單片機實現時鍾功能程序
anEQUP0;
weiEQUP2;
keyBITP3.7;
ORG0000H
AJMPMAIN;絕對轉移指令,2kb范圍(11位)內跳轉LJMP16位64kb范圍內跳轉
;短轉移指令的功能是先使程序計數器PC加1兩次(即:取出指令碼),然後把加2後的地址和rel相加作為目標轉移地址。因此,短轉移指令是一條相對轉移指令,是一條雙位元組雙周期指令
ORG0030H;指明後面的程序從程序存儲器的0030H單元開始存放
DELAY200US:;@11.0592MHz
NOP
NOP
NOP
PUSH30H
PUSH31H
MOV30H,#2
MOV31H,#179
NEXT:
DJNZ31H,NEXT
DJNZ30H,NEXT
POP31H
POP30H
RET
ORG0060H
;DISPLAY子程序
DISPLAY:
PUSHACC;不能寫A,此處ACC代表地址,push後跟地址,代表把地址內的內容壓入棧中
PUSH00H;R0
PUSH06H;R6
PUSH07H;R7
PUSH83H;DPH
PUSH82H;DPL
MOVR6,#01H;位選數據,01指的是緩沖區最低位數據
MOVR7,#08H;循環次數
FLAG:
MOVan,#0x00;消影
MOVA,R6
CPLA;取反
MOVwei,A;位選
MOVA,#disBufDat
ADDA,R7
SUBBA,#0X08
MOVR0,A
MOVA,@R0;讀出要顯示的數據到A
MOVDPTR,#disTab
MOVCA,@A+DPTR;從rom取數據,取出要顯示的數據對應的段碼
MOVan,A;段選
MOVA,R6
RLA
MOVR6,A;更新下一次位選
LCALLDELAY200US
DJNZR7,FLAG
POP82H;DPL
POP83H;DPH
POP07H
POP06H
POP00H
POPACC
RET
ORG0100H
;定時器中斷0初始化
T0_INIT:
MOVTMOD,#0X01
MOVTH0,#0X3C
MOVTL0,#0XB0
SETBEA
SETBTR0
SETBET0
RET
ORG0130H
;T0中斷處理程序
INT_TIMERE0:
PUSHACC
SETBRS0
MOVTH0,#0X3C
MOVTL0,#0XB0
INCR0
MOVA,R0
SUBBA,#0X14
JBCY,SECFLAG
MOVR0,#0x00
INCsec
SECFLAG:
CLRRS0
POPACC
RETI
ORG000BH;定時器/計數器T0入口地址
LJMPINT_TIMERE0;跳轉到定時器/計數器中斷服務程序中去
disTab:DB0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40;0-f,空白,橫杠的段選數據
disBufDatEQU47H;定義顯示緩沖數據變數區,8個
disBufDatHeadEQU40H//單片機上顯示在最左邊
secEQU48H
;主程序
ORG0180H
MAIN:
MOVSP,#0X60;將0x60到0x7f設為堆棧區
LCALLT0_INIT
MOVdisBufDatHead,#0X00
MOVdisBufDatHead+1,#0X00
MOVdisBufDatHead+2,#0X11
MOVdisBufDatHead+3,#0X11
MOVdisBufDatHead+4,#0X11
MOVdisBufDatHead+5,#0X11
MOVdisBufDatHead+6,#0X11
MOVdisBufDatHead+7,#0X11
MOVsec,#0X3A
WHILE:
JBkey,KEYSCAN
MOVsec,0x00
KEYSCAN:
MOVA,sec
SUBBA,#3CH;超過60s歸零
JBCY,CLEAR
MOVsec,#0X00;clr加ram地址無效
CLEAR:
MOVA,sec
MOVB,#0AH
DIVAB;A/B,商存到A中,余數存B中
MOVdisBufDatHead,A
MOVdisBufDatHead+1,B
LCALLDISPLAY
LJMPWHILE;循環
END;
(3)單片機計量安時擴展閱讀
51機器周期和指令周期
1、機器周期是指單片機完成一個基本操作所花費的時間,一般使用微秒來計量單片機的運行速度,51單片機的一個機器周期包括12個時鍾振盪周期,也就是說如果51單片機採用12MHz晶振,那麼執行一個機器周期就只需要1μs;如果採用的是6MHz的晶振,那麼執行一個機器周期就需要2μs。
2、指令周期是指單片機執行一條指令所需要的時間,一般利用單片機的機器周期來計量指令周期。在51單片機里有單周期指令(執行這條指令只需一個機器周期),雙周期指令(執行這條指令只需要兩個機器周期),四周期指令(執行這條指令需要四個機器周期)。
除了乘、除兩條指令是四周期指令,其餘均為單周期或雙周期指令。也就是說,如果51單片機採用的是12MHz晶振,那麼它執行一條指令一般只需1~2微秒的時間;如果採用的是6MH晶振,執行一條指令一般就需2~4微秒的時間。
⑷ 我准備用51單片機測試電池的電壓電流,那麼測試的電池的負載應該是多大
從網上查到如下文字:
------------------------------------
6-DZM-14系列蓄電池為額定電壓12V,額定容量14Ah的密封鉛酸蓄電池。一般情況下,鉛酸蓄電池放電電流不宜超過1C-rate(所謂1C-rate,也就是1倍於Capacity數值,電池額定容量為14Ah,1倍容量就是14A)。
----------------------------------
如果你的蓄電池容量是7安時的話,最大正常放電電流為7A,那麼負載電阻就是12V/7A=1.7歐姆。通過接入負載產生的壓降就知道電池內阻了。不同品牌的電池正常放電電流也是不一樣的,過大的放電電流會使電池折壽,但蓄電池可以超過很多倍電流來短時間放電,例如汽車起動。作為測試,建議你使用1歐姆的電阻,放電電流12A,測試時間10分鍾內。
⑸ 單片機定時器/計數器主要有什麼作用
作用:可以計時,計數,可以產生時間中斷,是系統中比較實用的工具。
大部分單片機提供2~3個定時/計數器,少數提供1個或4個定時器。有些定時/計數器還具有輸入捕獲、輸出比較和PWM(脈沖寬度調制)功能,如AVR單片機。
有的單片機還有專門的PCA(可編程計數器陣列)模塊和CCP(輸入捕獲輸出比較PWM)模塊,如PIC和Philips的部分中高檔單片機。利用這些模塊不僅可以簡化軟體設計,而且能減少佔用CPU的資源。現在不少單片機還提供了看門狗定時器(WDT),當單片機「死機」後可以自動復位。
定時/計數器
定時/計數器T0和T1分別是由兩個8位的專用寄存器組成,即定時/計數器T0由TH0和TL0組成,T1由TH1和TL1組成。此外,其內部還有2個8位的特殊功能寄存器TMOD和TCON,TMOD負責控制和確定T0和T1的功能和工作模式,TCON用來控制T0和T1啟動或停止計數,同時包含定時/計數器的狀態。
以上內容參考:網路-定時器中斷