中断系统与定时/计数计时器

          

    

      

                  

1. 外部中断

1.1统计 INT0 的脉冲触发的个数,满10个,则停止统计将P1.0清0

ORG 0000H
LJMP START
ORG 0003H
LJMP EXINT0
ORG 0100H
START: 
	SETB IT0; set TCON
	SETB EA; set IE
	SETB EX0;

	MOV R0,#10
	SETB P1.0
HERE:SJMP HERE

EXINT0:
	DJNZ R0,QUIT
	CLR P1.0
    CLR EX0	;关闭INT0中断
QUIT:RETI
END
ORG 0000H
LJMP START
ORG 0003H
LJMP EXINT0
ORG 0100H
START: 
    MOV A,#0
	SETB IT0; set TCON
	SETB EA; set IE
	SETB EX0;
	SETB P1.0
SJMP $

EXINT0:
	INC A
	CJNE A,#10,QUIT
	CLR P1.0
    CLR EX0	;关闭INT0中断
QUIT:RETI
END

1.2 某大楼内设置了4个监测点,2个监测点安装了2个烟雾检测器,另2个监测点安装了2个煤气检测器,监控室由4个指示灯分别显示每个检测点的状态。当有意外发生时,相应的指示灯亮,发出报警。设计一个以89C51单片机为核心的检测系统实现上述检测功能。

                                             

ORG 0000H
LJMP START
ORG 0003H
LJMP EXINT0
ORG 0013H
LJMP EXINT1
ORG 0100H
START: 
  SETB EA
  SETB ET0
  SETB ET1
  SETB EX0
  SETB EX1
  MOV P1,#0FFH  
SJMP $

EXINT0:
  JB P1.0,NEXT1
  CLR P1.4
  NEXT1:JB P1.1,QUIT
  CLR P1.5
  LJMP QUIT
EXINT1:
  JB P1.2,NEXT2
  CLR P1.6
  NEXT2:JB P1.3,QUIT
  CLR P1.7
  LJMP QUIT
QUIT:RETI

END

2.定时/计数功能

对机器周期进行计数,每个机器周期计数器+1,直到计数器溢出

写入控制字的次序:

  • 工作方式控制字写入TMOD寄存器;TMOD 不能位选
  • 定时/计数初值装入TL0TH0(或TL1TH1);
  • 置位ET0(或ET1,允许定时器/计数器中断; 
  • 置位EA开放总中断;
  • 置位TR0(或TR1以启动计数

2.0 工作方式0

            

2.1 工作方式1

             

2.1.0 设单片机的晶振频率为11.0592MHz,使用T1方式1产生频率为131Hz的方波型音频信号(低音的Do),并由P1.0输出给与其相连的喇叭。

ORG 0000H
LJMP START
ORG 001BH
LJMP INTT1
ORG 0100H
START: 
	MOV TMOD,#00010000B
	SETB EA
	SETB ET1
	MOV TH1,#0F2H
	MOV TL1,#42H
	SETB TR1
SJMP $

INTT1:
  CPL P1.0
  MOV TH1,#0F2H
  MOV TL1,#42H
  RETI 

END

2.2 工作方式2 p160

2.2.1 设系统时钟频率为12MHz,用定时器/计数器T0编程实现从P1.0输出周期为500μs的方波

解:由于时钟频率为12MHZ,机器周期为1µsP1.0输出周期为500μs的方波,只需P1.0250μs取反1次即可。定时/计数器T0选择工作方式2。首先求出定时器T0初值。

        因为:t =2^8-T0初值)× 机器周期

        所以,当t = 250μs时,

        则:(2^8-T0初值)× 1 × 10^(-6) = 2.5 × 10^(-4)

解得:T0初值 = 6TH0 = TL0 = 6

ORG 0000H
LJMP START
ORG 000BH
LJMP INTT0
ORG 0100H
START: 
	MOV TMOD,#00000010B
	MOV TH0,#06H
	MOV TL0,#06H
	SETB ET0
	SETB EA
	SETB TR0
SJMP $

INTT0:
  CPL P1.0
  MOV TH0,#06H
  MOV TL0,#06H
  RETI 

END

2.2.2 有一自动罐装药粒系统,每瓶罐装药粒50,每片药粒灌装时产生一个负脉冲送T0计数;每满一瓶,累加器A1,若满100,则由与P1.0口相连的LED给出一个装箱信号,然后停止计数。要求用T0以工作方式2计数。

解:(1)计算计数初值

                设待求的计数初值为X,则:

                       X 2^8-50

                得:  X=206

                则:  TH0=206TL0206

2TMOD寄存器初始化

ORG 0000H
LJMP START
ORG 000BH
LJMP INTT0
ORG 0100H
START: 
	MOV TMOD,#00000110B
	SETB EA
	SETB ET0
	MOV TH0,#206
	MOV TL0,#206
	MOV R0,#100
	SETB TR0
SJMP $

INTT0:
  DJNZ R0,QUIT
  CLR P1.0
  CLR TR0 
QUIT:RETI 

END
ORG   0000H                ;主程序
LJMP  START
ORG   000BH
LJMP  T0INT
ORG  0100H                 ;初始化
START:MOV    TMOD,#6H
      MOV    TH0,#206H
      MOV    TL0,#206H
      SETB   P1.0
      SETB   EA
      SETB   ET0
      MOV    A,#0
      SETB   TR0
;循环判断          
LOOP: CJNE  A, #100, NEXT
      CLR    P1.0   ;亮灯
      CLR    TR0   ; 停止计数
   NEXT:SJMP LOOP  
;中断程序
T0INT: INC A              ;计数+1
       RETI
END

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值