精华内容
下载资源
问答
  • 单片机外部中断

    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{ ...

    #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();
    };
    }
    }

    转载于:https://www.cnblogs.com/Ricezhang/articles/3442475.html

    展开全文
  • 本文介绍了51单片机外部中断触发方式。
  • 51单片机外部中断例程 51单片机外部中断例程 51单片机外部中断例程 51单片机外部中断例 51单片机外部中断例程程
  • 本文主要讲了51单片机外部中断触发方式的经验总结,希望对你的学习有所帮助。
  • AT89C51单片机外部中断

    2020-11-27 22:12:30
    C51单片机外部中断调用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);
    	}
    }
    

    在这里插入图片描述

    展开全文
  • 51/52单片机外部中断实验程序 伟福试验箱专用
  • 51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;下面一起来学习一下
  • PIC18F系列单片机外部中断 以外部中断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
    很好的单片机外部中断例程,看了就知道了,中断里计数,并显示到数码管上
  • 外部中断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.
    如果这篇文章对你有帮助,就点个小♥吧!

    展开全文
  • 单片机外部中断使用例程,电平出发类型,C语言例程
  • 本范例使用WinAVR/G20050214版本开发按下按键0,0亮。直到松手,其他按键才能起作用  按下按键1,LED1亮。其他按键随时都能起作用 ... ****AVR外部中断使用范例***  *******  ****策划、整理与测试:阿莫
  • MSP430单片机外部中断

    千次阅读 2013-09-24 19:54:56
    MSP430单片机外部中断 小小总结,完全原创。欢迎转载!请注明出处。技术交流QQ:1626092784 视频教程地址:http://www.youku.com/playlist_show/id_20133778.html   MSP430F149的外部中断资源丰富,P1口和P2口共16...
  • 已知单片机的 P0 口接了一位七段数码管,当无外部中断外部中断 0)时,数码 管按 a~g 段依次点亮,不断循环显示;当有外部中断(按钮被按下,P3.2 有下降沿电 压)时,数码管显示状态改为“8”亮灭闪烁显示,亮灭...
  • 单片机外部中断实验

    千次阅读 2020-05-31 00:28:22
    设定外部信号发生器每2s钟,产生一个下降沿,作为外部中断源,中断处理完成led灯的闪烁一次,以及控制步进电机旋转一圈。
  • STM8S003单片机上,用按键口做为外部中断触发,实现按键按下LED指示灯翻转效果。
  • C51单片机 外部中断

    2020-06-15 10:48:56
    51单片机中断系统 一、中断的概念 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单片机外部中断自动重复了一次 ``` #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暂停正在进行的工作,为该外设服务(或者处理紧急事件),...
  • 单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来...
  • STC15单片机外部中断上升沿触发的解决办法
  • 夜猫子:51单片机中断基本概念​zhuanlan.zhihu.com外部中断软件设计原理中断发生的三个条件①中断源有中断请求;②此中断源的中断允许位为 1;③CPU 开中断(即 EA=1)。比如我们配置外部中断 0,对应的配置程序...
  • 51单片机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:00
    51单片机外部中断的C51编程 相关知识: 1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0; 2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断...
  • 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。 #include<...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,945
精华内容 778
关键字:

单片机外部中断