51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。
这个原理很好理解。但应用时需要特别注意的几点:
1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。
2)边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。
3)中断标志可以手工清除。一个中断如果在没有得到响应之前就已经被手工清除,则该中断将被CPU忽略。就如同没有发生一样。
4)选择电平触发还是边沿触发方式应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。比如,有的书上说(《Keil C51使用技巧及实战》),就有类似的观点。
关键字:51单片机 外部中断 触发方式
引用地址:
51单片机外部中断的总结
推荐阅读最新更新时间:2024-03-16 13:11
51单片机矩阵键盘扫描程序
#include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 #define KeyPort P1 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};
[单片机]
【51单片机快速入门指南】3.2:定时器/计数器
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 中断知识见【51单片机快速入门指南】3:中断系统 快速使用 可利用STC-ISP的计算器直接生成初始化函数 传统51需设置系统频率=晶振频率,定时器时钟设为12T 使能6T模式后需将系统频率x2 使用更新的1T芯片则定时器时钟应改为1T,系统频率无需x2 硬知识 摘自《普中 51 单片机开发攻略》和《STC89C52系列单片机器件手册》 中断知识见【51单片机快速入门指南】3:中断系统 传统51
[单片机]
基于51单片机驱动S8330E C语言程序
//S8330E是日本精工的一个电源IC,需要软件调节电压输出值 #include reg52.h #include intrins.h sbit DIN = P1^0; sbit CLK = P1^1; sbit STB = P1^2; sbit Key = P3^4; sbit LED = P1^7; void Delay(unsigned int MS) { unsigned char us,usn; while(MS!=0) { usn = 2; //for 12M while(usn!=0) { us=0x
[单片机]
AT89S51单片机6位数显频率计数器
1. 实验任务 利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。 2. 电路原理图 图4.31.1 3. 系统板上硬件连线 (1). 把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 (2). 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 (3). 把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的W
[单片机]
51单片机软件复位函数
51单片机无自带的看门狗,没有提供软件复位的函数和机制,要想实现软件复位,只能通过强制将PC指针指到0x0000位置, 通过以下函数将PC指针强制指到0x0000: void reset(void) { ((void (code *) (void)) 0x0000) (); } 可以使用下面的程序跳到0000H实现软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址。 ((void (code *) (void)) 0x0000) (); 下面的例子将实现软件自复位 void reset (void) { ((void (code *) (void)) 0x0000) (); } v
[单片机]
51单片机程序开发入门知识
51单片机在我的理解上来说,就是遵循51指令集工作的芯片。他就像一台超微型的电脑,里面有内存、硬盘、CPU等基本配备。 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是内置的RAM和扩展RAM。不过这些基本配备是小了一点而已。 在网上,我们常看到一些介绍什么AT89C51或AT89C52等51的单片机的范例,对于一些初学者来说可能就会认为只有AT89C51或AT89C52才是51单片机,当你给他个STC89S52他都不敢用,认为可能不对(我刚开始学的时候就碰到这种情况,)。其实不是这样的,只要芯片内部使用的是51指令集,那么它就可以认为是51单片机,就可以用51单片机的开发方式进行
[单片机]
MCS-51单片机定时中断的精确定时编程方法选择
MCS-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。单中断系统中的中断响应时间为3~8个机器周期 。无论是哪一种原因引起的误差,在精确定时的应用场合,必须考虑它们的影响,以确保精确的定时控制。根据定时中断的不同应用情况,应选择不同的精确定时编程方法。 文中以定时器T1工作在定时方式1为例,晶振频率为12MHz 。 1 方法1 在定时器溢出中断得到响应时,停止定时器计数,读出计数值(反映了中断响应的延迟时间),根据此计数值算出到下一次中断时,需多长时间,由此来重装载和启动定时器。例如定时周期为1ms,则通常定时器重装载值为-1000(0FC18H)。下面的程序
[单片机]
AT89C2051单片机制作的六位数显多路定时电子钟
这里介绍的电子钟,电路可称得上极简,它仅使用单片的20引脚单片机完成电子钟的全部功能,而笔者见到的其它设计方案均采用二片以上的多片IC实现。 一片20引脚的单片机STC2032(引脚排列与AT89C2051完全相同)为电子钟主体,其显示笔画数据从P1口分时输出,P3口则输出对应的六位选通信号。由于LED数码管点亮时耗电较大,故不能使用AT89C2051单片来完成,但是可以可以用STC89C2032来完成。另外,本站制作时用超高亮的发光二极管代替昂贵的大数码管,成本低,效果独特。 本电子钟设计有三个轻触式按键,这里我们分别命名为:模式设定键K1、加调整键K2、减调整键K3。由于STC89C2032内部已经集成有复位电阻,所以,
[单片机]