微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 利用定时器扩展中断接口

利用定时器扩展中断接口

时间: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反相一次


  2) 定时器的初值计算。TL0定时200ms,计数值为100,初值为156=9CH;TH0定时400ms,计数值为200,初值为56=38H。


  3) T0设为方式3,为两个独立的8位定时器TL0、TH0
  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语言的......汇编看不到啊!?

这个太好了,学习了,之前都不知道的饿

蛮不错的,确实

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

网站地图

Top