微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机汇编语言(五)

51单片机汇编语言(五)

时间:11-24 来源:互联网 点击:
定时器 计数器

功能说明:

开始时接在单片机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 ; 结束程序结束

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top