精华内容
下载资源
问答
  • 问题 用C编程,使外部中断每发生一...要求:中断触发方式为下降沿触发方式,按键有消除抖动功能。 代码 #include <reg51.h> #define uint unsigned int #define uchar unsigned char uchar code tabl...

    问题

    用C编程,使外部中断每发生一次在共阴极数码管上显示一个数字,且每中断次显示的数值增加1或减少1(根据按下的使“加一建”还是“减一键”而定)。
    要求:中断触发方式为下降沿触发方式,按键有消除抖动功能。

    代码

    #include <reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
    
    uchar m = 0;
    
    void delay(uchar c) {
    		uchar a, b;
    		for (; c > 0; c--) 
    		for (b = 142; b > 0; b--) 
    		for (a = 2; a > 0; a--);
    }
    
    void INT_0() interrupt 0 { //ÍⲿÖжÏ0
    		EX0=0; //¹Ø±ÕÍⲿÖжÏ0
    		delay(20); //ÑÓʱ£¬È¥¶¶¶¯
    		EX0=1;
    		m++;
    		if (m==10) m = 0;
    		else P1 = table[m];
    }
    
    void INT_1() interrupt 2 { //ÍⲿÖжÏ1
    		EX1=0;
    		delay(20);
    		EX1=1;
    		m--;
    		P1 = table[m];
    		if (m==0) m = 10;
    }
    
    void main() {
    		P1 = 0x00; //设置P1初始为0,灯不亮
    		EA = 1;  //打开总中断
    		EX0 = 1; //打开外部中断0
    		IT0 = 1;  //设置触发方式为下降沿触发方式
    		EX1 = 1; //打开外部中断1
    		IT1 = 1;  
    		while(1); //死循环
    }
    

    仿真

    按下最上面的键P3 INT0脚低电平,发生一次外部中断0事件
    按下最下面的键P3 INT1脚低电平,发生一次外部中断1事件
    在这里插入图片描述

    展开全文
  • 1.中断有电平和边沿两种,电平就是某种电平(高或者低电平)时触发中断,边沿触发市指从高电平向低电平,或者低电平到高电平跳变时触发 2.如果串口先后接收到4个char型数据,分别设a,b,c,d,则转换int型...
    1.中断有电平和边沿两种,电平就是为某种电平(高或者低电平)时触发中断,边沿触发市指从高电平向低电平,或者低电平到高电平跳变时触发
    2.如果串口先后接收到4个char型数据,分别设为a,b,c,d,则转换为int型(并行数据)的方法为:int bxdate;
    bxdate = (a << 24)|(b<<16)|(c << 8)|(d<<0);
    为什么是bxdate = (a << 24)|(b<<16)|(c << 8)|(d<<0); 能否讲的详细点,非常感谢,若a=00000110转换成16进制数是多少 是0x06串口只能接收8位二进制数,即char型,想转换为32位int型,即并口数据,就绪要四个char型组合为一个int型。假设串口发过来的数据是先高位后低位,则用上面的表达式可实现串并组合转换。反之类似

    展开全文
  • 若IT0=1,则为下降沿触发 外部中断0初始化: 初始化方法一: void Init_INT0() { IT0=1;//设置外部中断0;下降沿触发 EX0=1;//开启外部中断0; EA=1;//开启中断总开关 } 初始 化方法二: void

    中断

    在这里插入图片描述

    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;
    
    }
    展开全文
  • 问题 用C编程,设置两个外部中断(INT0和INT1)...要求:中断触发方式为下降沿触发,按键有消抖功能 仿真 代码 #include &lt;reg51.h&gt; #define uchar unsigned char void delay(uchar c) { //延时c毫秒...

    问题

    用C编程,设置两个外部中断(INT0和INT1)按键,优先级IP=0x04,即把外部中断1设置为高级优先级,外部中断0为低级优先级,使外部中断1嵌套在外部中断0中。
    要求:中断触发方式为下降沿触发,按键有消抖功能

    仿真

    在这里插入图片描述

    代码

    #include <reg51.h>
    #define uchar unsigned char
    
    void delay(uchar c) { //延时c毫秒
    		uchar a, b;
    		for (; c > 0; c--) 
    		for (b = 142; b > 0; b--) 
    		for (a = 2; a > 0; a--);
    }
    
    void INT_0() interrupt 0 { //外部中断0
    		EX0=0; //关闭外部中断0,防止在执行过程中再次发生中断
    		delay(20); //消除抖动
    		EX0=1; //打开外部中断0
    		while(1) { //led向下循环点亮,表示正在执行外部中断0服务程序
    				P1 = 0xfe; delay(200);
    				P1 = 0xfd; delay(200);
    				P1 = 0xfb; delay(200);
    				P1 = 0xf7; delay(200);
    				P1 = 0xef; delay(200);
    				P1 = 0xdf; delay(200);
    				P1 = 0xbf; delay(200);
    				P1 = 0x7f; delay(200);
    		}
    }
    
    void INT_1() interrupt 2 { //ÍⲿÖжÏ1
    		EX1=0;
    		delay(20);
    		EX1=1; 
    		P1 = 0x00; delay(200); //led全部点亮,闪烁3次,表示正在执行外部中1服务程序
    		P1 = 0xFF; delay(200);
    		P1 = 0x00; delay(200);
    		P1 = 0xFF; delay(200);
    		P1 = 0x00; delay(200);
    }
    
    void main() {
    		P1 = 0xFF;
    		EA = 1;  //打开总中断
    		EX0 = 1; //打开外部中断0
    		IP = 0x04; //设置外部中断1为高级优先级
    		IT0 = 1; //设置触发方式为下降沿触发
    		EX1 = 1; //打开外部中断1
    		IT1 = 1; 
    		while(1);//死循环
    }
    
    展开全文
  • 1. 电平触发方式 ○ CPU采样外部中断引脚电平 ...2. 下降沿触发方式 ○ CPU采样外部中断的引脚电平 ○ 如果上一个机器周期电平高,下一个机器周期电平低,则硬件置1(IE=1) ○ 等待CPU响应中断 ○ CPU.
  • 关于51单片机外部中断触发方式

    万次阅读 2016-01-25 11:47:55
    51单片机的外部中断,分为低电平触发和下降沿触发。在单片机内部,分别由控制位 IT0 和 IT1 来控制。复位时,IT0/1 0,即默认低电平触发。一般来说,外设第一次向单片机申请外部中断时,单片机使用那种触发...
  • ;引脚P3.3/INT1外部中断 ;外部中断1程序跳转 ORG 0013H LJMP INT1_PROGRAM ...调用外部中断1的初始化程序 ...外部中断1初始化程序 ...外部中断1请求源标志。...中断触发方式为下降沿触发,CLR IT1为低电平触...
  • 外部中断

    2019-04-16 20:56:52
    一.外部中断相关寄存器 1.定时器/计数器控制...IT1:外部中断1触发方式控制位 当IT1=0时,电平触发方式(低电平有效) 当IT1=1时,边沿触发方式(下降沿有效) 2.中断允许控制寄存器(IE) EX0:外部中断0...
  • 硬件配置中为双边沿触发; 问题:下降沿触发部分程序可以执行...if(GPIO_ReadInputPin(LED1_PORT,LED1_PIN)==1)//下降沿触发中断 条件函数: BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_Type...
  • //设置端口下降沿触发中断 while(1) { if(PrintFlag == 1) { { /*!!!debug*/ unsigned char buf[50] = {0}; sprintf(buf, "##debug -- start Chip_GPIO_WriteDirBit_59 -- 2\r\n"); ...
  • 1.stm32外部中断设计

    2020-04-03 11:27:48
    例:利用Nucleo开发板上的B1和LD2,将按键B1对应引脚设置成外部中断下降沿触发,在中断服务函数中,翻转LD2状态。 中断初始化配置: 1.将GPIO设置:GPIO_EXTI功能 2.设置中断触发条件 3.使能相关的NVIC通...
  • AT89C51单片机外部中断

    2020-11-27 22:12:30
    C51单片机外部中断调用P3...IT1:外部中断1触发方式设置位,IT1=1下降沿触发,IT1=0低电平触发; 外部中断0中断服务程序的编写: void 函数名()interrupt 0 { } 外部中断1中断服务程序的编写: void 函数名()inte
  • #include<reg52.h> typedef unsigned int u16;...//外部中断0 的触发方式控制位 1表示为下降沿触发 EX0=1;//打开ITO的中断允许 ET0=1;//打开定时器0中断允许 EA=1;//打开中断总开关 } void delay(int ...
  • 单片机控制外部中断输入

    千次阅读 2015-12-14 11:45:50
    外部中断即通过外部电平或上下降沿触发所产生的中断 2、寄存器介绍 外部中断主要设置3个寄存器参数EA、EX、IT,这些寄存器分别属于IE和TCON; 其中 EA为总中断开关,1为打开,0为关闭; EX为外部中断允许寄存器...
  • HAL库教程4:外部中断

    千次阅读 2019-04-09 22:36:11
    外部中断机制   本章我们仍然是通过按键来控制LED,只不过实现方式由轮询变为了外部中断什么需要外部中断?为了给CPU减轻负担。   举个例子 ...中断可以由上升沿、下降沿或双边沿触发。换句话说,中...
  • 夜猫子:51单片机中断基本概念​zhuanlan.zhihu.com外部中断软件设计原理中断发生的三个条件①中断源有中断请求;...//设置外部中断的触发方式(下降沿触发)如果要配置的是外部中断 1,只需将 EX0 改 ...
  • 单片机的外部中断(二)

    千次阅读 2018-12-01 21:58:33
    前言:单片机的中断系统(一)  80C51单片机提供两个外部中断口: INT0(P3.2)和INT1(P3.3)引脚输入。...当外部中断设置为下降沿触发时,若处理器在连续两个机器周期扫描到INT0引脚的电平先后为高...
  • stm8s外部中断

    千次阅读 2018-03-17 22:31:13
    stm8s外部中断相关的寄存器除了io的几个寄存器之外,还有...以PC1下降沿触发为例,配置如下:asm("sim");//关总中断EXTI_CR1_PCIS = 2;//仅下降沿触发PC_DDR_DDR1 = 0;//io方向:输入PC_CR1_C11=0;//因为D...
  • DSP28335外部中断配置过程

    千次阅读 2019-04-15 21:59:24
    28335外部中断基本特点 ...外部中断的触发方式可选上升沿或下降沿触发 **外部中断外设和其他外设不一样,在中断函数中只用清除PIE中断即可不用清除外设中断**。 外部中断配置过程 其实28335的外部中断配...
  • 文章目录1,中断硬件机制2,外部中断的配置2.1,查看原理图2.2,配置I/O口为中断模式2.3,配置中断为下降沿触发2.4,使能外部中断 1,中断硬件机制 2,外部中断的配置 2.1,查看原理图 2.2...
  • STM32外部中断

    2021-01-10 21:00:30
    每个中断线都可以独立地配置它的触发事件(上升沿或下降沿或双边沿) 并能够单独地屏蔽:有一个挂起寄存器维持所有中断请求的状态。EXTI可以检测到脉冲宽度小于内部APB2的时钟周期。多达80个通用IO口连接到16个外部...
  • 090外部中断

    2017-01-10 11:55:51
    STM32的外部中断除了外电触发外(上升沿还是下降沿之类的),还有一些支持其他外部中断,如闹钟等,具体看手册 外部中断触发分: 中断和事件 外部中断接口: (1)STM32的每一个GPIO口都可...
  • STC8951单片机的外部中断

    万次阅读 2018-10-12 07:50:49
    以程序为例: #include&lt;reg52.h&gt; sbit led=P3^0;... //设置外部中断0的触发方式为下降沿 ... //中断的设置,首先设置中断的触发方式,... //设置外部中断1触发方式为下降沿 //顺序保证...
  • 外部中断配置

    2018-09-12 11:53:18
    1.明确要使哪个端口作为触发。(以PA0例)  因为是PA0,所以应当打开外部中断线0. ...任一边沿触发均可进入中断。  EXTI-&gt;RTSR |= 1 &lt;&lt; 0;//上升沿触发  EXTI-&gt...
  • F2812 外部中断及其中断问题

    千次阅读 2013-03-07 14:18:35
    F2812的外部中断,只有三个外接引脚,分别是XINT1、2、13,每个中断都可以选择上升沿触发或者是下降沿触发,同时还可以选择使能/禁止状态。书上是这样描述这三个中断的:F2812支持3个隐藏的外部中断(XINT1,2,13),...
  • //设置外部中断的触发方式(下降沿触发) 如果要配置的是外部中断 1,只需将 EX0 改 EX1,IT0 改 IT1 在编写程序时通常我们会将外部中断的配置放到一个自定义函数内便于管 理维护。如下伪代码所示: void Int0...
  • ZigBee外部中断控制

    千次阅读 2018-09-03 16:45:21
    1,首先我们来认识一下几个寄存器  IEN0,IEN1,IEN2 //各外设或端口中断使能寄存器  P0IEN、P1IEN,P2IEN //通用I/O 中断使能... PICTL //端口中断控制位,配置上升沿触发中断还是下降沿触发中断  EA ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 134
精华内容 53
关键字:

外部中断1为下降沿触发