新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機匯編語言(五)

51單片機匯編語言(五)

作者: 時間:2016-11-24 來源:網(wǎng)絡 收藏
定時器 計數(shù)器

功能說明:

本文引用地址:http://m.butianyuan.cn/article/201611/321013.htm

開始時接在單片機P1端口中的P1.7亮,用定時器延時60ms后P1.6亮,如此向右移動,移到最右端P1.0亮后,又回到最左端重新開始向右移動,不斷循環(huán)。

程序:DS01.ASM

01: START: MOV R0, #8 ;設右移8次

02: MOV A, #01111111B ;存入開始點亮燈位置

03: LOOP: MOV P1, A ;傳送到P1并輸出

04: ACALL DELAY ;調(diào)延時子程序

05: RR A ;右移一位

06: DJNZ R0, LOOP ;判斷移動次數(shù)

07: JMP START ;重新設定顯示值 主程序

08: DELAY: MOV TMOD,#00000001B; 設定TO工作在MODE1

09: SETB TR0 ; 啟動TO開始計時

10: MOV TL0,#LOW(65536-60000) ; 裝入低位

11: MOV TH0,#HIGH(65536-60000); 裝入高位

12: JNB TF0,$ ; T0沒有溢出等待

13: CLR TF0 ; 產(chǎn)生溢出,清標志位 定時延時

14: RET ; 子程序返回 子程序

15: END ; 程序結束

功能說明:

開始時P1.0亮,延時10秒后,左移至P1.1亮,如此左移到第6個燈(P1.5)亮后,再從頭開始向左移動,1分鐘循環(huán)一次。

程序:DS02.ASM

01: START: MOV R0, #6 ;設左移6次

02: MOV A, #11111110B ;存入開始點亮燈位置

03: LOOP: MOV P1, A ;傳送到P1并輸出

04: ACALL DELAY ;調(diào)延時子程序

05: RL A ;左移一位

06: DJNZ R0, LOOP ;判斷移動次數(shù)

07: JMP START ;重新設定顯示值 主程序

08:DELAY: MOV R1,#200 ;設置軟件計數(shù)初值

09: MOV TMOD,#00000001B; 設定TO工作在MODE1

10: SETB TR0 ; 啟動TO開始計時

11: AGAIN: MOV TL0,#LOW(65536-50000) ; 裝入低位

12: MOV TH0,#HIGH(65536-50000); 裝入高位

13: LOOP1: JBC TF0,LOOP2 ;TF0是1轉移至LOOP2并清0

14: JMP LOOP1

15:LOOP2: DJNZ R1,AGAIN ;R1不是0,則轉移至AGAIN (定時加軟

16: CLR TR0 ;是,則停止T0計時 件計數(shù))

17: RET ; 子程序返回 延時子程序

18: END ; 程序結束

功能說明:采用兩個定時器合用,T0設置為定時方式,T1設置為計數(shù)方式。T0定時時間為50ms,計滿產(chǎn)生的輸出信號由P1.7口發(fā)光二極管顯示。同時還將該信號輸入到計數(shù)器T1(P3.5腳)作為T1的計數(shù)輸入脈沖,當輸入信號產(chǎn)生由1到0的跳變時觸發(fā)計數(shù)器工作,使計數(shù)器的值增1。計數(shù)器T1的初始值設置為100,計滿時所用的時間為50ms×2×100,即10s。并由P1.0端口發(fā)光二極管來顯示,所以P1.0端口的燈每10s點亮或熄滅一次。

程序:DS03.ASM

01: ORG 0000H ; 起始地址

02: JMP MAIN ; 跳到主程序MAIN處

03: ORG 000BH ; 定時器T0溢出入口地址

04: JMP EXT0 ; 跳到定時器中斷EXT0處

05: ORG 001BH ; 計數(shù)器T1溢出入口地址

06: JMP EXT1 ; 跳到計數(shù)器中斷EXT1處

07: MOV SP, #60H ; 設置堆棧 入口地址

08: MAIN: MOV TMOD, #01100001B;設T0模式1,T1模式2

09: MOV TL0, #LOW(65536-50000) ; 裝入定時初值

10: MOV TH0, #HIGH(65536-50000);

11: MOV TL1, #(256-100) ; 裝入計數(shù)初值

12: MOV TH1, #(256-100);

13: MOV IE, #10001010B ; 開總中斷及T0、T1中斷

14: SETB TR0 ; 啟動T0開始定時

15: SETB TR1 ; 啟動T1開始計數(shù)

16: JMP $ ; 等待溢出 主程序

17: EXT0: MOV TL0, #LOW(65536-50000) ;重加載

18: MOV TH0, #HIGH(65536-50000);

19: CPL P1.7 ; P1.7反相輸出,并輸入P3.5 T0中斷

20: RETI ; T0中斷子程序返回 子程序

21: EXT1: CPL P1.0 ; P1.0反相輸出 T1中斷

22: RETI ; T1中斷子程序返回 子程序

23: END ; 結束程序結束



評論


技術專區(qū)

關閉