機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
定時器和中斷實驗
定時器和中斷實驗
 更新時間:2009-12-21 16:47:42  點擊數(shù):0
【字體: 字體顏色
一、實驗?zāi)康?/B>
1、學(xué)習(xí)51單片機(jī)內(nèi)部定時器的使用方法。
2、掌握中斷處理程序的方法。
3、掌握數(shù)碼管與單片機(jī)的連接方法和簡單顯示編程方法。
4、學(xué)習(xí)和理解數(shù)碼管動態(tài)掃描的工作原理。
 
二、實驗內(nèi)容
1、使用定時器T0,定時1秒,控制P1口發(fā)光管循環(huán)點亮。
2、使用定時器T0,定時1秒,控制1個數(shù)碼管循環(huán)顯示數(shù)字0~9,每秒鐘數(shù)字加一。
3、使用軟件定時1秒,控制2個數(shù)碼管循環(huán)顯示秒數(shù)0~59,每秒鐘數(shù)字加一。
4、使用定時器T0,定時1秒,控制2個數(shù)碼管循環(huán)顯示秒數(shù)0~59,每秒鐘數(shù)字加一。
 
三、實驗電路圖
1、數(shù)碼管的基本概念
(1) 段碼
    數(shù)碼管中的每一段相當(dāng)于一個發(fā)光二極管,8段數(shù)碼管則具有8個發(fā)光二極管。本次實驗使用的是共陰數(shù)碼管,公共端是1、6,公共端置0,則某段選線置1相應(yīng)的段就亮。公共端1控制左面的數(shù)碼管;公共端6控制右面的數(shù)碼管。正面看數(shù)碼管的引腳、段選線和數(shù)據(jù)線的對應(yīng)關(guān)系為:
    段碼是指在數(shù)碼管顯示某一數(shù)字或字符時,在數(shù)碼管各段所對應(yīng)的引腳上所加的高低電平按順序排列所組成的一個數(shù)字,它與數(shù)碼管的類型(共陰、共陽)和與數(shù)據(jù)線的連接順序有關(guān)。
對應(yīng)數(shù)據(jù)線
D7
D6
D5
D4
D3
D2
D1
D0
對應(yīng)顯示段
e
f
DP
g
c
d
b
a
顯示數(shù)字
段碼
0
0CFH
1
1
0
0
1
1
1
1
1
03H
0
0
0
0
0
0
1
1
2
5DH
0
1
0
1
1
1
0
1
3
5BH
0
1
0
1
1
0
1
1
4
93H
1
0
0
1
0
0
1
1
5
0DAH
1
1
0
1
1
0
1
0
6
0DEH
1
1
0
1
1
1
1
0
7
43H
0
1
0
0
0
0
1
1
8
0DFH
1
1
0
1
1
1
1
1
9
0DBH
1
1
0
1
1
0
1
1
 
(2)位碼
    位碼也叫位選,用于選中某一位數(shù)碼管。在實驗圖中要使第一個數(shù)碼管顯示數(shù)據(jù),應(yīng)在公共端1上加低電平,即使P2.7口為0,而公共端6上加高電平,即使P2.6口為1。位碼與段碼一樣和硬件連接有關(guān)。
 
(3)拉電流與灌電流
    單片機(jī)的I/O 口與其他電路連接時,I/O 電流的流向有兩種情況:一種是當(dāng)該I/O 口為高電平時,電流從單片機(jī)往外流,稱作拉電流;另一種是該I/O 口為低電平時,電流往單片機(jī)內(nèi)流,稱為灌電流。一般I/O 的灌電流負(fù)載能力遠(yuǎn)大于拉電流負(fù)載能力,對于一般的51 單片機(jī)而言,拉電流最大4mA,灌電流為20mA。一般在數(shù)碼管顯示電路中采用灌電流方式(用共陽數(shù)碼管),可以得到更高的亮度。本實驗電路中采用拉電流方式(用共陰數(shù)碼管)。
 
2、多位數(shù)碼管的動態(tài)顯示
    在多位8段數(shù)碼管顯示時,為了簡化硬件電路,通常將所有位的段選線相應(yīng)地并聯(lián)在一起,由一個單片機(jī)的8位I/O口控制,形成段選線的多路復(fù)用。而各位數(shù)碼管的共陽極或共陰極分別由單片機(jī)獨立的I/O口線控制,順序循環(huán)地點亮每位數(shù)碼管,這樣的數(shù)碼管驅(qū)動方式就稱為“動態(tài)掃描”。在這種方式中,雖然每一時刻只選通一位數(shù)碼管,但由于人眼具有一定的“視覺殘留”,只要延時時間設(shè)置恰當(dāng),便會感覺到多位數(shù)碼管同時被點亮了。
