中断概念 : 计算机执行某程序时,发生了紧急事件或有特殊请求,CPU暂停某程序的执行, 转而去处理上述事件或请求,处理完毕后再重新执行某程序的过程叫做中断。
数据的输入/输出传送方式:
(1)无条件传送方式: 一方对另一方来说总是准备好的。
(2)查询传送方式(LOOK UP): 传送前一方先查询另一方的状态,若已经准备好就传送,否则就继续查询/等待。
(3)中断传送方式(IRQ): 一方通过申请中断的方式与另一方进行数据传送。
(4)直接存储器存取方式(DMA): 双方直接通过总线传送数据, 不经CPU中转。适用于数据量大高速通讯的设备不占用CPU时间。
中断传送方式特点:
数据传送的双方平时各自做自己的工作,一旦甲方要求与乙方进行数据传送,就主动发出信号提出申请,乙方接到申请后若同意传送,安排好当前的工作,再响应与甲方发生数据传送。完事后,回去继续做打断前的工作。
引起CPU中断的根源,称为中断源。
中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。
对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。
实现上述中断功能的部件称为中断系统(中断机构)。
中断功能强弱是计算机性能优劣的重要标志
?提高CPU效率
?解决速度矛盾
?实现并行工作
?应付突发事件……
51子系列允许5个中断源:
外部中断源(2个):
INT0——由P3.2端口线引入,低电平或下降沿引起。
INT1——由P3.3端口线引入,低电平或下降沿引起。
这两个外部中断源标志和它们的触发方式控制位由特殊功能寄存器TCON的低4位控制。
内部中断源(3个):
T0——定时器/计数器0中断,由T0回零溢出引起。
T1——定时器/计数器1中断,由T1回零溢出引起。
TI/RI——串行I/O中断,串行端口完成一帧字符发送/接收后引起。
这3个内部中断源的控制位分别锁存在特殊功能寄存器TCON和SCON中。
1、中断请求标志TCON(88H)可位寻址 TCON:Timer控制寄存器,低4位管理外部中断 作用:设置外部中断触发方式,标注外部中断请求。
IE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。 IT0/IT1:外部中断请求的触发方式选择位: =0:在INT0/INT1端申请中断的信号低电平有效; =1:在INT0/INT1端申请中断的信号负跳变有效。
外部中断及中断请求的撤除
低电平/负脉冲→INT0/INT1引脚可触发中断
IT0/IT1:INT0/1的触发方式选择位: IT0/IT1 =0 时,INT0/INT1是低电平有效; IT0/IT1 =1 时,INT0/INT1是负跳变有效。
低电平触发 引脚上的低电平须持续到中断发生。若中断返回前仍未及时撤除低电平,将再次中断。
负脉冲触发 CPU在前一机器周期采到INT0/INT1引脚为高,后一机器周期采到为低才认为是一次中断请求。CPU 可记忆申请、可自动撤除中断申请。
#include <reg52.h> #define uchar unsigned char #define uint unsigned int uint count; void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } /*中断服务特殊功能寄存器配置*/ void init() { TMOD = 0x01; //定时器16为计数工作模式 TH0 =0x4b; TL0 =0xfd; //50ms ET0 = 1; //开定时器0中断 TR0 = 1;//启动定时器0 EA = 1; //开总中断 } void main() { init(); while(1) { P1 = 0xff; } } /*中断服务程序*/ void timer0() interrupt 1 { TH0 =0x4b; TL0 =0xfd; //50ms count++; if (count == 4) { P1 = 0; delay(5); count = 0; } }
原文:https://www.cnblogs.com/darren-pty/p/13284395.html