资料介绍
利用定时器和中断控制各种功能的程序代码分享
AJMP MAIN
ORG 000BH
AJMP T_0
ORG 001BH
AJMP T_1
ORG 0030H
MAIN:
MOV P0,#0FFH
MOV TMOD,#51H
MOV TH0,#15H
MOV TL0,#0A0H
MOV TH1,#0FCH
MOV TL1,#18H
MOV IE,#8AH
SETB TR0
SETB TR1
LL: SJMP LL
T_0:MOV TH0,#15H
MOV TL0,#0A0H
CPL P0.2
RETI
T_1:MOV TH1,#0FCH
MOV TL1,#18H
CPL P0.1
RETI
END
MOV TH1,R1 ;重装定时初值
MOV TL1,R0 ;
CPL P3.7 ;P1.0输出方波
RETI ;中断返回
ORG 100H ;主程序
START:MOV TMOD,#01H ;定时器T1工作方式1
MOV IE,#88H ;允许T1中断
MOV DPTR,#TAB ;表格首地址
LOOP:CLR A ;
MOVC A,@A+DPTR ;查表
MOV R1,A ;定时器高8为存R1
INC DPTR ;
CLR A ;
MOVC A,@A+DPTR ;查表
MOV R0,A ;定时器低8为存R0
ORL A,R1 ;
JZ NEXT0 ;全0为休止符
MOV A,R0 ;
ANL A,R1 ;
CJNE A,#0FFH,NEXT ;全1表示乐曲结束
SJMP START ;从头开始循环演奏
NEXT:MOV TH1,R1 ;装入定时值
MOV TL1,R0 ;
SETB TR1 ;启动定时器
SJMP NEXT1 ;
NEXT0:CLR TR1 ;关闭定时器停止发音
NEXT1:CLR A ;
INC DPTR ;
MOVC A,@A+DPTR ;查延迟常数
MOV R2,A ;
LOOP1:LCALL D200 ;调用延时200mS子程序
DJNZ R2,LOOP1 ;控制延迟次数
INC DPTR ;
AJMP LOOP ;处理下一个音符
D200:MOV R4,#81H ;延时20mS子程序
D200B:MOV A,#0FFH ;
D200A:DEC A ;
JNZ D200A ;
DEC R4 ;
CJNE R4,#00H,D200B ;
RET ;
TAB: DB 0FEH,25H,02H,0FEH,25H,02H;
DB 0FEH,84H,02H,0FEH,84H,02H;
DB 0FEH,84H,04H,0FEH,25H,04H;
DB 0FEH,25H,02H,0FEH,84H,02H;
DB 0FEH,0C0H,04H,0FEH,0C0H,04H;
DB 0FEH,98H,02H,0FEH,84H,02H;
DB 0FEH,57H,08H,00H,00H,04H;
DB 0FFH,0FFH;
END
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START: MOV P0,#0FFH ;关所有灯
MOV 30H,#00H ;
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0A0H ;以上两行预置立即数5536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H
MOV A,30H
CJNE A,#20,TIME1
CPL P0.0 ;取反P0.0
MOV 30H,#0
TIME1: MOV TH0,#15H ;重置定时常数
MOV TL0,#9FH
POP PSW
POP ACC
RETI
END
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START: MOV P0,#0FFH ;关所有灯
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#15H
MOV TL0,#0A0H ;以上两行预置立即数5536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
mov r7, #09H
djnz r7,start
TIME0: ;定时器0的中断处理程序
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
CPL P0.0 ;取反P0.0
MOV TH0,#15H
MOV TL0,#0A0H ;重置定时常数
POP PSW
POP ACC
RETI
END
AJMP START
ORG 0003H ;外部中断地直入口
AJMP INTO
ORG 30H
START: MOV SP,#5FH
MOV P0,#0FFH ;灯全灭
MOV P3,#0FFH ;P3口置高电平
SETB EA
SETB EX0
AJMP $
INTO:
PUSH ACC
PUSH PSW
CPL P0.0
POP PSW
POP ACC
RETI
END
ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 0030H
START: MOV P0,#0FFH ;关所有灯
MOV 30H,#00H ;软件计数器清零
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0A0H ;以上两行预置立即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H
INC 31H ;两个计数器都加1
MOV A,30H
CJNE A,#255,TNEXT ;30H单元中的值到了20了吗
CPL P0.0 ;到了,取反P0.0
MOV 30H,#0 ;清软件计数器
TNEXT:MOV A,31H
CJNE A,#40,TRET ;31H单元中的值到了40了吗
CPL P0.1
MOV 31H,#0 ;到了,取反P1.1并清零计数器,返回
TRET: MOV TH0,#15H ;重置定时常数
MOV TL0,#9FH
POP PSW
POP ACC
RETI
END
AJMP START
ORG 30H
START: MOV P0,#0FFH ;关闭所有的灯
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#15H
MOV TL0,#0A0H ;以上两行预置计数5336(15A0H)
SETB TR0 ;定时/计数器0开始运行
LOOP: JBC TF0,NEXT ;如果TF0等于1,则将TF0清0并转next处
AJMP LOOP ;否则跳转到LOOP处运行
NEXT: CPL P0.0 ;点亮P0.0灯
MOV TH0,#15H ;
MOV TL0,#0A0H ;重置定时/计数器的初值
AJMP LOOP
END
1、两个定时计数器合用的延时实验
ORG 000HAJMP MAIN
ORG 000BH
AJMP T_0
ORG 001BH
AJMP T_1
ORG 0030H
MAIN:
MOV P0,#0FFH
MOV TMOD,#51H
MOV TH0,#15H
MOV TL0,#0A0H
MOV TH1,#0FCH
MOV TL1,#18H
MOV IE,#8AH
SETB TR0
SETB TR1
LL: SJMP LL
T_0:MOV TH0,#15H
MOV TL0,#0A0H
CPL P0.2
RETI
T_1:MOV TH1,#0FCH
MOV TL1,#18H
CPL P0.1
RETI
END
2、利用定时器演奏音乐
ORG 001BH ;定时器T1的中断入口MOV TH1,R1 ;重装定时初值
MOV TL1,R0 ;
CPL P3.7 ;P1.0输出方波
RETI ;中断返回
ORG 100H ;主程序
START:MOV TMOD,#01H ;定时器T1工作方式1
MOV IE,#88H ;允许T1中断
MOV DPTR,#TAB ;表格首地址
LOOP:CLR A ;
MOVC A,@A+DPTR ;查表
MOV R1,A ;定时器高8为存R1
INC DPTR ;
CLR A ;
MOVC A,@A+DPTR ;查表
MOV R0,A ;定时器低8为存R0
ORL A,R1 ;
JZ NEXT0 ;全0为休止符
MOV A,R0 ;
ANL A,R1 ;
CJNE A,#0FFH,NEXT ;全1表示乐曲结束
SJMP START ;从头开始循环演奏
NEXT:MOV TH1,R1 ;装入定时值
MOV TL1,R0 ;
SETB TR1 ;启动定时器
SJMP NEXT1 ;
NEXT0:CLR TR1 ;关闭定时器停止发音
NEXT1:CLR A ;
INC DPTR ;
MOVC A,@A+DPTR ;查延迟常数
MOV R2,A ;
LOOP1:LCALL D200 ;调用延时200mS子程序
DJNZ R2,LOOP1 ;控制延迟次数
INC DPTR ;
AJMP LOOP ;处理下一个音符
D200:MOV R4,#81H ;延时20mS子程序
D200B:MOV A,#0FFH ;
D200A:DEC A ;
JNZ D200A ;
DEC R4 ;
CJNE R4,#00H,D200B ;
RET ;
TAB: DB 0FEH,25H,02H,0FEH,25H,02H;
DB 0FEH,84H,02H,0FEH,84H,02H;
DB 0FEH,84H,04H,0FEH,25H,04H;
DB 0FEH,25H,02H,0FEH,84H,02H;
DB 0FEH,0C0H,04H,0FEH,0C0H,04H;
DB 0FEH,98H,02H,0FEH,84H,02H;
DB 0FEH,57H,08H,00H,00H,04H;
DB 0FFH,0FFH;
END
3、利用定时器通过延长定时方法实现灯的闪烁
ORG 0000HAJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START: MOV P0,#0FFH ;关所有灯
MOV 30H,#00H ;
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0A0H ;以上两行预置立即数5536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H
MOV A,30H
CJNE A,#20,TIME1
CPL P0.0 ;取反P0.0
MOV 30H,#0
TIME1: MOV TH0,#15H ;重置定时常数
MOV TL0,#9FH
POP PSW
POP ACC
RETI
END
4、利用中断方式实现灯的闪烁
ORG 0000HAJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START: MOV P0,#0FFH ;关所有灯
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#15H
MOV TL0,#0A0H ;以上两行预置立即数5536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
mov r7, #09H
djnz r7,start
TIME0: ;定时器0的中断处理程序
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
CPL P0.0 ;取反P0.0
MOV TH0,#15H
MOV TL0,#0A0H ;重置定时常数
POP PSW
POP ACC
RETI
END
5、外部中断实验
ORG 0000HAJMP START
ORG 0003H ;外部中断地直入口
AJMP INTO
ORG 30H
START: MOV SP,#5FH
MOV P0,#0FFH ;灯全灭
MOV P3,#0FFH ;P3口置高电平
SETB EA
SETB EX0
AJMP $
INTO:
PUSH ACC
PUSH PSW
CPL P0.0
POP PSW
POP ACC
RETI
END
6、利用软件定时器实现灯的闪烁
;用软件定时器实现P0.0口所接灯按1S/次而P0.1口所接灯按2S/次闪烁ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 0030H
START: MOV P0,#0FFH ;关所有灯
MOV 30H,#00H ;软件计数器清零
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0A0H ;以上两行预置立即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H
INC 31H ;两个计数器都加1
MOV A,30H
CJNE A,#255,TNEXT ;30H单元中的值到了20了吗
CPL P0.0 ;到了,取反P0.0
MOV 30H,#0 ;清软件计数器
TNEXT:MOV A,31H
CJNE A,#40,TRET ;31H单元中的值到了40了吗
CPL P0.1
MOV 31H,#0 ;到了,取反P1.1并清零计数器,返回
TRET: MOV TH0,#15H ;重置定时常数
MOV TL0,#9FH
POP PSW
POP ACC
RETI
END
7、利用定时器实现灯的闪烁
ORG 0000HAJMP START
ORG 30H
START: MOV P0,#0FFH ;关闭所有的灯
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#15H
MOV TL0,#0A0H ;以上两行预置计数5336(15A0H)
SETB TR0 ;定时/计数器0开始运行
LOOP: JBC TF0,NEXT ;如果TF0等于1,则将TF0清0并转next处
AJMP LOOP ;否则跳转到LOOP处运行
NEXT: CPL P0.0 ;点亮P0.0灯
MOV TH0,#15H ;
MOV TL0,#0A0H ;重置定时/计数器的初值
AJMP LOOP
END
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 利用定时器中断方式控制led灯的闪烁速度_项目四 定时器和中断概念的基本认识...
- 定时器中断实验
- 51单片机中断主要关于计时--定时--计算定时器初值--的简介 ~~~看到的关于中断 计时器/定时器的介绍,觉得
- 51单片机自学笔记定时器中断
- 51单片机:开启中断和定时器
- 51单片机入门教程(5)——定时器中断
- 定时器延时控制电机驱动程序下载 21次下载
- 使用单片机实现定时器的程序代码免费下载
- PIC单片机定时器的外设中断的使用程序免费下载
- 使用单片机的中断及定时器实现时钟功能的程序和资料免费下载
- 使用51单片机定时器中断控制LED灯亮1S的程序免费下载
- 同时使用两个定时器控制蜂鸣器发声的程序代码免费下载
- 定时器中断程序资料合集免费下载 1次下载
- 各种定时器的功能设置 3次下载
- 中断和定时器/计数器
- 51单片机定时器和中断的介绍 2024次阅读
- 利用定时器中断代替延时函数(包含例程+原理思想) 3224次阅读
- 如何使用MAXQ微控制器上的定时器B生成PWM波形 689次阅读
- MAXQ微控制器中断编程 586次阅读
- 如何利用定时器产生PWM波 3659次阅读
- 基于定时器和计数器改善微控制器的设计性能 908次阅读
- 在应用程序中使定时器或计数器改善微控制器的应用功能 1456次阅读
- stm32定时器中断与误区 2.7w次阅读
- 8051单片机定时器溢出中断与CPU响应中断的时间误差分析 3969次阅读
- 51单片机定时器控制LED灯 1w次阅读
- 51单片机内部定时器和中断系统以及编写第一个简单的定时器实验程序 4w次阅读
- 详细介绍定时器和定时器中断 1.7w次阅读
- stm32定时器中断程序 1.3w次阅读
- 单片机必须了解的外设功能——定时器/中断功能 7178次阅读
- 有循环控制功能的定时器 2136次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 651单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 751单片机大棚环境控制器仿真程序
- 1.10 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多