精华内容
下载资源
问答
  • 【51单片机实验】INT0中断控制LED

    千次阅读 2017-11-11 15:23:43
    INT0中断控制LED

    前言
     【跪着做实验】
    实验内容
    INT0中断控制LED:
    友情链接【微笑微笑】:【单片机实验】INT0中断计数(我真是个好人)
    INT0中断控制LED电路
    程序分析

    #include<reg51.h>
    #define uchar unsigned char
    #define uint unsigned int
    
    sbit LED = P0 ^ 0;
    
    void main()
    {
        LED = 1;
    
        EA = 1;     
        EX0 = 1;    //IE= 0x81
                    //允许外部中断0,并设置触发方式为“下降沿触发”
    
        TCON = 0x01;    //ITO = 1
        while (1);  
    
    }
    //while(1);防跑飞,保证中断程序在一个持续运行的系统中而自动调用
    
    void External_Interrupt_0() interrupt 0
    //中断函数:INT0,外部中断
    {
        LED = !LED;//控制LED的亮灭,在按键控制里有用到~表示
    }

    后语
     不知道什么时候能像大神一样,对芯片各个引脚异常熟悉,信手拈来,就好像一位世外高人,指点小白:你只需如此如此……,便能……所以,fighting,fighting,保证在周一前完成的……【我的网络考试啊】,这一段,还是放到后语里吧
     本次实验很快,成就感很足,不知道是不是老老实实回去补上一节的原因,哈哈

    展开全文
  • 在51单片机中,有2路外部中断输入INT0(P3.2)和INT1(P3.3);2路中断触发信号:低电平触发和下降沿触发。 中断允许寄存器IE(0:禁止中断;1:使能中断) 定时/计数器中断控制寄存器TCON寄存器 TF1:定时/计数器T1...

    在51单片机中,有2路外部中断输入INT0(P3.2)和INT1(P3.3);2路中断触发信号:低电平触发和下降沿触发。

    中断允许寄存器IE(0:禁止中断;1:使能中断)
    在这里插入图片描述定时/计数器中断控制寄存器TCON寄存器
    TF1:定时/计数器T1溢出中断请求标志位(0:无中断请求;1:有中断请求)
    TR1::定时/计数器T1启动位(0:停止:定时/计数器;1:启动:定时/计数器)
    TF0:定时/计数器T0溢出中断请求标志位
    TR0:定时/计数器T0启动位0
    IE1:外部中断1请求标志位
    IT1:外部中断1触发方式控制位(0:低电平触发;1:高电平触发)
    IE0:外部中断0请求标志位
    IT0:外部中断0触发方式控制位

    在开发板上完成以下任务:

    1. 启动后,灯L11闪烁,其他LED灯熄灭
    2. S4按键,即引脚外部中断INT1设置为下降沿触发
    3. 设计中断服务函数,外部中断响应后,将L12灯的开关状态翻转
    
    #include "reg52.h"
    
    //关闭外设
    void Cls_Peripheral(void)
    {
      P0 = 0xFF;
      P2 = P2 & 0x1F | 0x80;			// P27~P25清零,再定位Y4C
      P2 &= 0x1F;						// P27~P25清零
      P0 = 0;
      P2 = P2 & 0x1F | 0xA0;			// P27~P25清零,再定位Y5C
      P2 &= 0x1F;						// P27~P25清零
    }
    
    sbit L11=P3^0;
    sbit L12=P3^1;
    
    void Delay (unsigned int t)   //具体延时的长度可以通过参数传递
    {
       while(t--);
    }
    
    
    void led_shan()    //L11灯闪烁函数
    {
         L11=0;
    	 Delay(40000);
    	 L11=1;
    	 Delay(40000);
    }
    
    
    // 系统初始化
    void Sys_Init(void)
    {
        IT1 = 1;  							// 边沿触发方式(下降沿)
        EX1 = 1;
        EA = 1;  							// 开启总中断
    }
    
    
    //中断服务函数
    void  isr_intr_1(void) interrupt 2
    {
      L12=~L12;     //S4按下,LED灯状态翻转
    }
    
    //主函数
    void main()
    {
    	  Cls_Peripheral();
    	  Sys_Init();
          while(1)
    		{
    		   led_shan();
    		}
    }
    
    展开全文
  • stm32f103ZET6外部中断控制led

    千次阅读 2020-08-05 19:27:20
    目录stm32f103zet6外部中断控制led灯stm32f103zet6外部中断控制ledled端口定义按键端口定义按键中断的配置中断的配置个人笔记延时函数 stm32f103zet6外部中断控制ledled端口定义 #define LED1_GPIO_PORT GPIOB...

    stm32f103zet6外部中断控制led灯

    stm32f103zet6外部中断控制led灯

    led端口定义

    #define LED1_GPIO_PORT    	GPIOB			          /* GPIO端口 */
    #define LED1_GPIO_CLK 	    RCC_APB2Periph_GPIOB		
    #define LED1_GPIO_PIN		GPIO_Pin_5			
    
    #define LED2_GPIO_PORT    	GPIOE			          /* GPIO端口 */
    #define LED2_GPIO_CLK 	    RCC_APB2Periph_GPIOE		
    #define LED2_GPIO_PIN		GPIO_Pin_5			
    

    按键端口定义

    #define KEY1_INT_GPIO_PORT         GPIOE
    #define KEY1_INT_GPIO_CLK          (RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO)
    #define KEY1_INT_GPIO_PIN          GPIO_Pin_3
    #define KEY1_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOE
    #define KEY1_INT_EXTI_PINSOURCE    GPIO_PinSource3
    #define KEY1_INT_EXTI_LINE         EXTI_Line3
    #define KEY1_INT_EXTI_IRQ          EXTI3_IRQn
    
    #define KEY1_IRQHandler            EXTI3_IRQHandler
    
    
    #define KEY2_INT_GPIO_PORT         GPIOE
    #define KEY2_INT_GPIO_CLK          (RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO)
    #define KEY2_INT_GPIO_PIN          GPIO_Pin_4
    #define KEY2_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOE
    #define KEY2_INT_EXTI_PINSOURCE    GPIO_PinSource4
    #define KEY2_INT_EXTI_LINE         EXTI_Line4
    #define KEY2_INT_EXTI_IRQ          EXTI4_IRQn
    
    #define KEY2_IRQHandler            EXTI4_IRQHandler
    
    

    按键中断的配置

    void EXTI_Key_Config(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO结构体变量
    	EXTI_InitTypeDef EXTI_InitStructure;//定义EXTI结构体变量  用来初始化外部中断的IO
    
    	/*开启按键GPIO口的时钟*/
    	RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);
    												
    	/* 配置 NVIC 中断*/
    	NVIC_Configuration();
    	
    /*--------------------------KEY1配置-----------------------------*/
    	/* 选择按键用到的GPIO */	
      GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
      /* 配置为上拉输入 */	
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
      GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
    
    	/* 选择EXTI的信号源 */
      GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE); 
      EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;
    	
    	/* EXTI为中断模式 */
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置 EXTI 线路为中断请求
    	/* 下降沿中断 */
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
      /* 使能中断 */	
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure);
    	
      /*--------------------------KEY2配置-----------------------------*/
    	/* 选择按键用到的GPIO */	
      GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
      /* 配置为上拉输入 */	
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//按键的另一端接地,故而使用上拉输入
      GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);
    
    	/* 选择EXTI的信号源,将GPIOE4配置为外部中断线路,挂载在外部线路EXTI_Line4 */
      GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE); 
      EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;//选择中断线路
    	
    	/* EXTI为中断模式 */
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    	/* 上升沿触发 */
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
      /* 使能中断 */	
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure);
    }
    

    中断的配置

    static void NVIC_Configuration(void)
    {
      NVIC_InitTypeDef NVIC_InitStructure;
      
      /* 配置NVIC为优先级组1 */
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
      
      /* 配置中断源:按键1 */
      NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
      /* 配置抢占优先级 */
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;
      /* 配置子优先级 */
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
      /* 使能中断通道 */
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
      
      /* 配置中断源:按键2,其他使用上面相关配置 */ 
      /* 配置抢占优先级 */
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 14;
      /* 配置子优先级 */
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
      NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;
      NVIC_Init(&NVIC_InitStructure);
    }
    

    个人笔记

    关于GPIO功能的配置,开发板的按键是接地的 ,故而用上拉输入,才会有高低电平的变化(新手个人理解)
    中断的配置

    定义结构体变量
    NVIC_InitTypeDef NVIC_InitStructure;
    配置中断组别
    void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
    配置中断源(NVIC_InitTypeDef)
    中断抢占式优先级(NVIC_InitTypeDef)
    中断的响应优先级(NVIC_InitTypeDef)
    使能中断通道(NVIC_InitTypeDef)
    将结构体变量的值初始化给中断
    

    延时函数

    void Delay_us(u32 i)
    {
        u32 temp;
        SysTick->LOAD=9*i;         //设置重装数值, 72MHZ时
        SysTick->CTRL=0X01;         //使能,减到零是无动作,采用外部时钟源
        SysTick->VAL=0;                //清零计数器
        do
        {
            temp=SysTick->CTRL;           //读取当前倒计数值
        }
        while((temp&0x01)&&(!(temp&(1<<16))));     //等待时间到达
        SysTick->CTRL=0;    //关闭计数器
        SysTick->VAL=0;        //清空计数器
    }
    
    
    void Delay_ms(u32 i)
    {
        u32 temp;
        SysTick->LOAD=9000*i;      //设置重装数值, 72MHZ时
        SysTick->CTRL=0X01;        //使能,减到零是无动作,采用外部时钟源
        SysTick->VAL=0;            //清零计数器
        do
        {
            temp=SysTick->CTRL;       //读取当前倒计数值
        }
        while((temp&0x01)&&(!(temp&(1<<16))));    //等待时间到达
        SysTick->CTRL=0;    //关闭计数器
        SysTick->VAL=0;        //清空计数器
    }
    

    中断服务函数

    void KEY1_IRQHandler(void)
    {
      //确保是否产生了EXTI Line中断
    	if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) 
    	{
    		Delay_ms(50);
    		if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) 
    	{
    		// LED1 取反		
    		LED1_TOGGLE;
    	}
        //清除中断标志位
    		
    		EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);     
    	}  
    }
    
    void KEY2_IRQHandler(void)
    {
      //确保是否产生了EXTI Line中断
    	if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) 
    	{
    		Delay_ms(50);
    		if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) 
    	{
    		// LED2 取反		
    		LED2_TOGGLE;
    	}
        //清除中断标志位
    		EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);     
    	}  
    }
    
    展开全文
  • 手动扩展外部中断INT0

    2012-06-03 18:23:21
    手动扩展外部中断INT0INT1,当INT0 产生中断时,使LED8 亮、灭闪烁4 次;当INT1 产生中断时,使LED 由右向左轮流显示,一次亮两个,循环 4 次。先按 KK1-,观察实验现象,然后按 KK2-,观察实验现象。 硬件连线...
  • 89C51单片机之外部中断0、1控制LED

    千次阅读 2020-03-22 18:37:06
    89C51单片机之外部中断0、1控制LED 1.proteus仿真图 2.keli代码 #include <...//外部中断0控制程序 void INT0test() interrupt 0 { led1=~led1; } //外部中断1控制程序 void INT1test() interrupt ...

    89C51单片机之外部中断0、1控制LED

    1.proteus仿真图
    在这里插入图片描述
    2.keli代码

    #include <reg51.h>
    
    sbit led1=P0^0;
    sbit led2=P1^0;
    
    //外部中断0控制程序
    void INT0test() interrupt 0
    {
    	led1=~led1;
    }
    
    //外部中断1控制程序
    void INT1test() interrupt 2
    {
    	led2=~led2;
    }
    
    int main()
    {
    	EA=1;    //全局中断使能
    	EX0=1;   //外部中断0使能
    	EX1=1;   //外部中断1使能
    	IT0=0;   //外部中断0触发方式为低电平有效
    	IT1=1;   //外部中断1触发方式为电平下降沿有效
    	led1=0;
    	led2=0;
    	while(1)
    	{
    		
    	}
    }
    
    展开全文
  • C51程序 #include<reg51.h>//头文件 #include<...sbit led=P1^0;//输出端-led sbit break1=P3^2;//输出端-led //延时函数 void delay_ms(uint ms)// 延时子程序 1000ms = 1s { uint a,b; for(a
  • 2、实验目的:学习通过编程外部中断0控制LED亮灭变化。 3、实验连接图。 4、实验代码。 #include<reg52.h> main() { P1=0x55; EA=1; //dakai总中断开关 EX0=1; //打开外部中断0 IT0=1; //下降沿触发 ...
  • 8位LED循环闪烁(定时器延时)+ 外部中断控制LED闪烁 代码 #include<reg51.h> #define uint unsigned int #define uchar unsigned char #define ulint unsigned long int sbit led=P0^0; char time=0; void...
  • 实验目的:用独立按键作为外部中断的触发信号,当按键按下发送来信号的时候,再执行中断函数(在函数内定义LED灯的亮灭) 如上图所示51单片机总共有5个中断源,本博文先展示第一种 INT0 中断 先看电路图 按键 P3^...
  • 外部中断控制LED倒流水灯(CC2530)

    千次阅读 2020-08-31 13:01:28
    通过按键S1产生外部中断改变LED1、LED2、LED3 执行流水灯 二、实验相关电路图 三、配置相关寄存器 P1DIR |= 0x13;将P1DIR(P1端口方向寄存器)上的P1_0、P1_1、P1_4设为1,即方向设为 输出方向; P0IEN |= 0x02...
  • 定时器控制led50ms秒变化一次 中断led全灭 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit K1=P3^2; void delay(int i) { while(i--); } void init() { TMOD = 0x01; ...
  • #define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4 //延迟函数 void Delay(unsigned int t) { while(t--); } //端口初始化函数 void Init_Prot() { //配置4个LED灯的引擎 //选择端口的功能 ...
  • 概述1.中断需要用到寄存器说明: · SRCPND、SUBSRCPND 表明那些中断被触发。  SUBSRCPND中几位若有一位置位,且SUBINTMSK未屏蔽,则...1==FIQ,0==IRQ · INTOFFSET:INTPND寄存器位[x]置1时
  • 3)、过按键key1产生外部中断改变LED1\LED2\LED3状态 2.实验平台 1)cc2530zigbee开发板平台 ①协议栈版本:无,初级教程为裸机编程。 ②编译软件:IAR Embedded Workbeench for 8051-V8.1...
  • 根据大佬的代码 我更改代码实现了按键对led灯的开和关的控制 定义按键和LED灯(wiringPi编码) #define key 29 #define led 23 //wiringPi pin 中断执行函数 int flag=0; void blank(void) { flag++; } ...
  • 外部中断o利用中断控制LED闪烁,按键就相当于中断。 notes: (1)IT0=1 :是设置触发方式是边沿触发; (2)开启中断的三个步骤设置触发方式,开中断, 开总中断 (3)有按键的地方要记得消抖 连线方式:两根杜邦线即可...
  • CC2530外部中断学习
  • 在51单片机的某一IO口上接8只LED,在外部中断0输入P3.2(INT0)引脚接一只按钮开关K1,在外部中断1输入P3,.3(INT1)引脚接一只按钮开关K2。要求K1和K2未按下时,8只LED呈流水灯逐一动态显示【方向自定义】,当K1按下时...
  • USART中断控制LED我很早就已经解决了,这个是在我第二版本的基础上,将按键变成了中断,就这么简单,话不多说,开始 1.需要移植的文件首先是bsp_exti.c /** **************************************************...
  • 本次实验是在上次实验的基础上,稍加修改,通过中断方式,利用按键控制led流水灯的闪烁,配置非常简单,只需要几分钟搞定。(附加上次实验链接:Proteus仿真STM32流水灯实验例程、详细步骤。) 二、在Proteus中配置...
  • 外部中断EXTI的方式控制LED灯EXTI简介EXTI 功能框图中断线路流程(红色虚线)编号 1 是输入线编号 2 是一个边沿检测电路编号 3 电路实际就是一个或门电路编号 4 电路是一个与门电路编号 5 是将 EXTI_PR 寄存器内容...
  • void EXTI4_IRQHandler(void) { delay_ms(5);... LED0 =1; delay_ms(500); LED0=0; delay_ms(500); } } EXTI_ClearITPendingBit(EXTI_Line4);//清除 LINE4 上的中断标志位 }
  • STM32_外部中断之按键控制点亮LED

    万次阅读 2018-02-25 09:52:45
    名称:STM32_外部中断之按键控制点亮LED灯 说明:对于STM32来说,其中断种类众多。(除了外部中断还有内部异常)其每个GPIO端口的引脚都可以作为外部中断中断源。 对其的设置也比C51要复杂的多。对于具体的使用来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,420
精华内容 3,768
关键字:

外部int0中断控制led