1.中断类型
80c51有3类共5种中断,分别是:
1).外部中断2个(/INT0(P2.2)、/INT1(P3.3)):
有2种触发方式:电平方式和脉冲方式。可通过特殊功能寄存器TCON中的控制位IT0和IT1定义,电平方式是低电平有效,而脉冲方式是下降沿有效。一旦输入信号有效,TCON中的中断标志位IE0和IE1被置1,外部中断信号向CPU发出中断请求。
CPU外部采样INT0或INT1,IE0或IE1被置1是CPU响应外部中断,脉冲触发方式下,IE0或IE1由硬件自动清0;电平触发方式下,在CPU执行完中断前,要由外部中断源撤消有效电平信号,使IE0或IE1清0。IE0和IE1地址分别为0X89H和0X8BH。
当IT0、IT1为0时,外部中断为电平触发方式,等于1时为脉冲触发方式。T0和T1的地址分别为0X88H和0X8AH。
当/INT0或/INT1为电平触发方式时,若/INT0或/INT1输入低电平,CPU在没个机器周期对/INT0或/INT1进行采样得低电平信号,IE0或IE1被置1,外部中断源发出中断请求,在中断被CPU响应前,外部中断必须一直保持低电平有效。同时在该中断服务执行完前,必须撤除外部中断信号。当/INT0或/INT1为脉冲触发方式时,CPU在没个周期对/INT0或/INT1采样,如果连续两次采样,前一个为高电平,而下一个为低电平时,则IE0或IE1被置1,表示外部中断源正在向CPU请求中断,直到该中断被CPU响应,才由硬件自动清0,采用脉冲触发方式时,外部中断输入的高电平和低电平持续时间必须保持在1个机器周期以上。
2).时钟中断2个
80C51内有2个定时器/计数器T0、T1,通过一种计数结构,实现定时/计数功能,当计数值发生溢出时,表明已经达到预期定时时间或计数值,定时器/计数器的中断请求标志位TF0或TF1被置1,向CPU发出中断请求。TF0和TF1地址分别为0X8DH饿0X8FH。
定时器/计数器T0、T1溢出时,该位由内部硬件自动置位,该位的使用情况分两种情况:中断和查询方式 :
当中断方式时,此位作为中断标志位,引起中断响应,进入中断服务程序后,由硬件自动清0;
当位查询方式时,中断被禁止,此位作为状态位供查询,当查询后有效后应由软件将该位清0。
以上2种中断的各个标志位都在特殊寄存器TCON中,TCON共有8位,除以上标志位外还有2位分别是定时器/计数器0(或1)的溢出标志位TR0、TR1地址分别为0X8CH,0X8EH。
3).串口中断1个
当串口接受或发出1字数据时,就产生一个中断请求,它的标志位RI和TI存在特殊寄存器SCON中的0X98H和0X99H中
TI:串口发送中断请求标志位。串口每发完一组串行数据后,由内部硬件置1。CPU响应该中断,转如串口中断时,并不清0TI中断标志,TI必须由用户在程序中清0。
RI:串口接收中断请求标志位。串口每发完一组数据后,RI由硬件置1。同样,CPU响应该中断时,不清0RI位,必须由用户在程序中清0。
2.关于中断优先的控制
80C51有两个中断优先级,每个中断源可通过软件设置为高优先级或低优先级中断,实现2级中断嵌套。高优先级中断请求可以中断一个正在执行的低优先级中断服务,除非正在执行的低优先级中断服务程序设置了禁止CPU中断某些高优先级的中断。正在执行的中断服务不能被另一个同等优先级或低优先级的中断所中断,正在执行的高优先级服务不能被任何中断源中断,一直执行到返回指令RETI,返回主程序,并在执行一条指令后,才能响应下一条中断请求。
当同一优先级的几个中断源同时向CPU请求中断时,CPU通过内部硬件查询逻辑电路,按查询顺序判定优先响应哪一个中断请求,查询顺序是:外部中断0>定时中断0>外部中断1>定时中断1>串行中断。