多位8段LED動態(tài)顯示器電路,其中段選線占用一個8位I/O口,位選線占用一個8位I/O口,由于各位的段選線并聯(lián),段線碼的輸出對各位來說都是相同的。因此,同一時刻,如果各位位選線都處于選通狀態(tài)的話,8位LED將顯示相同的字符。若要各位LED能夠顯示出與本位相應(yīng)的顯示字符,就必須采用掃描顯示方式,即在某一位的位選線處于選通狀態(tài)時,其它各位的位選線處于關(guān)閉狀態(tài),這樣,8位LED中只有選通的那一位顯示出字符,而其它位則是熄滅的。同樣,在下一時刻,只讓下一位的位選線處于選通狀態(tài),而其他的位選線處于關(guān)閉狀態(tài)。如此循環(huán)下去,就可以使各位“同時”顯示出將要顯示的字符。由于人眼有視覺暫留現(xiàn)象,只要每位顯示間隔足夠短,則可造成多位同時亮的假象,達(dá)到顯示的目的。
 
3、定時器
(216—計數(shù)初值)╳晶振周期╳12    或   (216—計數(shù)初值)╳機(jī)器周期
因為實驗系統(tǒng)的晶振12MHZ,機(jī)器周期等于1us。最大定時時間為:
 (216—0)╳1/12╳10-6╳12=65536╳10-6(s)= 65.536ms。
所以需要配合軟件記數(shù)。如要延時1秒,T0取最大定時時間,則需要T0中斷16次,所用時間為
65536*16=1048576μs≈1s
因此在T0中斷處理程序中,要判斷中斷次數(shù)是否到16次,若不到16次,則只使中斷次數(shù)加1,然后返回,若到了16次,定時1秒時間到。
如要延時1秒,T0取50ms定時時間,則需要T0中斷20次,所用時間為
50ms*20=1000ms=1s
因此在T0中斷處理程序中,要判斷中斷次數(shù)是否到20次,若不到20次,則只使中斷次數(shù)加1,然后返回,若到了20次,定時1秒時間到。
 
五、參考程序框圖及部分程序
1、使用定時器T1,定時1秒,控制P1口發(fā)光管循環(huán)點亮。
;利用定時器精確延時1秒
;循環(huán)點亮P1口接的八只發(fā)光二極管。 
ORG 0000H
AJMP START
ORG 001BH  ;T1中斷入口地址
AJMP INT_T1
ORG  0030H
START:     MOV  SP,#60H
    MOV TMOD,#10H ;置T1為方式1
    MOV TL1,#0B0H  ;延時50mS的時間常數(shù)
    MOV TH1,#3CH
    MOV R0,#0FEH
    MOV R1,#20
    SETB TR1;啟動定時器1,開始定時
    SETB ET1
    SETB EA   ;開中斷
    SJMP $
INT_T1:;T1中斷服務(wù)子程序
    PUSH ACC;保護(hù)現(xiàn)場
    PUSH PSW
    PUSH DPL
    PUSH DPH
    CLR TR1;關(guān)閉定時器1,停止定時
    MOV TL1,#0B0H;定時50mS常數(shù)
    MOV TH1,#3CH      
    DJNZ R1,EXIT
    MOV  R1,#20;延時一秒的常數(shù)
    MOV  A,R0;
    MOV  P1,A  ;送P1口顯示
    SETB C
    RLC A
    MOV R0,A
EXIT: SETB TR1;啟動定時器1,開始定時
    POP DPH;恢復(fù)現(xiàn)場
    POP DPL
    POP PSW
    POP ACC
RETI
END
 
2、使用定時器T0,定時1秒,控制1個數(shù)碼管循環(huán)顯示數(shù)字0~9,每秒鐘數(shù)字加一。ORG 0000H
AJMP START
ORG 000BH  ;T0中斷入口地址
AJMP INT_T0
ORG  0030H
START:     MOV  SP,#60H
    MOV TMOD,#01H ;置T0為方式1
    MOV TL0,#0B0H  ;延時50mS的時間常數(shù)
    MOV TH0,#3CH
    MOV R0,#00H   ;數(shù)碼管顯示單元
    MOV R1,#20    ;定時次數(shù)
    SETB TR0;啟動定時器1,開始定時
    SETB ET0
    SETB EA   ;開中斷
Slop:  acall display
        SJMP Slop
INT_T0:;T0中斷服務(wù)子程序
    PUSH ACC;保護(hù)現(xiàn)場
    PUSH PSW
    PUSH DPL
    PUSH DPH
    CLR TR0;關(guān)閉定時器1,停止定時
    MOV TL0,#0B0H;延時50mS常數(shù)
    MOV TH0,#3CH      
    DJNZ R1,EXIT
    MOV  R1,#20;重置定時次數(shù)
    MOV A,R0
    INC A  ;數(shù)碼管顯示單元內(nèi)容加一
    MOV R0,A
    CJNE A,#10,EXIT
    MOV R0,#00H   ; 數(shù)碼管顯示單元清0
EXIT: SETB TR0;啟動定時器0,開始定時
    POP DPH;恢復(fù)現(xiàn)場
    POP DPL
    POP PSW
    POP ACC
