当前位置: 首页 > news >正文

单片机的中断系统(单片机)

目录

一、中断系统的基本概念

二、中断系统的控制

三、中断系统应用举例

1.实现方法   

2.程序设计

主要看注释


 

一、中断系统的基本概念


1、中断源


        要让单片机停止当前的程序去做其他事情,需要向它发出请求信号,CPU接收到中断请求信号后才能产生中断。让CPU产生中断的信号称为中断源(又称中断请求源)。

      

2、中断的优先级别


外部中断INTO(最高)

定时器T0

外部中断INT1

定时器T1

串行口通信中断RI或TI(最低)

3、中断服务函数的格


函数类型 函数名(形式参数列表)

例如:void Time0(void) interrupt 1 using 0 

//定时器T0的中断服务函数,T0的中断编号为1,使用第0组工作寄存器

        interrupt后面的n是中断编号,n的取值范围为0~4,using中的m表示使用的工作寄存器组号。

4、中断的处理过程


        CPU处理事件的过程称为CPU的中断响应过程,对事件的整个处理过程称为中断处理。再接着继续执行被中断的程序,这称为中断返回。

        

5、5个中断请求源


1 )外部中断请求源 ,由 P3.2 引脚输入。
2 )外部中断请求源 ,由 P3.3 引脚输入。
3 )定时器 / 计数器溢出中断请求源 T0
4 )定时器 / 计数器溢出中断请求源 T1
5 )串行口中断请求源 TI RI

6、中断源寄存器


        80C51单片机的中断源寄存器2个,即定时器/计数器控制寄存器TCON串行通信控制寄存器SCON。它们的功能是可以向CPU发出中断请求。

7、中断允许寄存器


       80C51单片机有1中断允许寄存器IE,其功能是控制各个中断请求能否通过,即是否允许使用各个中断。

8、中断优先级控制寄存器


80C51单片机有1个中断优先级寄存器IP,其功能是设置每个中断的优先级。

二、中断系统的控制


1、定时器/计数器控制寄存器TCON


        TCON的功能是接收外部中断源(INT0、INT1)定时器/计时器(T0、T1)送来的中断请求信号。其字节地址为88H可位操作。该寄存器中有定时器/计数器T0T1的溢出中断请求标志位TF1TF0,外部中断请求标志位IE0IE1

TCON寄存器中与中断系统有关的各标志位的功能

1IT0IT1:外部中断的触发方式控制位,可由软件进行置位和复位。

        以外部中断为例,IT1=0时, 为低电平触发方式,即“0”到来即触发外中断 IT1=1时, 为负跳变触发方式,即由“1”到“0”跳变时触发外中断 。

2 IE0 IE1 :外部中断 的中断请求标志位。
        以外部中断为例,当外部有中断请求信号(低电平或负跳变)输入 P3.3 引脚时,寄存器 TCON IE1 会被硬件自动置“ 1 ”。 在CPU响应中断后, IE1自动清0。
3 TF0 TF1 :定时器 / 计数器 T0 T1 的中断请求标志。
         当定时器/计数器工作产生溢出时 ,会将 TF0 TF1 位置“ 1 ”。 以定时器T0为例,当T0溢出时,TF0置“1”,同时向CPU发出中断请求。 CPU 响应中断后, TF0 自动清 0 。注意和定时器查询方式的区别:查询到 TF0 置“ 1 ”后,需由软件清 0
在单片机复位时,寄存器TCON的各位均被初始化为“0”

2、串行通信控制寄存器SCON


 SCON的功能主要是接收串行通信口送到的中断请求信号。

3、IE中各位的功能如下


EA :中断允许总控制位
ES :串行口中断允许
ET1 :定时器 / 计数器 T1 的溢出中断允许位
EX1 :外部中断 1 中断允许位
ET0 :定时器 / 计数器 T0 的溢出中断允许位
EX0 :外部中断 0 中断允许位

1)用位操作

          EA=1;     //CPU开总中断

         ET0=1;    //允许定时器/计数器T0溢出中断

2)用字节操作

         IE=0x82;  //IE=1000 0010B,即EA=1ET0=1

三、中断系统应用举例


1.实现方法   


       将定时器T0设置为工作方式1,而要使T0作为中断源,必须开总中断开关EA和T0的 “分支”开关“ET0”,然后还要将TR0位置“1”以启动定时器T0。

2.程序设计


主要看注释

#include<reg51.h>
sbit D1=P1^7;

void main(void)              //总函数

{


EA=1;                   //开总中断

ET0=1;                  //定时器T0中断允许        

TMOD=0x01;            //使用定时器T0的模式1

TH0=(65536-46083)/256;   //定时器T0的高8位赋初值

TL0=(65536-46083)%256;  //定时器T0的低8位赋初值

TR0=1;                 //启动定时器T0

A=0xfe;

D1=A;

    while(1) ;               //无限循环,等待中断

      

 }


void Time0(void) interrupt 1 using 0    	//“interrupt”声明函数为中断服务函数
           //其后的“1”为定时器T0的中断编号;“0”表示使用第0组工作寄存器 
 {
    A=<<1;                 //数据左移1位
    if(A!=0xff)
       A=|1;                  //数据末位置1 
    else
      A=0xfe;               //数据置初始值     
      D1==A;             	     //实现显示
      TH0=(65536-46083)/256;   //定时器T0的低8位重新赋初值
      TL0=(65536-46083)%256;   //定时器T0的低8位重新赋初值
 }

相关文章:

  • Spark 集群搭建(多种方式)
  • 学会用Linux用户管理命令
  • python基本数据类型
  • python 基于PHP在线音乐网站
  • 【Java-----File类详解】