51单片机protues仿真学习:[18]中断概念

2025-10-18 15:34:32

PU在处理A 发生了B,请求CPU去处理 中断发生

处理过程:中断请求------中断响应-----中断返回

 52单片机有6个中断源:

     1.INT0,INT1外部中断0和1 ,有P3.2和P3.3端口引入,低电平和下降沿引起。

     2.T0 T1 T2 定时/计数器中断,有计数器计满回凌引起

     3.TI/RI串行口中断,串行端口完成一帧字符发送/接收引起

51单片机protues仿真学习:[18]中断概念

使用中断功能需要设置两个与中断有关的寄存器

   IE 中断允许寄存器

   IP 中断优先级寄存器

IE :

  D7----D6----D5----D4----D3----D2----D1----D0

  EA --无效---ET2---ES---ET1---EX1--ET0--EX0

EA---全局中断允许位 EA1开启 0关闭

ET2--定时/计数器2中断允许位    ET2=1,开启T2中断,0关闭

ES--串行口中断允许位  ES=1打开串行口中断,0关闭

ET1--定时/计数器1中断允许位    ET1=1,开启T1中断,0关闭

EX1-外部中断1中断允许位 EX1=1打开外部中断1中断,0关闭

ET0--定时/计数器0中断允许位    ET0=1,开启T0中断,0关闭

EX0- 外部中断0中断允许位 EX0=1打开外部中断1中断,0关闭

IP:

  D7----D6----D5----D4----D3----D2----D1----D0

 无效-无效--无效--PS----PT1---PX1--PT0--PX0

PS---串行口中断优先级控制位

  PS=1,串行口中断定义为高优先级中断

  PS=0,串行口中断定义为低优先级中断

PT1--定时器/计数器1中断优先级控制位

   PT1=1,定时器/计数器1中断定义为高优先级中断

   PT1=0,定时器/计数器1中断定义为低优先级中断

PX1--外部中断1中断优先级控制位

  PX1=1,外部中断1中断定义为高优先级中断

  PX1=0,外部中断1中断定义为低优先级中断

PT0--定时器/计数器0中断优先级控制位

   PT0=1,定时器/计数器0中断定义为高优先级中断

   PT0=0,定时器/计数器0中断定义为低优先级中断

PX0--外部中断1中断优先级控制位

  PX0=1,外部中断0中断定义为高优先级中断

  PX0=0,外部中断0中断定义为低优先级中断

不设置优先级别,按照默认的中断级别来操作,设置优先级别后,按照设置的顺序来响应。

定时器/计数器的实质是加1计数器(16位),有高8位和低8位的两个寄存器组成。

TMOD是 工作方式寄存器 确认工作方式和功能 (低8位)

TCON是控制寄存器,控制T0,T1的启动和停止及设置溢出标志。(高8位)

TMOD:

       D7----D6----D5----D4----D3----D2----D1----D0

      GATE-C/T---M1---M0---GATE-C/T---M1----M0

       ---------定时器1-----------------定时器0------------

GATE--门控制位

GATE=0;定时器/计数器启动与停止仅受TCON寄存器中TRX(X=0,1)来控制

GATE=1;定时器/计数器启动与停止仅受TCON寄存器中TRX(X=0,1)和外部中断引脚(INT0或INT1)上的电平状态来共同控制

C/T-定时器模式或者计数器模式选择位

C/T=1为计数器模式 C/T=0为定时器模式

M1M0--工作方式选择位

M1---M0----工作方式

--0-----0----方式0,为13位定时器/计数器

--0-----1----方式1,为16位定时器/计数器

--1-----0----方式2,8位初值自动重装的8位定时器/计数器

--1-----1----方式3,仅适用于T0。分成两个8位计数器,T1停止计算

TCON:

       D7----D6----D5----D4----D3----D2----D1----D0

      TF1---TR1--TF0---TR0---IE1---IT1----IE0----IT0

 TF1--定时器1溢出标志位,

当定时器1计满溢出时,由硬件使TF1置1,并且申请中断,进入中断服务程序后,由硬件自动清0,需要注意的是,

1  如果适用定时器的中断,那么该位完全不用人为去操作,

2  但是如果使用软件查询方式的话,方查询到该位置置1后,就需要用软件清0。

 TR1--定时器1运行控制位

       由软件清0关闭定时器1.当GATE=1,且INT1为高电平时,TR1置1启动定时器1;当GATE=0,TR1置1启动定时器1

 TF0--定时器0溢出标志位

 TR0--定时器0运行控制位

IE1--外部中断1请求标志

IT1--外部中断1请触发方式选择位

IE0--外部中断0请求标志

IT0--外部中断0请触发方式选择位

重点:原理框图

51单片机protues仿真学习:[18]中断概念

初值问题:

 以--0-----1----方式1,为16位定时器/计数器为例    假设时钟频率为12MZH

  12个时钟周期为1个机器周期,如果此时机器周期为1us的话,计满TH0和TL0的话就需要2的16次-1个数,在加一个数计数器就溢出,向CPU申请中断,因此65536us=65.536ms,如果要50ms的话,先给TH0和TL0装一个初值,,计满50000个数后定时器溢出 ,此时刚好就是50ms中断一次,我们定时1S的话,产生20次50ms就是1S

      要计满50000个数的

      TH0=(65536-50000)/256     求模

      TL0=(65536-50000)%256   求余

 总结如下:当定时器方式为1时,假设机器周为Tcy,定时器产生一次中断的时间为t,需要计数的个数为N=t/Tcy

   THX=(65536-N)/256 

   TLX=(65536-N)%256  

中断服务程序的写法:

    void 函数名()interrupt 中断号  using 工作组

       {

       中断服务程序内容

        }

     中断函数不能返回任何值,所以最前面用void 

  定时器程序 初始化过程如下:

  1,对TOMD赋值,以确认T0和T1的工作方式

  2,计算初值,并将初值写入TH0,TL0或TH1,TL0

  3,中断方式时,对IE赋值,开放中断

  4,使TR0或TR1置位,启动定时器/计数器定时或计数

最关键就是下面三句话

使用中断:你要做什么?

1.你想使用中断是哪个?选择相应的中断号

2.你所希望的触发条件是什么?

3.你希望在中断之后干什么?

补充

检测定时器溢出标志位法

  1,对TOMD赋值,以确认T0和T1的工作方式

  2,计算初值,并将初值写入TH0,TL0或TH1,TL0

  3,通过设置TCON来启动定时器,让其计数

  4,判断TCON寄存器TFX(0 1)位,检测定时器的溢出情况

(共篇)上一篇:按键开关小灯|下一篇:
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