功用阐明:
开端时接在单片机P1端口中的P1.7亮,用守时器延时60ms后P1.6亮,如此向右移动,移到最右端P1.0亮后,又回到最左端从头开端向右移动,不断循环。
程序:DS01.ASM
01: START: MOV R0, #8 ;设右移8次
02: MOV A, #01111111B ;存入开端点亮灯方位
03: LOOP: MOV P1, A ;传送到P1并输出
04: ACALL DELAY ;调延时子程序
05: RR A ;右移一位
06: DJNZ R0, LOOP ;判别移动次数
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 ; 发生溢出,清标志位 守时延时
14: RET ; 子程序回来 子程序
15: END ; 程序完毕
功用阐明:
开端时P1.0亮,延时10秒后,左移至P1.1亮,如此左移到第6个灯(P1.5)亮后,再从头开端向左移动,1分钟循环一次。
程序:DS02.ASM
01: START: MOV R0, #6 ;设左移6次
02: MOV A, #11111110B ;存入开端点亮灯方位
03: LOOP: MOV P1, A ;传送到P1并输出
04: ACALL DELAY ;调延时子程序
05: RL A ;左移一位
06: DJNZ R0, LOOP ;判别移动次数
07: JMP START ;从头设定显现值 主程序
08:DELAY: MOV R1,#200 ;设置软件计数初值
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计时 件计数)
17: RET ; 子程序回来 延时子程序
18: END ; 程序完毕
功用阐明:选用两个守时器合用,T0设置为守时方法,T1设置为计数方法。T0守时时刻为50ms,计满发生的输出信号由P1.7口发光二极管显现。一起还将该信号输入到计数器T1(P3.5脚)作为T1的计数输入脉冲,当输入信号发生由1到0的跳变时触发计数器作业,使计数器的值增1。计数器T1的初始值设置为100,计满时所用的时刻为50ms×2×100,即10s。并由P1.0端口发光二极管来显现,所以P1.0端口的灯每10s点亮或平息一次。
程序:DS03.ASM
01: ORG 0000H ; 开端地址
02: JMP MAIN ; 跳到主程序MAIN处
03: ORG 000BH ; 守时器T0溢出进口地址
04: JMP EXT0 ; 跳到守时器中止EXT0处
05: ORG 001BH ; 计数器T1溢出进口地址
06: JMP EXT1 ; 跳到计数器中止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) ; 装入计数初值
12: MOV TH1, #(256-100);
13: MOV IE, #10001010B ; 开总中止及T0、T1中止
14: SETB TR0 ; 发动T0开端守时
15: SETB TR1 ; 发动T1开端计数
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 ; 完毕程序完毕