利用定时器扩展中断接口
时间:10-02
整理:3721RD
点击:
更多51单片机定时器知识请进入专题:http://bbs.elecfans.com/topic-dingshiqi.html
系统有两个外部中断INT0、INT1,当要求多于两个外部中断时,可用定时器来扩展当外中断用。
1)将定时器设为计数方式,给T0或T1置初值为满(FFH)
2)将要扩展的外中断接到P3.4(T0)或P3.5(T1)引脚上
3)当引脚上发生负跳变,T0或T1加1计数,并产生溢出中断。这样就把P3.4、P3.5 当外中断的输入线,定时器的中断标志位及中断服务程序就为外中断用了。
例:用T0扩展一个外中断。
T0设为计数方式,按方式2工作,TL0、TH0的初值送0FFH,T0允许中断。
MOV TMOD,#06H ;T0计数,方式2,
MOV TL0,#0FFH ;TL0赋初值
MOV TH0,#0FFH ;TH0赋初值
SETB EA ;开中断
SETB ET0 ;开T0中断
SETB TR0 ;启动T0工作
。
在P3.4(T0)引脚上来一个下降沿信号,TL0加1溢出,将TF0置1,向CPU申请中断,同时TH0中的值又自动装入TL0,下一次又来一个下降沿,又置TF0为1,又发中断。T0作为一个边沿触发的外中断源。
输出两路方波信号
某应用系统通过P1.0和P1.1分别输出周期为400 ms和800 ms的方波。为此系统选用定时器T0,定时方式3,主频为6MHz,机器周期为2 ms,经计算得定时常数为9CH和38H。解:1)P1.0输出周期为400 ms,只要每200 ms反相一次
TL0定时器溢出中断用T0的中断,T0全部控制位由T0占用
TH0定时器溢出中断用T1的中断,T1的溢出中断标志位TF1、T1的启/停位TR1被TH0占用。
编写两个中断服务程序,一个T0中断服务程序,TL0定时200ms到响应T0中断服务程序,对P1.0求反;另一个T1中断服务程序,TH0定时400ms到响应T1中断服务程序,对P1.1求反。
主程序
ORG 0000H ;主程序入口
LJMP PLT0
ORG 000BH ;T0中断服务程序入口
LJMP INT0P
ORG 001BH ;T1中断服务程序入口
LJMP INT1P
ORG 0030H
PLT0:MOV TMOD,#03H ;T0定时方式3,
MOV TL0,#9CH ;TL0定时器赋初值
MOV TH0,#38H ;TH0定时器赋初值
SETB EA ;开中断
SETB ET0 ;开T0中断
SETB ET1 ;开T1中断
SETB TR0 ;启动TL0工作
SETB TR1 ;启动TH0工作
SJMP $
中断服务程序:
;T0中断服务程序(TL0定时200 ms)
INT0P:MOV TL0,#9CH ;200 ms到中断,重赋初值
CPL P1.0
RETI
;T1中断服务程序(TH0定时400 ms)
INT1P:MOV TH0,#38H ;400 ms到中断,重赋初值
CPL P1.1
RETI
END
小编你太牛了!加个QQ呗!好好向你学习978863470.我学单片机有几个月了,还不是很熟练....
我是懂c语言的......汇编看不到啊!?
这个太好了,学习了,之前都不知道的饿
蛮不错的,确实