外部中断的应用

一.外部中断0应用

 1·k3控制LED闪烁

#include"reg51.h"
typedef unsigned char u8;
typedef unsigned int u16;

 sbit led1=P2^0;
 sbit led2=P2^1;
 sbit led3=P2^2;
 sbit led4=P2^3;
 sbit led5=P2^4;
 sbit led6=P2^5;
 sbit k3=P3^2;
 void delay(u16  i)
 {
 while(i--);
 }
 void zhongduan()
 {
 EA=1;
 IT0=1;
 EX0=1;
 }
 void main()
 {
   zhongduan();
 }
 void Int0() interrupt 0
 {
   delay(1000);
   if(k3==0)
   {
   led1=~led1;
   led2=~led2;
   led3=~led3;
   led4=~led4;
   led5=~led5;
   led6=~led6;
	 
   }
 }

效果

犯错点:

void main()
{
void zhongduan();
}

2·控制蜂鸣器

#include"reg51.h"

typedef unsigned char u8;	  
typedef unsigned int u16;

sbit beep=P1^5;
sbit k3=P3^2;	   

void delay(u16 i)
{
	while(i--);	
}


void zhongduan()
{
EA=1;
IT0=0;
EX0=1;
}
void main()
{
   zhongduan();
}
void Int0() interrupt 0
{
	
if(k3==0)
	{	
		beep=~beep;
		delay(10);

	}
		   
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片机外部中断是单片机的一个重要功能,它可以实现在某些特定的事件发生时,立即停止当前程序的运行,转而执行一个中断服务程序,处理完后再返回原程序。这样可以提高单片机的响应速度和处理效率,常用于实时控制、通讯等领域。 下面以STM32F103C8T6为例,介绍如何使用外部中断实现一个简单的应用。 实验目的: 通过按下按键触发外部中断,控制LED灯的亮灭。 实验器材: - STM32F103C8T6开发板一块 - 杜邦线若干 - LED灯一个 - 220欧姆电阻一个 - 按键一个 实验步骤: 1.连线 将开发板上的PB12引脚与按键的一端相连,另一端与GND相连;将开发板上的PC13引脚通过220欧姆电阻与LED正极相连,LED负极与GND相连。 2.编写程序 在Keil中新建一个工程,编写如下代码: ``` #include "stm32f10x.h" void EXTI15_10_IRQHandler(void) //中断服务程序 { if(EXTI_GetITStatus(EXTI_Line12) == SET) //判断是否是PB12引脚触发的中断 { GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); //PC13引脚输出高电平,点亮LED EXTI_ClearITPendingBit(EXTI_Line12); //清除中断标志位 } } void init(void) //初始化函数 { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOB和GPIOC时钟 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PB12引脚输入模式 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //PC13引脚输出模式 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能AFIO时钟 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12); //将PB12引脚映射到外部中断线12 EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line12; //线12 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //外部中断15-10通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; //抢占优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //响应优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } int main(void) { init(); while(1); } ``` 3.编译下载 编译程序,下载到开发板上。 4.按下按键 按下按键,LED灯会亮起来,松开按键,LED灯熄灭。 实验原理: 外部中断由外部事件触发,当事件发生时,单片机会立即停止当前程序执行,跳转到中断服务程序中执行,处理完毕后再返回原程序继续执行。本次实验中,按下按键会触发PB12引脚的下降沿,从而触发外部中断线12,进入中断服务程序,将PC13引脚输出高电平,点亮LED。松开按键后,PC13引脚输出低电平,LED熄灭。 总结: 本次实验介绍了如何在STM32F103C8T6单片机上使用外部中断实现一个简单的应用。通过这个实验,可以了解到外部中断的原理和应用,以及如何在Keil中编写程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值