精华内容
下载资源
问答
  • 若IT0=0,则为低电平触发 若IT0=1,则为下降沿触发 外部中断0初始化: 初始化方法一: void Init_INT0() { IT0=1;//设置外部中断0;下降沿触发 EX0=1;//开启外部中断0; EA=1;//开启中断总开关 } 初始 化...

    中断

    在这里插入图片描述

    TMOD:定时器/计数器工作方式寄存器

    TCON:定时器/计数器控制寄存器

    在这里插入图片描述

    IE:中断允许控制寄存器

    在这里插入图片描述

    IP:中断优先级控制寄存器

    外部中断0

    外部0中断触发:(P3.2口触发;P3.2触发;P3.2触发

    若IT0=0,则为低电平触发

    若IT0=1,则为下降沿触发

    外部中断0初始化:

    初始化方法一:

    void Init_INT0()
    {
     IT0=1;//设置外部中断0;下降沿触发 
     EX0=1;//开启外部中断0; 
     EA=1;//开启中断总开关 
     } 
    
    
    初始

    化方法二:

    void Init_INT0()
    { 
     TCON=TCON|0x01;//0000 0001->0x01相当IT0=1;设置下降沿触发中断
     IE=0x81;//1000 0001->0X81;
         //第一个1是EA=1;即中断总开关
         //第二个1是EX0=1;即中断分支开关
    }
    
    
    外部0

    中断子函数:

    void RSI_INT0() interrupt 0
    {
     P0=~P0;//当触发中P0口的LED取反 
    }

    主函数:

    void main()
    {
     P0=0xff;//灯全熄灭
     Init_INT0();//初始化外部中断0
     while(1);
    }
    
    
     

    外部中断1:

    外部1中断触发:(P3.3口触发;P3.3触发;P3.3触发

    若IT1=0,则为低电平触发

    若IT1=1,则为下降沿触发

    外部中断1初始化:

    方法一:

    void Init_INT1()
    {
     IT1=1;//设置外部中断1;下降沿触发 
     EX1=1;//开启外部中断1; 
     EA=1;//开启中断总开关 
     } 
    
    
     

    方法二:

    void Init_INT1()
    { 
    // IT1=1;//设置下降沿触发
    // EX1=1;//外部中断1的分支开关
    // EA=1;//中断总开关
      
      TCON=TCON|0x04;//0000 0100->0x04相当IT1=1;设置下降沿触发
      IE=0x84;//IE=1000 0100->0x84
         //第一个1相当EA=1;第二个1相当EX1=1
    }
    
    
     
    
    外部1

    中断子函数:

    void ISR_Int1() interrupt 2
    {
      P0=~P0;//取反 
    }

    主函数:(P3.3给了下降沿,软件触发)

    void main()
    {
     P0=0xff;//熄灭所有的灯
     Init_INT1();//外部中断1初始化
     while(1){
      Int1=1;
      Int1=0;//P3.3由1->0;下降沿触发
     }
    }

    该主函数可进行Dobug,查看函数的走向。

    例题:(中断嵌套)

    利用外部中断0,进行3次流水灯;

    利用外部中断1,进行3次闪耀;

    且外部中断1的优先级高于外部中断1。

    不进行中断时LED灯处于熄灭状态。

    #include <reg51.h>
    
     
    
    //延时程序
    
    void delay()
    
    {
    
           int i,j;
    
           for(i=0;i<10;i++)
    
            for(j=0;j<3000;j++);    
    
    }
    
    //外部中断0和1初始化
    
    void Init_INT01()
    
    {      
    
           TCON=TCON|0x05;//0000
    0101->0x01相当IT0=1,IT1=1;设置下降沿触发中断
    
           IE=0x85;//1000 0101->0X85;
    
                                       //第一个1是EA=1;即中断总开关
    
                                       //第二个1是EX1=1;即中断1分支开关
    
                   //第二个1是EX0=1;即中断0分支开关
    
           IP=IP|0x04;//设置外部中断1优先级高于外部中断0
    
    }
    
     
    
    //LED右移程序
    
    void lelf(unsigned int n)
    
    {
    
           unsigned int i,j;
    
           for(i=0;i<n;i++)
    
           {
    
                  for(j=0;j<8;j++)
    
                  {
    
                         P0=~(0x80>>j);
    
                         delay();
    
                  }
    
           }
    
           P0=0xff;
    
    }
    
     
    
    //闪耀程序
    
    void flash(unsigned int n)
    
    {
    
           unsigned int i;
    
           for(i=0;i<n;i++)
    
           {
    
                  P0=~P0;
    
                  delay();
    
           }
    
    }
    
    void main()
    
    {
    
           Init_INT01();
    
           while(1);
    
    }
    
    //外部中断0子程序
    
    void out_INT0() interrupt 0
    
    {
    
           lelf(3);
    
           
    
    }
    
    //外部中断1子程序
    
    void out_INT1() interrupt 2
    
    {
    
           flash(4);
    
    }

    定时器0中断:

    中断触发:

    定时/计数时间到触发中断

    定时/计数原理:

    脉冲下降沿,定时器/计数的值加 1

    初始化程序:
    //定时器/计数器0初始化

    void tminer0_Init()
    {
     TMOD&=0XFC;//选择定时模式C/T=0;计数模式C/T=1;
     TMOD|=0x01;//选择定时器0;工作模式1,16位定时/计数
     TH0=0xFF;  //装初值
     TL0=0xFE;  //定时1us
     ET0=1;     //定时器0开关
     EA=1;      //中断总开关
     TR0=1;     //启动定时器0
    }

    中断子程序:

    //定时器中断0子程序
    void time0() interrupt 1
    {
     TH0=0xFF;//重新装初值
     TL0=0xFE;//定时1us
     P0=~P0;
    }

    主程序:

    void main()
    {
     tminer0_Init();
     while(1);
    }
     

    定时器1中断:

    #include
    <reg51.h>
    //定时器/计数器1初始化
    
    void
    tminer1_Init()
    
    {
    
           TMOD&=0XCF;//选择定时模式C/T=0;计数模式C/T=1;
    
           TMOD|=0x10;//选择定时器1;工作模式1,16位定时/计数
    
           TH1=0xFF;//装初值
    
           TL1=0xFE;//定时1us
    
           ET1=1;//定时器1开关
    
           EA=1;//中断总开关
    
           TR1=1;//启动定时器1
    
    }
    
    void
    main()
    
    {
    
           tminer1_Init();
    
           while(1);
    
    }
    
    //定时器中断1子程序
    
    void
    time0() interrupt 3
    
    {
    
           TH1=0xFF;//重新装初值
    
           TL1=0xFE;//定时1us
    
           P0=~P0;
    
    }
    展开全文
  • AT89C51单片机外部中断

    2020-11-27 22:12:30
    IT0:外部中断0触发方式设置位,IT0=1下降沿触发,IT0=0低电平触发; IE1:外部中断请求1标志位; IT1:外部中断1触发方式设置位,IT1=1下降沿触发,IT1=0低电平触发外部中断0中断服务程序的编写: void 函数名...

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

    在这里插入图片描述

    展开全文
  • 中断 CPU正在在执行一个程序,突然接到中断请求,然后就放下手中的工作取执行中断程序,然后再...低电平触发 #include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit key_s2 = P3^0;

    中断

    CPU正在在执行一个程序,突然接到中断请求,然后就放下手中的工作取执行中断程序,然后再回来继续手头的工作。
    在这里插入图片描述
    框前面的数字是中断向量号
    这个图并不完整,比如计时器/定时器的功能设置没画出来
    看外部中断
    在这里插入图片描述
    串口中断的标志位必须通过软件置0,其他好像是自动的,不嫌麻烦就都用软件置0

    外部中断代码

    低电平触发

    #include <reg52.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit key_s2 = P3^0;//独立按键S2
    sbit flag = P3^7; //外部中断信号产生脚
    
    /*====================================
    函数	: delay(uint z)
    参数	:z 延时毫秒设定,取值范围0-65535
    返回值	:无
    描述	:12T/Fosc11.0592M毫秒级延时
    ====================================*/
    void delay(uint z)
    {
    	uint x,y;
    	for(x = z; x > 0; x--)
    		for(y = 114; y > 0 ; y--); 		
    } 
    //外部中断0初始化
    void int0Init()
    {
    	EA = 1;	//开总中断
    	EX0 = 1;//开外部中断0
    	IT0 = 0;//外部中断0低电平触发	
    }
    
    void main()//main函数自身会循环
    {
    	int0Init();//外部中断0初始化	
    	while(1)
    	{
    		if(key_s2 == 0)//判断S2是否被按下
    		{
    			delay(20);//按键消抖
    			if(key_s2 == 0)
    			{
    				flag = 0;
    				flag = 0;//产生低电平,CPU会采样2次P3.2的状态,两次都为低才触发
    				flag = 1;//结束低电平
    				while(!key_s2);//松手检测
    			}	
    		}
    
    	}	
    }
    
    //外部中断1中断服务程序,加interrupt 和中断向量号
    void int0() interrupt 0
    {
    	P1 = ~P1;//P1的状态按位取反
    }  
    

    这个就是一直检测按键有无按下,有的话就改变引脚来触发中断,其实直接将对应引脚置搞,然后将引脚与开关连在一起会更好,但是开发板它已经固定死了,没办法连接。
    再看一下下降沿触发的:

    #include <reg52.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    sbit key_s2 = P3^0;//独立按键S2
    sbit flag = P3^7; //外部中断信号产生脚
    
    /*====================================
    函数	: delay(uint z)
    参数	:z 延时毫秒设定,取值范围0-65535
    返回值	:无
    描述	:12T/Fosc11.0592M毫秒级延时
    ====================================*/
    void delay(uint z)
    {
    	uint x,y;
    	for(x = z; x > 0; x--)
    		for(y = 114; y > 0 ; y--); 		
    } 
    //外部中断1初始化
    void int1Init()
    {
    	EA = 1;	//开总中断
    	EX1 = 1;//开外部中断1
    	IT1 = 1;//外部中断1下降沿触发	
    }
    
    void main()//main函数自身会循环
    {
    	int1Init();//外部中断1初始化	
    	while(1)
    	{
    		if(key_s2 == 0)//判断S2是否被按下
    		{
    			delay(20);//按键消抖
    			if(key_s2 == 0)
    			{
    				flag = 1;
    				flag = 0;//产生下降沿
    				while(!key_s2);//松手检测
    			}	
    		}
    
    	}	
    }
    
    //外部中断1中断服务程序
    void int1() interrupt 2
    {
    	P1 = ~P1;
    }  
    
    展开全文
  • 有3个寄存器需要注意 1.EA寄存器:中断的总开关,EA=0则所有中断都不起作用 ...IT00:低电平触发,IT01:下降沿触发。 另外,外部中断0的引脚是P3.2,入口点地址:0003H;外部中断1的引脚P3.3,入口点地址

    有3个寄存器需要注意

    1.EA寄存器:中断的总开关,EA=0则所有中断都不起作用

    2.EX0寄存器:EX为Enable External Interrupt 的缩写,所以EX0的意思是打开外部中断0

    3.IT0寄存器:设置外部中断0的触发方式。IT0为0:低电平触发,IT0为1:下降沿触发。

    另外,外部中断0的引脚是P3.2,入口点地址为:0003H;外部中断1的引脚为P3.3,入口点地址为0013H。


    #include <reg52.h>
    
    void ExternalInterrupt() interrupt 0
    {
    	P0 = 0x00;
    }
    void main()
    {
    	EA = 1;		// 打开中断
    	EX0 = 1;	// 打开外部中断0
    	IT0 = 0;	// 低电平触发为0, 高电平到低电平边缘触发为1
    
    
    	while (1)
    		P0 = 0xff;
    }
    展开全文
  • 51单片机中断设置

    2021-01-19 18:28:36
     0——为低电平触发;  1——为下降沿触发  可由软件置位和清除  2)IE0 和 IE1——外部中断请求标志位  1——表示有中断请求,CPU要响应中断请求,跳向中断服务程序,按优先级处理...
  • 51单片机外部中断的C51编程

    万次阅读 2011-04-17 11:08:00
    51单片机外部中断的C51编程 ...1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;...2、中断源的编号: 串行口中断...4、使用外部中断0和1,必须TCON寄存器设置触发方式是低电平
  • 外部中断主要是在CubeMx中设置好GPIO在引脚界面配置成中断然后configuration里对GPIO配置对于低电平触发中断,需要把GPIO设置为上拉,然后下降沿触发,反之高电平触发,反过来对NVIC配置在生成的程序里stm32f1xx_it....
  • 1.sja1000的int引脚你先不连接 sja1000通电后(纯粹通电不运行程序)你测试一下int...是否允许外部中断0了呢?中断寄存器0x01时中断引脚才会输出低电平呢。你现在要做的事是想法让中断寄存器0x013.还有你是自接收...
  • 当rf接收到数据的时候,数据接收指示引脚由高电平变为低电平,所以中断配置里面配置的是IPU,下降沿触发。系统复位后,发送模块没有发送数据,也就是说这个接收模块没有接收到数据,这个中断口根本不会触发立马。...
  • 要求外部中断INT0和INT1为低电平触发,相应引脚分别接一按钮,按钮按下接地输入低电平,产生中断信号;定时器/计数器T0和定时器/计数器T1设置为外部计数输入,相应引脚接1khz的方波信号,T0每满2000个脉冲产生1次...
  • //中断子服务寄存器初始化,EINT7低电平触发 rEINT0MASK=(rEINT0MASK & ~(0xff<<0))|(0x00<<0);//禁止屏蔽 rEINT0PEND=(rEINT0PEND & ~(0xff<<0))|(0xff<<0);//清除原有中断,读0代表没有中断,读1代表有中断,写1...
  • 背景STM32G071的PD0,PD2作为外部中断使用,外部接...但是实际上测量到的却是0.9V,这跟触发后的0V,同样会被单片机识别为低电平,故无法产生电平跳变而触发中断。分析解决查阅STM32G0数据手册可知:这个引脚的电平类...
  • 6410中断

    2013-04-12 14:30:55
    cpu工作有7钟模式 sys usr svc und irq fiq abt  一上电cpu首先处于SVC模式. 首先查看原理图 .../**** key gpio KEYINT1-6 ->GPN0-5 */ ...高(电平触发:当你按下时,源源不断的发送中断信号 下降
  • 对于cc2530GPIO中断的一点理解。

    千次阅读 2015-02-22 23:32:13
    想要写个小程序,使用P0.0作为外部中断源,P0.0设置为输入口,当P0.0输入低电平触发中断,进入中断服务程序。中断触发方式为上升沿触发。 阅读cc2530的datasheet知道和P0口中断相关的寄存器(部分具体到相关位)有...
  • 1.中断系统结构   2. 51单片机的5个中断源 ...语句就可以把外部中断请求的触发方式设置为低电平有效,而不需给TCON一个十六进制的数。 TCON的低四位控制外部中断,高四位的作用如下: TR0/TR1:控制定时/计...
  • DMA通道0配置为每次传输1帧,每帧1024个半字(HW,HalfWord),同步事件设置为外部中断4,触发极J性为高电平,初始化定时器0,定时间隔为22 ms。  当外部同步信号到来时,启动定时器0,手动启动DMA通道0,同时设置...
  • //将C2INI位置0设置PWM2输出端口的初始电平为低电平 PWMIF &= 0xFE; //将C2IF位置0,PWM2中断标志位,需软件清零 PWM2CR |= 0x04; //将EPWM2I位置1,使能PWM2中断 PWM2CR &= 0xFD; //将EC2T2SI位置0...
  • 外部中断8接了一个按钮开关,如果按钮开关被按下,则输出为低电平外部中断8管脚应该低电平, 反之,高电平 (变量pre) 只有当设备感应到有人体活动同时检测到按钮开关被按下。即 red == 1,pre == 0,的时候,才...
  • 所有的外部中断支持高/低电平或上升/下降沿触发 三个 16-位 定时/计数, 定时器 0,定时器 1 和定时器 2 ━ T0CKO 在 P34, T1CKO 在 P35 和 T2CKO 在 P10 ━ T0/T1/T2 可以选择 X12 模式 ━ S1BRG 通过定时器 1 级联...
  • D、复位时会将 设置为高电平, 为低电平。 6、下列指令不是变址寻址方式的是( )。 A、JMP @A+DPTR B、MOVC A,@A+PC C、MOVX A,@DPTR D、MOVC A,@A+DPTR 7、DA指令是BCD码运算调整指令,它可用在如下( )指令...
  • //允许外部中断0 IT0=1; //设置INT0程控跳沿触发方式 EA=1; //允许总中断0 while(1) { if(XBYTE[0xCFE9]&0x07) { ReadKey(); //读取行列值 a=a-192; display(a); ...
  • 首先定时/计数器T0 的计数寄存器设置一定的值,运行控制位TR0 置1,启动定 时/ 计数器0;利用定时器0 来控制1S 的定时,同时定时/计数器T1 对外部的待 第2 页共27 页 测信号进行计数,定时结束时TR1 清0 ,停止计数;...
  • 结 果:设置PWM模式占空比,为0时全部高电平,1时全部低电平 备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的01即可 /************************************************************************...
  • led1632电路图

    2011-04-24 15:46:35
    以下进入P3.2脚外部中断子程序,也就是解码程序 INT: CLR EA ;暂时关闭CPU的所有中断请求 MOV R6,#10 SB: ACALL YS1 ;调用882微秒延时子程序 JB P3.2,EXIT ;延时882微秒后判断P3.2脚是否出现高 ; 电平如果有就退出...
  • 8259A的ICW2给定80H,工作于电平触发方式,全嵌套中断优先级,数据总线无缓冲,采用中断自动结束方式。请填充下面程序中的空白项(注意:控制字中可0可1位选0,8255未用端口设成输入方式),(微处理器8086的A1、A2...
  • 低电平有效, } } 问题是:Error[Pe147]: declaration is incompatible with "unsigned char ADC10_Result[100]" (declared at line 6 of "D:\workspace_v5_1\lianxi\caiji_fangda\dandao_duocai.h") D...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    并以量大单价产品主流,目前16位MCU与8位产品,还有相当幅度的价差,新的应用领域也仍在开发,业界预计,至少在2005年前8位的MCU仍是MCU产品的主流。 13. 学习ARM及嵌入式系统是否比学习其它一般单片机更有...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

外部中断0设置为低电平触发