新聞中心

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

51單片機(jī)匯編語言(五)

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

功能說明:

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

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

程序:DS01.ASM

01: START: MOV R0, #8 ;設(shè)右移8次

02: MOV A, #01111111B ;存入開始點(diǎn)亮燈位置

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

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

05: RR A ;右移一位

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

07: JMP START ;重新設(shè)定顯示值 主程序

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

09: SETB TR0 ; 啟動(dòng)TO開始計(jì)時(shí)

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

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

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

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

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

15: END ; 程序結(jié)束

功能說明:

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

程序:DS02.ASM

01: START: MOV R0, #6 ;設(shè)左移6次

02: MOV A, #11111110B ;存入開始點(diǎn)亮燈位置

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

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

05: RL A ;左移一位

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

07: JMP START ;重新設(shè)定顯示值 主程序

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

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

10: SETB TR0 ; 啟動(dòng)TO開始計(jì)時(shí)

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

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

13: LOOP1: JBC TF0,LOOP2 ;TF0是1轉(zhuǎn)移至LOOP2并清0

14: JMP LOOP1

15:LOOP2: DJNZ R1,AGAIN ;R1不是0,則轉(zhuǎn)移至AGAIN (定時(shí)加軟

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

17: RET ; 子程序返回 延時(shí)子程序

18: END ; 程序結(jié)束

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

程序:DS03.ASM

01: ORG 0000H ; 起始地址

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

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

04: JMP EXT0 ; 跳到定時(shí)器中斷EXT0處

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

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

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

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

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

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

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

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

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

14: SETB TR0 ; 啟動(dòng)T0開始定時(shí)

15: SETB TR1 ; 啟動(dòng)T1開始計(jì)數(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 ; 結(jié)束程序結(jié)束



評(píng)論


技術(shù)專區(qū)

關(guān)閉