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清除标志位指令。