功能說明:
本文引用地址:
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)論