【STC51单片机自学笔记】——[中断系统]

1.微机的输入输出方式

CPU与外设交换信息方式有以下几种:

(1).程序控制方式    (2).中断方式    (3).直接存储器存取DMA方式

    (1)程序控制方式又分为:无条件传送、条件传送

        无条件传送主要针对简单外设进行简单操作。优点是程序不必检查外设的状态,就可以进行输入输出。缺点是CPU与外设工作不同步时,传输数据不可靠,仅适用于慢速设备。

        条件传送是CPU在传送数据之前,先执行一条输入命令,读取外设状态口中的内容,了解外设当前状态,判断其是否准备好数据传输。如果准备好,就传输数据,如果没有,继续查询等待,直到准备好为止。优点是通用性好。缺点是降低CPU效率。

    程序控制方式缺点:1主机和外设只能串行工作2各个外设只能进行串行的工作,主机在一段时间内只能和一台外设交换数据。

    (2)引入中断目的:为了使CPU和外设同时并行工作,提高系统效率,特备是发挥CPU高速运算能力,引入中断概念。

        中断传送方式:可以实现外设和CPU并行工作,大大提高CPU利用率。缺点:外设的启动、控制仍需要由CPU完成,这些操作和数据传送没有直接的关系,花费了CPU的不少时间,造成数据传输率的降低。为此又提出了外设和存储器之间直接传送数据的方式,即所谓的DMA。

    (3)DMA:适用于在存储器和外设之间进行大规模数据传送的方式。传送过程不需要CPU的参与。当进行DMA传送时,CPU只需要对DMAC进行初始化后,让出总线。外设和存储器之间的传送过程由DMAC进行控制,直到传送结束为止。

2.中断概念

    当CPU正在处理某件事情的时候,外部或者内部发生的某一事件请求CPU迅速去处理,于是CPU暂时中断当前工作,转去处理所发生的事件,处理完该事件后,再返回到原来被中断的地方继续原来的工作,这样的过程称为中断。

    引起CPU中断的内部或外部事件就是中断源。中断源向CPU发起的处理请求叫中断请求中断申请。CPU暂时中止正在处理的事情,转去处理突发事件的过程,称为CPU的中断响应过程。实现中断功能的部件称为中断系统。CPU响应中断后,处理中断事件的程序称中断服务程序。在CPU暂时中止执行的程序,转去执行中断服务程序前的PC值即为断点地址。CPU执行完中断服务程序后回到断点的过程称为中断返回

    引入中断后,主要功能有:

        1)  CPU与外设同步工作

        2)  实时处理

        3)  故障处理

3.MCS-51中断结构

    (1)      结构框图

            

    (2)    MCS-51的中断源

6个中断源:“INT0’(Pin3.2)”、“INT1’(Pin3.3)”、片内定时器/计数器“0”、“1”、“2”的溢出中断请求、“片内串行口发送/接收的中断请求”。

  (3)  寄存器

        ①定时器0/1+外部中断控制寄存器TCON:控制定时器T0/T1的寄存器

            功能:控制其启动/停止,锁存T0/T1溢出中断标志和两个外部中断源的中断标志。

            IT0/IT1(中断触发方式控制位) =0时外部中断为低电平触发方式;IT0/IT1 =1时外部中断为下降沿触发方式。

            IE0/IE1(中断请求标志位)触发时相应的变为高电平;IE0/IE1:非触发时为低电平。

            TF0/TF1(定时器/计数器0/1溢出标志位):定时器/计数器计满时,由硬件使它置位,如中断允许则触发中断,之后由内部硬件电路自动清零。

            TR0/TR1(定时器/计数器0/1启动控制位):功能如名。

        ②串行口控制寄存器SCON:

            TI(串行口发送中断标志位):TI=1,通知CPU传送结束。

            RI(串行口接收中断标志位):RI=1,通知CPU取数据。

            无论哪个标志位置“1”,都请求串行口中断。串行口中断响应后,不能由硬件自动清零,必须由软件对TI或RI清零。

        ③中断允许寄存器IE:

            EA(中断总允许位):=1时开放中断,=0时屏蔽所有中断。

            ET0/ET1/ET2(定时器/计数器0/1/2的溢出中断允许位):=1时相应计数器/定时器允许中断,=0时禁止中断。

            EX0/EX1(外部中断INT0/INT1中断允许位):=1时禁止中断,=0时相应允许中断。

            ES(串口中断允许位):=1时允许串行口中断,=0时禁止中断。

        ④中断优先级控制寄存器IP:每个中断源由两级优先级控制:高与低。

            一般寄存器相应位=0时优先级为低,反之=1时为高。

            同级别优先级也有默认优先顺序,由高到低依次为:外部中断0、定时器/计数器0中断、外部中断1、定时器/计数器1中断、串行口中断、定时器/计数器2中断。

        控制原则:

            a.    正在进行的中断过程不能被新的同级或低优先级中断请求所中断,一直到该中断服务程序结束,返回主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。

            b.    低优先级中断请求不能打断高优先级别的中断服务;反之,则可以,从而实现两级中断嵌套。

            c.    CPU同时接收到几个中断请求时,首先响应优先级别最高的中断请求。如果是同级中断,则按照默认优先顺序确定哪个中断请求被响应。

4.中断响应及处理过程

    中断处理过程一般分为三个阶段:中断响应、中断处理、中断返回

    函数与中断函数有着本质的区别:

        ●  函数的访问是在主程序中设定好的,中断是随机的

        ●  函数和中断程序都是以函数形式存在,中断的调用看不到调用语句,是自动调用的,汇编中函数调用是用LCALL指令

        ● 中断程序是在允许中断情况下,是在设置中断允许语句后随机调用的

        ●  中断是可以屏蔽的,函数一旦调用就要被执行

        ●  汇编语言中,中断服务程序系统分配固有的入口地址

        ●  汇编指令中,函数的返回是RET指令,而中断服务的返回是RETI指令,两者都能正确的返回原程序的断点处继续往下执行,但两者的职能略有不同

    中断响应的条件:

        ●  中断源由中断请求

        ●  中断总允许位EA=1

        ●  发出中断请求的中断源的中断允许控制位为1

(这三条,是必要条件。在此基础上,如果有下列任意一种情况存在,中断响应都会受到阻断):

        ●  CPU正在执行一个同级别或者高优先级的中断服务程序

        ●  正在执行的指令尚未执行完

        ●  正在执行中断返回指令RETI或者对寄存器IE、IP进行读/写指令,CPU在执行完上述指令后,要再执行一条指令,才能响应中断请求

    注意:除定时器/计数器2以及串行口RI/TI的请求标志位外,其余中断请求标志位在调用中断服务子程序后,会被硬件自动的复位。而定时器/计数器2以及串行口RI/TI需要在中断服务子程序中安排清除标志位指令,否则会产生二次中断情况。

    中断响应时间一般在3~8个机器周期,对于实时性要求高的系统,该误差要加以考虑。

    C语言中断服务程序结构:

Voidint0_int(void) interrupt n    //n为中断号
{
 put your codes
}

    中断服务程序初始化步骤:

    主程序中:

    a.       根据需要确定各中断源的优先级别;

    b.       根据需要确定外部中断的触发方式,设置定时器控制寄存器TCON中相应的IT0/IT1;

    c.       设置总中断控制位EA=1,设置中断源所对应的终端允许控制位。

    中断服务程序中:

    a.        处理中断请求;

    b.        注意安排定时器/计数器2以及串行口RI/TI清除标志位指令。




猜你喜欢

转载自blog.csdn.net/weixin_39222888/article/details/80372444