RETI
;顯示子程序
display: mov a,R0     
    mov dptr,#numtab;指定查表啟始地址
    MOVC A,@A+DPTR    ;得到段碼
    mov P0,a   ; 段碼送P0口
    clr P2.7   ;送位碼
    acall delay1 ;延時10ms
    setb P2.7
    ret
;延時子程序
delay1:MOV    R2,#20
L1:    MOV    R3,#248
    DJNZ   R3,$
    DJNZ   R2,L1
    RET
;實驗板上的7段數(shù)碼管0~9數(shù)字的共陰顯示代碼
numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
END
 
3、使用軟件定時1秒,控制2個數(shù)碼管循環(huán)顯示秒數(shù)0~59,每秒鐘數(shù)字加一。
(1)在設(shè)計過程中使用一個存儲單元作為秒計數(shù)單元,當(dāng)一秒鐘到來時,就讓秒計數(shù)單元加1,當(dāng)秒計數(shù)達(dá)到60時,就自動返回到0,重新秒計數(shù)。
(2)對于秒計數(shù)單元中的數(shù)據(jù)要把它十位數(shù)和個數(shù)分開,方法一:采用對10整除和對10求余;方法二:采用分?jǐn)?shù)、合數(shù)法。
(3)在數(shù)碼管上顯示數(shù),通過查表的方式完成。
(4)一秒時間的產(chǎn)生采用軟件精確延時的方法來完成,經(jīng)過精確計算得到1秒時間為1.002秒。
 方法一匯編源程序
;----------10毫秒延時子程序
DELY10ms:  MOV R4,#20
D1: MOV R5,#248
    DJNZ R5,$
    DJNZ R4,D1
RET
;-------主程序
Second EQU 30H
ORG 0
START: acall init
NEXT: acall display
       Ljmp next
 
Init: MOV Second,#00H
       ret
 
display: MOV R3,#50
dis2:MOV A,Second
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A      ;送出十位數(shù)字的段碼
CLR p2.7      ;送位碼
Acall dely10ms
Setb p2.7
MOV A,B
MOVC A,@A+DPTR
MOV P0,A      ;送出個位數(shù)字的段碼
CLR p2.6
LCALL DELY10mS
Setb p2.6
djnz r3,dis2 ;20毫秒循環(huán)執(zhí)行50次,時間約1秒
INC Second
MOV A,Second
CJNE A,#60,ret0
Mov Second,#00h
Ret0: ret
TABLE: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
END
 
方法二匯編程序:
temp equ 22h ;計數(shù)器個位和十位數(shù)值存放內(nèi)存位置
ORG 0000H     ;程序執(zhí)行開始地址
LJMP START        ;跳到標(biāo)號START執(zhí)行
;-------------------- 主程序 ---------------------------
START:     mov temp,#0   ;初始化計數(shù)器,從0開始
stlop:     acall display ;調(diào)用顯示子程序
        acall add1 ;對計數(shù)器加1
        mov a,temp
        cjne a,#60H,next ;判斷計數(shù)器是否滿60?
        mov temp,#0   ;滿60就清零重新開始
        next:  ljmp stlop ;不滿就循環(huán)執(zhí)行
;顯示子程序
display:   mov r1,#50
dis1:      mov a,temp    ;將temp中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制
        anl a,#0Fh
        mov dptr,#numtab;指定查表啟始地址
        MOVC A,@A+DPTR    ;查數(shù)字的段碼
        mov P0,a   ;送出個位數(shù)字的段碼
        clr P2.7   ;送出位碼
        acall delay1 ;顯示10ms
        setb P2.7     ;關(guān)閉位選
        mov a,temp;將temp中的十六進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制
        anl a,#0F0h
        swap a
        mov dptr,#numtab;指定查表啟始地址
        MOVC A,@A+DPTR    ;查數(shù)字的段碼
        mov P0,a   ;送出十位數(shù)字的段碼
        clr P2.6   ;送位碼
        acall delay1 ;顯示10ms
        setb P2.6
       djnz r1,dis1
        ret
;延時子程序
delay1:MOV    R2,#20
L1:    MOV    R3,#248
        DJNZ   R3,$
        DJNZ   R2,L1
        RET
;加一子程序
add1:  mov a,temp
        inc a
       da a
       mov temp,a
        ret
;實驗板上的7段數(shù)碼管0~9數(shù)字的共陰顯示代碼
numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
end
4、使用定時器T0,定時1秒,控制2個數(shù)碼管循環(huán)顯示秒數(shù)0~59,每秒鐘數(shù)字加一。
本題請大家參考前面的例題獨立完成。
1、說明實驗?zāi)康暮蛢?nèi)容。
2、畫出實驗電路原理圖,并簡要分析電路的執(zhí)行過程。
3、完成實驗內(nèi)容(4)的程序設(shè)計框圖并說明編程思想,并給出程序清單。
4、根據(jù)實驗內(nèi)容,調(diào)式程序,觀察、分析程序的運行過程。
5、給出實驗結(jié)果并進(jìn)行分析。
6、實驗體會。
  • 上一篇: 單片機(jī)和圖形液晶顯示器接口應(yīng)用技術(shù)
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1