定时计数器中断实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时/计数器中断实验
实验一:定时实验。
P0口发光管交*闪亮(闪亮速率由定时器定时并通过中断实现)。
分析:主程序只需做好初始化的工作即可,在周期性执行的中断子程序里改变P0口的发光管状态,实现交*闪亮。
;***********************************************************
Org 0000H
Ljmp main
Org 000BH
Ljmp T0_int
;主程序
Org 0030H
Main: Mov tmod,#00000001B ;选用T0,定时,方式1
Setb et0 ;开T0单级中断
Setb ea ;开总中断
Setb tr0 ;启动T0
Mov p0,#01010101B ;P0口发光管交*亮NextStep: sjmp NextStep ;此处代表主程序去忙其它事了。
;定时器中断子程序
T0_int: mov a,p0 ;读入P0口内容
Cpl a ;将各位取反
Mov p0,a ;再送回P0口,实现交*点亮
Reti
End
;思考题:
;1)。此实验发光管闪亮间隔约为65.5ms,若定闪亮间隔为30ms,应怎样修改?
;2)。若想实现长延时,如1S、10S、1分、1小时等,应如何编程?
;参考定时器中断子程序(1S)
T0_int: Mov th0,#3ch
Mov tl0,#0b0h ;预置常数15536,实现50ms定时
Inc r7
Cjne r7,#20,T0_end ;不够1秒退出
Mov r7,#0 ;够1秒将r7清0,为下一秒做准备
Mov a,p0 ;读入P0口内容
Cpl a ;将各位取反
Mov p0,a ;再送回P0口,实现交*点亮T0_end: Reti
End
;**************************************************************** 2.定时/计数器中断实验2
实验二:计数实验
T0的计数脚P3.4接有一开关模拟计数输入,单片机应随时将输入情况通过P0口显示出来,当输入满100个数时,单片机声音提示。同时继续下一次的计数,循环往复。
分析:由于只计100个数,可选方式2,自动重新装载方式,预置常数156;在主程序里做完初始化工作后,可以不断地读取TL0的值并送P0口显示;而在中断子程序里启动声音提示(最好2秒后关闭声音提示)。
;**************************************************************** Org 0000H
Ljmp main
Org 000BH ;T0的中断矢量
Ljmp T0_int
Org 001BH
Ljmp T1_int ;T1的中断矢量
;主程序
Org 0030H
Main: Mov tmod,#00010110B ;选用T0,计数,方式2
;选用T1,定时,方式1
Mov th0,#156
Mov tl0,#156 ;为T0预置初始值156
Mov th1,#3cH
Mov tl1,#0b0H ;为T1预置初始值15536
Setb et0 ;开启T0中断
Setb ea ;开总中断
Setb tr0 ;启动T0计数
Loop: Mov a,tl0 ;读取T0的计数值,送A寄存器Mov P0,a ;再送P0口显示
Sjmp Loop
;**************************************************************** ;T0中断子程序,完成声音提示,开T1中断启动2秒定时
T0_int: Setb et1 ;开启T1中断
Setb tr1 ;启动T1定时器
Clr p1.4 ;开启声音提示
Mov r7,#0 ;设置2秒定时的计数器
Reti
;**************************************************************** ;T1中断子程序,完成2秒钟声音的短促发声后关闭T1中断
T1_int: Mov th1,#3cH
Mov tl1,#0b0H ;为T1预置初始值15536
Cpl p1.4 ;使声音短促发声,周期100ms
Inc r7
Cjne r7,#40,T1_end ;够2秒了吗?(40次中断是2秒)
Setb p1.4 ;停止声音
Clr et1 ;关闭T1中断
T1_end: Reti