#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
void delay();
void main(void){
uint i=0;
//initUart(); //初始化串口
TCON=0x05; //设定外部中断触发方式
IE=0x85; //打开外部中断
IP=0x01; //定义外部中断0为高优先级中断
while(1){
for(i=0;i<9;i++){
P0=table[i];
delay();
}; //延时1ms
}
}
void Exint1(void) interrupt 0{
uint i=0;
//EA=0; //关总中断
for(i=0;i<9;i++){
P2=table[i];
delay();
}
//EA=1; //开总中断
}
void Exint2(void) interrupt 2{
uint i=0;
//EA=0; //关总中断
for(i=0;i<9;i++){
P1=table[i];
delay();
}
//EA=1; //开总中断
}
void _d15us(void){
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void delay(){
uint i=0;
for(i=0;i<25500;i++){
for(i=0;i<25500;i++){
_d15us();
};
}
}
-
单片机外部中断
2019-10-08 16:45:30//设定外部中断触发方式 IE=0x85; //打开外部中断 IP=0x01; //定义外部中断0为高优先级中断 while(1){ for(i=0;i;i++){ P0=table[i]; delay(); }; //延时1ms } } void Exint1(void) interrupt 0{ ...转载于:https://www.cnblogs.com/Ricezhang/articles/3442475.html
-
51单片机外部中断触发方式
2020-07-19 16:12:40本文介绍了51单片机外部中断触发方式。 -
51单片机外部中断例程
2009-06-02 16:15:3751单片机外部中断例程 51单片机外部中断例程 51单片机外部中断例程 51单片机外部中断例 51单片机外部中断例程程 -
51单片机外部中断触发方式的经验总结
2020-07-16 00:56:48本文主要讲了51单片机外部中断触发方式的经验总结,希望对你的学习有所帮助。 -
AT89C51单片机外部中断
2020-11-27 22:12:30C51单片机外部中断调用P3_2 ,P3_3口。 中断方式有两种,分别为电平方式和脉冲方式。 中断请求有0和1。中断总允许为EA=1, IE0:外部中断请求0标志位; IT0:外部中断0触发方式设置位,IT0=1下降沿触发,IT0=0低电平...C51单片机外部中断调用P3_2 ,P3_3口。
中断方式有两种,分别为电平方式和脉冲方式。
中断请求有0和1。中断总允许为EA=1,
IE0:外部中断请求0标志位;
IT0:外部中断0触发方式设置位,IT0=1下降沿触发,IT0=0低电平触发;
IE1:外部中断请求1标志位;
IT1:外部中断1触发方式设置位,IT1=1下降沿触发,IT1=0低电平触发;
外部中断0中断服务程序的编写:void 函数名()interrupt 0 { }
外部中断1中断服务程序的编写:
void 函数名()interrupt 2 { }
参考实验程序(主程序为P1口输出跑马灯程序),编写中断子程序使得发生外部中断0,且为低电平触发时,LED灯全亮。中断结束后LED继续接上次状态进行跑马灯闪烁。
#include<reg51.h> #include<intrins.h> sbit P3_2=P3^2; void delay(unsigned char i); void main() { unsigned char ii; P1=0xFE; P3_2=1; EA=1; EX0=1; IT0=0; while(1) { P1=0xFE; for(ii=0;ii<8;ii++) { P1=_crol_(P1,1); delay(200); } } } void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数 { unsigned char j,k; //定义无符号字符型变量j和k for(k=0;k<i;k++) //双重for循环语句实现软件延 for(j=0;j<255;j++); } void int_0() interrupt 0 { P1=0x00; }
参考实验程序(主程序为P1口输出跑马灯程序),发生外部中断1,且为低电平触发时,LED灯闪烁5次,中断结束后LED继续接上次状态进行跑马灯闪烁。
#include<reg51.h> #include<intrins.h> sbit P3_3=P3^3; void delay(unsigned char i); void main() { unsigned char ii; P1=0xFE; P3_2=1; EA=1; EX1=1; IT1=0; while(1) { P1=0xFE; for(ii=0;ii<8;ii++) { P1=_crol_(P1,1); delay(200); } } } void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数 { unsigned char j,k; //定义无符号字符型变量j和k for(k=0;k<i;k++) //双重for循环语句实现软件延 for(j=0;j<255;j++); } void int_1() interrupt 2 { unsigned char a; for(a=0;a<5;a++) { P1=0x00; delay(200); P1=0xff; delay(200); } }
参考实验程序(主程序为P1口输出跑马灯程序),编写中断子程序使得发生外部中断0,且为低电平触发时,LED灯全亮,中断结束后LED继续接上次状态进行跑马灯闪烁;发生外部中断1,且为低电平触发时,LED灯闪烁5次,中断结束后LED继续接上次状态进行跑马灯闪烁。
#include<reg51.h> #include<intrins.h> sbit P3_2=P3^2; sbit P3_3=P3^3; void delay(unsigned char i); void main() { unsigned char ii; P1=0xFE; P3_2=1; EA=1; EX0=1; IT0=0; EX1=1; IT1=0; while(1) { P1=0xFE; for(ii=0;ii<8;ii++) { P1=_crol_(P1,1); delay(200); } } } void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数 { unsigned char j,k; //定义无符号字符型变量j和k for(k=0;k<i;k++) //双重for循环语句实现软件延 for(j=0;j<255;j++); } void int_0() interrupt 0 //0触发 { P1=0x00; } void int_1() interrupt 2 //1触发 { unsigned char a; for(a=0;a<5;a++) { P1=0x00; delay(200); P1=0xff; delay(200); } }
-
单片机外部中断实验程序
2011-02-07 13:47:5451/52单片机外部中断实验程序 伟福试验箱专用 -
51单片机外部中断编程实例
2020-07-18 15:41:4751单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;下面一起来学习一下 -
PIC18F系列单片机外部中断
2019-10-24 11:22:12PIC18F系列单片机外部中断 以外部中断0为例,代码如下 void INTx_Init (void)//外部中断 { TRISBbits.TRISB0 = 1; INTCON2bits.INTEDG0 = 0; //INT0下降沿触发 INTCONbits.INT0IE = 1; //使能INT0中断 INTCONbits....PIC18F系列单片机外部中断
以外部中断0为例,代码如下
void INTx_Init (void)//外部中断 { TRISBbits.TRISB0 = 1; INTCON2bits.INTEDG0 = 0; //INT0下降沿触发 INTCONbits.INT0IE = 1; //使能INT0中断 INTCONbits.INT0IF = 0; //清中断标志位 } /*************************************************** 外部中断0 ***************************************************/ if(INTCONbits.INT0IF == 1) { INTCONbits.INT0IF = 0; LED101_REVERSE; } #pragma code #pragma interrupt Inter_Server void Inter_Server (void)//中断函数时钟、串口 { /*************************************************** 外部中断1 ***************************************************/ if(INTCONbits.INT0IF == 1) { INTCONbits.INT0IF = 0; LED101_REVERSE; } } **// MPLAB C18 不自动把中断服务程序放在中断向量处。通常将GOTO 指令放在中断向量 // 处,从而把控制权转交给相应的中断服务程序。** #pragma code high_vector = 0x08 void high_interrupt (void) { _asm goto Inter_Server _endasm }
这样写发现并不能进入中断函数,把标志位INTCONbits.INT0IF在定时器里周期置1可以进入,原因是外部中断0的RB0口默认是模拟输入,把模拟输入功能关闭就可以了,配置如下 ADCON0 = 0x00; //关闭AD
ANCON0 = 0x00;//全部设置为数字引脚
ANCON1 = 0x00;// -
51单片机外部中断例子程序
2009-02-16 18:10:27很好的单片机外部中断例程,看了就知道了,中断里计数,并显示到数码管上 -
单片机外部中断—中断嵌套
2020-03-26 16:33:46外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断; 但这种优先级只是逻辑上的优先级,当同时有几种中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务...1.相关的寄存器
- 中断允许寄存器IE
1.EA:cpu总中断允许控制位。EA=1,cpu开放中断。
2.ET0/ET1:定时器T0和定时器T1溢出中断允许位。ET0/ET1=1;允许中断。
3.EX0/EX1:外部中断0和外部中断1中断允许位。EX0/ET1=1;允许中断。- 定时器/计数器控制寄存器TCON
与外部有关的仅仅是后四位,前四位与定时器有关,在这不做描述。
IE0:外部中断0请求标志,IE0=1外部中断0向cpu请求中断,响应中断后硬件自动清0;
IE1:外部中断1请求标志,IE0=1外部中断1向cpu请求中断,响应中断后硬件自动清0;
IT0:外部中断0中断源类型选择位,IT0=0;低电平触发方式。IT0=1;下降沿触发方式。
IT1:外部中断0中断源类型选择位,IT1=0;低电平触发方式。IT1=1;下降沿触发方式。- 中断优先级寄存器IP
PS:串口中断优先级控制位。
PT1:定时器1中断优先级控制位。
PX1:外部中断1中断优先级控制位。
PT0:定时器0中断优先级控制位。
PX0:外部中断0中断优先级控制位。2.外部中断0的使用
1.简单的通过外部中断控制P0^0口LED灯的亮灭
sbit led=P0^0; void Init0(); void delayms(unsigned int ms); int main() { Init0(); while(1); } void delayms(unsigned int ms)//延迟函数 { int i,j; for(i=0;i<ms;i++) for(j=100;j>0;j--); } void Init0()//外部中断0的初始化 { IT0=1;//选择跳沿触发方式 EX0=1; EA=1; } void Int0() interrupt 0 { delayms(5);//按键的消抖 if(P3^2==0)//外部中断0的管脚在P3^2 { led=~led; } }
3.中断优先级的配置
51单片机的默认(此时的IP寄存器不做设置)中断优先级为:
外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断;
但这种优先级只是逻辑上的优先级,当同时有几种中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务的优先级,而不是可提供中断嵌套能力的优先级。这种优先级被称为逻辑优先级。[^1]要实现真正的嵌套形式的优先级,也即高优先级中断服务可以打断低优先级中断服务的情况,必须通过设置中断优先级寄存器IP来实现;这种优先级被称为物理优先级。
例如:当计数器0中断和外部中断1(优先级 计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。
要实现真正的嵌套形式的优先级,也即高优先级中断服务可以打断低优先级中断服务的情况,必须通过设置中断优先级寄存器IP来实现;这种优先级被称为物理优先级。
- 设置外部中断1优先级大于外部中断0优先级。实现二级中断嵌套,当执行外部中断0的时候外部中断1能打断外部中断0程序的运行。
void Init(); void delayms(unsigned int ms); int main() { Init(); while(1); } void delayms(unsigned int ms)//延迟函数 { int i,j; for(i=ms;i>0;i--) for(j=100;j>0;j--); } void Init()//外部中断初始化 { IT0=1;//选择跳沿触发方式 EX0=1;//打开外部中断0允许位 IT1=1;//选择跳沿触发方式 EX1=1;//打开外部中断1允许位 EA=1;//打开总中断 IP=0X01;//设置外部中断0的优先级大于外部中断1 } void Int0() interrupt 0 using 0//外部中断0的执行程序。 { unsigned char i; delayms(5); if(P3^2==0) { for(i=0;i<8;i++) { P0=~(0x01<<i); delayms(1000); } } } void Int1() interrupt 2 using 1//外部中断1的执行程序。using x代表用那个工作区。 { unsigned char i; delayms(5); if(P3^3==0) { for(i=8;i>0;i--) { P0=~(0x01<<i); delayms(500); } } }
- 外部中断的主要内容
接下来让我们做一个中断嵌套的小练习吧。链接: link.
如果这篇文章对你有帮助,就点个小♥吧! - 中断允许寄存器IE
-
单片机外部中断使用例程
2015-10-20 18:46:40单片机的外部中断使用例程,电平出发类型,C语言例程 -
AVR单片机外部中断实例
2021-01-19 18:21:35本范例使用WinAVR/G20050214版本开发按下按键0,0亮。直到松手,其他按键才能起作用 按下按键1,LED1亮。其他按键随时都能起作用 ... ****AVR外部中断使用范例*** ******* ****策划、整理与测试:阿莫 -
MSP430单片机外部中断
2013-09-24 19:54:56MSP430单片机外部中断 小小总结,完全原创。欢迎转载!请注明出处。技术交流QQ:1626092784 视频教程地址:http://www.youku.com/playlist_show/id_20133778.html MSP430F149的外部中断资源丰富,P1口和P2口共16... -
基于Proteus仿真51单片机外部中断实验
2020-06-23 20:13:05已知单片机的 P0 口接了一位七段数码管,当无外部中断(外部中断 0)时,数码 管按 a~g 段依次点亮,不断循环显示;当有外部中断(按钮被按下,P3.2 有下降沿电 压)时,数码管显示状态改为“8”亮灭闪烁显示,亮灭... -
单片机外部中断实验
2020-05-31 00:28:22设定外部信号发生器每2s钟,产生一个下降沿,作为外部中断源,中断处理完成led灯的闪烁一次,以及控制步进电机旋转一圈。 -
STM8S003单片机外部中断实验
2019-08-22 14:28:29STM8S003单片机上,用按键口做为外部中断触发,实现按键按下LED指示灯翻转效果。 -
C51单片机 外部中断
2020-06-15 10:48:5651单片机的中断系统 一、中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来... -
51单片机外部中断0实例详解
2020-02-14 11:47:49今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法。 1 51单片机的中断源 51单片机共有5个中断源,分别为: 外部中断0 定时器0中断 外部中断1 定时器1中断 串口中断 每一个中断都对应一个中断向量,... -
51单片机外部中断自动重复了一次
2019-10-07 00:16:0451单片机外部中断自动重复了一次 ``` #include #include #define uchar unsigned char #define uint unsigned int void delay(uint); void breath(); uchar tr_1; void main() { EX0=1; IT0... -
51单片机 外部中断
2021-04-09 21:13:42为了降低CPU的占有率,同时实现单片机对复杂情景的处理,引入了中断。 CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,为该外设服务(或者处理紧急事件),... -
单片机外部中断详解及程序
2020-08-10 05:34:35单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来... -
STC15单片机外部中断仅上升沿触发的方法
2017-06-21 20:25:02STC15单片机外部中断上升沿触发的解决办法 -
中断 定义_51单片机外部中断点亮LED
2021-01-11 09:47:51夜猫子:51单片机中断基本概念zhuanlan.zhihu.com外部中断软件设计原理中断发生的三个条件①中断源有中断请求;②此中断源的中断允许位为 1;③CPU 开中断(即 EA=1)。比如我们配置外部中断 0,对应的配置程序... -
实验4-单片机外部中断实验.zip
2021-02-03 13:07:5651单片机Proteus仿真+Keil工程-实验4-外部中断-步进电机ULN2003A驱动 详细见:https://blog.csdn.net/qq_43353985/article/details/107945178 -
51单片机外部中断
2021-01-16 19:27:24中断系统 中断请求 -> 中断响应 -> 中断处理 -> 中断返回 什么是中断系统 计算机执行某程序时,发生了紧急事件或有特殊请求,CPU暂停某程序的执行,转而去处理上述事件或请求,处理完毕后再重新执行某程序... -
51单片机外部中断的C51编程
2011-04-17 11:08:0051单片机外部中断的C51编程 相关知识: 1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0; 2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断... -
51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此...
2021-01-07 18:19:38设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。 #include<...