微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机中断学习

51单片机中断学习

时间:10-02 整理:3721RD 点击:
  • 关键词: 单片机 中断 学习
  • 摘要:一、中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二、中断源

一、中断的概念
      CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
       CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);更多学习资料可以加Q群310341439

      待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断

二、中断源    在51单片机中有5个中断源

    中断号          优先级                    中断源                    中断入口地址

       0               1(最高)             外部中断0                    0003H

       1               2                         定时器0                       000BH

       2               3                         外部中断1                    0013H

       3               4                         定时器1                       0018H

       4               5                         串口总段                      0023H


三、中断寄存器


      单片机有10个寄存器主要与中断程序的书写控制有关


      1.中断允许控制寄存器IE


      2.定时器控制寄存器TCON


      3.串口控制寄存器SCON


      4.中断优先控制寄存器IP


      5.定时器工作方式控制寄存器TMOD


      6.定时器初值赋予寄存器(TH0/TH1,TL0/TL1)寄存器详细


四、寄存器功能与赋值说明


      注:在用到中断时,必须要开总中断EA,即EA=1。  //开总中断


      1.中断允许控制寄存器IE


        EX0(EX1):外部中断允许控制位

        EX0=1 外部中断0开关闭合   //开外部0中断
        EX0=0 外部中断0开关断开

        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        EX0=0 外部中断0开关断开


        ET0(ET1):定时中断允许控制位


        ET0=1 定时器中断0开关闭合 //开内部中断0

        ET0=0 定时器中断0开关断开
        ES: 串口中断允许控制位     

        ES: 串口中断允许控制位     


        ES: 串口中断允许控制位     


        ES: 串口中断允许控制位


        ES=1 串口中断开关闭合


        //开串口中断


        ES=0 串口中断开关断开   


        2.定时器控制寄存器 TCON

        //控制外部中断和定时器中断


        外部中断:


        IE0(IE1):外部中断请求标志位


        当INT0(INT1)引脚出现有效的请求信号,此位由单片机自动置1,cpu开始响应,处理终端,而当入


        中断程序后由单片机自动置0.        //外部中断,即外部中断相应的引脚接入低电平或下降沿信号时,中断开始响应。            IT0(IT1):外部中断触发方式控制位                   //选择有效信号


        IT0(IT1)=1:脉冲触发方式,下降沿有效。


        IT0(IT1)=0:电平触发方式,低电平有效。


        内部中断:


        TF0(TF1):内部定时器/计数器溢出中断标志位


        当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中

        断程序后由单片机自动置0.     //内部中断实际上就是利用内部的计数器,只不过提供计数的脉冲来自单片机自身。

        TRO(TR1):定时器/计数器启动位                    //启动定时器

        TRO(TR1)=1; 启动定时器/计数器0

        TR0(TR1)=0; 关闭定时器/计数器0     

        3.串口控制寄存器SCON

        TI:串行口发送中断标志位

        当单片机串口发送完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,

        必须由用户在中断服务中用软件清0.

        RI:串行口接收中断标志位

        当单片机串口接收完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,    必须由用户在中断服务软件中用软件清0.     (IP以后补上,TMOD,TL0/TH0 在定时器/计数器中讲)

五、中断结构图:

六、定时器/计数器

        1.计数的定义:

        计数是指对外部事件进行计数,外部事件的发生以输入脉冲的形式表示,因此计数功能的实质就是对外来的脉冲进行计数,在单片机中对应引脚T0和T1,两个脉冲输入端。        外部输入的脉冲在负跳变时有效(即外部脉冲由1变化到0),计数器加1.

        2.定时器:

        定时器是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机的内部,因此定时器的实质是对内    部脉冲的计数,在单片机中,每个机器周期产生一次计数脉冲,计数器加1.

        3.工作方式控制寄存器TMOD:

        TMOD的低半字节(D0,D1,D2,D3)用来控制定时器/计数器0

        TMOD的高半字节(D4,D5,D6,D7)用来控制定时器/计数器1

         对TMOD中的内容说明:        GATE——门控制。   

         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。

         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。


         GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   
             当INT0引脚为高电平时TR0置位,启动定时器T0;   
             当INT1引脚为高电平时TR1置位,启动定时器T1。   
         GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。        C/T——功能选择位   
           C/T=0时为定时功能,C/T=1时为计数功能。     
        M0、M1——方式选择功能   
        由于有2位,因此有4种工作方式         

       4.根据单片机晶振,所选TMOD的的工作方式,所要定的时间,来确定THO和TLO所要赋予的初值    (以12M晶振,工作方式1,16位计数器为例,设所定时间为Xus(16为计数器最大数65536,即65536us,若所定时间大于65535,则要用if语句控制,现假设X<65535))< span="">


       1.时钟周期的时间t=1/12M=1/12 us


       2.机器周期的时间T=12*1/12=1 us


       3.因为每经过一个机器周期计数器 1,所以,计数器 1,经过的时间为 1 us。


       若所定时间为X,则要求经过Xus,中断响应,又因为16为计数器要全部置1(即达到65535) 1后,中断才会 响应,所以,初值=(65536-X)

       4.将初值转化为16进制码,分别付给THO和TLO     eg:所定时间5ms         初值=(65536-5000)=60536=EC78             TH0=0XEC; TL0=0X78;     (当工作方式不同时,TH0/TL0的赋值也不同,个人觉得有了16位计数器了,其余的没什么用,不介绍了)  5.写程序时另一种THO/TLO赋值方法     TH0=(65536-20000)/256;     
        TL0=(65536-20000)%6;

     TL0=(65536-20000)%6;


     TL0=(65536-20000)%6;


     TL0=(65536-20000)%6;


     TL0=(65536-20000)%6;


     TL0=(65536-20000)%6;

    这样设置,每经过20ms,发生一次中断,中断时间一般以秒为单位,所以经过n次中断即可。
 


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

网站地图

Top