中断及定时计数器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机的中断与定时器/计数器

中断就是停止当前的任务,去做另一个需要马上处理的任务,做完后再回去做原来的任务!

P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST/V PD P3.0/RXD P3.1/TXD P3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WR P3.7/RD XTAL2XTAL1V SS

V CC P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA/V PP PSEN P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0

RST P3.0/RXD P3.1/TXD

XTAL2XTAL1P3.2/INT0P3.3/INT1P3.4/T0P3.5/T1

GND

V CC P1.7P1.6P1.5P1.4P1.3P1.2

P1.1/AIN1P1.0/AIN0P3.7

注:类似的还有Philips公司的 87LPC64,20引脚

8XC748/750/(751),24引脚 8X749(752),28引脚 8XC754,28引脚 等等

如上图 8051中有5个中断:

P3.2和P3.3为外部中断INT0和INT1端口,

P3.4和P3.5为定时器/计数器中断T0和T1端口, 以及一个串行口中断,(此内容暂时不讲)

8052中有6个中断,比8051多一个特殊的定时器/计数器中断。(暂时不讲)

外部中断: INT0和INT1

外部中断通过其对应的引脚来接受外部中断请求,触发方式有两种: 1.低电平触发,即得到地电位就触发中断。

2.负边沿触发,即由高电平降至低电平的瞬间触发。 区别在于低电平触发属于静态触发,只要是低电平就一定触发;而负边沿触发为动态触发,必须由高电平变为低电平的时候才会触发。

控制触发方式的开关为:IT 。

IT0和IT1分别对应控制INT0和INT1的触发方式。 0为低电平触发,1为负边沿触发。 例:外部中断INT0开启低电平触发: IT0=0;

定时器/计数器中断: T0和T1

它有两种工作模式:定时器与计数器。

1. 定时器模式下,单片机对内部时钟脉冲进行计数。不使用外部端口。

2. 计数器模式下,单片机对外部脉冲进行计数,使用外部端口,外部脉冲由外部对应

端口进入。即P3.4和P3.5

至于定时器/计数器是如何触发中断的将在后半部分内容中详细说明。

中断的启用与控制:

中断平时是关闭的,只有通过打开相应的开关才能使用,打开后还需进行相应的设置。

1、EA ---- 中断允许总控制器

=0,中断总禁止,关闭所有中断。

=1,中断总允许,各中断的允许或禁止由各中断的控制位进行设置。

2、EX0 EX1 ---- 外部中断0(1)允许控制位。

=0,禁止外中断。

=1,允许外中断。

3、ET0 ET1 ---- 定时中断0(1)允许控制位。

=0,禁止定时中断。

=1,允许定时中断。定时器产生中断(触发方式后面讲),响应中断服务程序。

4、ES ---- 串行中断允许控制位。

=0,禁止串行中断。

=1,允许串行中断。

1、IE0 IE1 ---- 外部中断请求标志位。(硬件自动清零)

cpu检测到中断端口出现有效中断请求时,此位被置1,再中断响应完成转向中断服务子程序时,再由硬件自动清为0。

2、IT0 IT1 ---- 外部中断触发方式控制位。(软件置位、清零)

=0,时电平触发方式,低电平有效。

=1,是脉冲触发方式,下降沿触发有效;

3、TR0 TR1 ---- 定时器0(1)运行控制位。

=0,禁止定时器运行;

=1,允许定时器运行。

4、TF0 TF1 ---- 内部定时/计数器0(1)溢出标志。

相应的定时器溢出时,被自动置为1。当转向中断服务子程序时,再由硬件自动清0。

中断的优先级:

多个中断同时触发时候将会按照优先级顺序来执行:

默认的自然优先顺序为:

外中断 0→定时器0→外中断1→定时器1→串口中断(8052中的定时器2与串口中断的自然优先级相同,都在最底。)

8051单片机可人工对其优先级进行调整,但只有2个级别。高级优先于低级执行,在同等级内部优先顺序依旧按照自然优先顺序排列。

1、PX0 PX1 ---- 外中断0(1)优先级设定位。

2、PT0 PT1 ---- 定时中断0(1)优先级设定位。

3、PS ---- 串行中断优先级设定位。

=0,低优先级;

=1,高优先级。

举例:假定开放外中断1,采用负边沿触发方式,高优先等级需要作如下设定:

EA=1

EX1=1

IT1=1

PX1=1

中断的嵌套使用:

假如现在程序已经进入一个中断子程序进行执行。此时又一中断触发,若此中断等级高于正在执行的中断,则停止当前任务处理中断请求;若此中断等级低于或等于当前处理中断,则等当前正在处理的中断执行完后在给与处理。

中断的使用:

中断号中断源中断向量

0 外部中断0 0003H

1 定时器0 000BH

2 外部中断1 0013H

3 定时器1 001BH

4 串行口0023H

5 定时器2 0X2BH (外加器件)

语法如下:

void X(void) interrupt 中断号

函数X()与中断源的联系是通过使用Keil的关键字interrupt 建立起来的。

例:

void x(void) interrupt 1

{ ET0=0; //禁止定时中断

P1=0x0f;

delay(1000);

P1=0xf0;

delay(1000);

EX0=1; //允许外中断

}

相关文档
最新文档