STM8-利用外部中断编写两个按键控制灯的亮灭

发布者:WhisperingGlow最新更新时间:2015-12-31 来源: eefocus关键字:STM8  外部中断  按键控制灯 手机看文章 扫描二维码
随时随地手机看文章
目的:熟悉外部中断的使用。(两个按键控制灯的亮灭)
#include"stm8s.h"
#include "stm8s_exti.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
void delay(uint i)
{
  while(i--);
}
void main()
{
 
  GPIO_DeInit(GPIOD);
  GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);//输出
  GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);//输出
  GPIO_DeInit(GPIOB);
  GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_IT);//输入
  GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_IT);//输入
 
  EXTI_DeInit();
  EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB,  EXTI_SENSITIVITY_FALL_ONLY);
 
  
  enableInterrupts();
  while (1)
  {
  }
}
#pragma vector=6//端口B中断编号为4,4+2=6
__interrupt void EXIT_PORTB_IRQHander(void)
{
  if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_0)==0)
  {
    delay(250);//延时消抖动
    if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_0)==0)
    {
      while((GPIO_ReadInputData(GPIOB)&GPIO_PIN_0)==0);//释放检测
      GPIO_WriteReverse(GPIOD, GPIO_PIN_0);
    }
  }
  if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)==0)
  {
    delay(250);//延时消抖动
    if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)==0)
    {
      while((GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)==0);//释放检测
      GPIO_WriteReverse(GPIOD, GPIO_PIN_1);
    }
  }

}
 
关键字:STM8  外部中断  按键控制灯 引用地址:STM8-利用外部中断编写两个按键控制灯的亮灭

上一篇:STM8-利用外部中断编写一个按键控制灯的亮灭
下一篇:STM8-利用TIM2的定时功能,实现灯每隔1S闪烁

推荐阅读最新更新时间:2024-03-16 14:42

通过SWIM实现类似ST-LINK功能,给STM8下载
技术依赖:SWIM通信、FLASH操作、串口、DMA。 主要变成思路,通过串口实现命令行工具,再通过主机的swim进行slave烧录。其中串口数据的发送通过DMA接收。 SWIM通信之前有介绍,有需要可以查看,本文章主要介绍SWIM对STM8烧写时的思路。 一、直接通过WOTF进行烧写。 此方法确实可行,但是实际试验后发现,在烧写过程中由于WOTF的失败率导致烧写速度极慢。不建议采用。 二、让从机自己烧写flash 我们知道,在烧写flash时有块烧写。而且块烧写的程序时运行在RAM中的。我们可以利用这一特点,将编写好的flash 块烧写的程序(指定需要烧录数据的地址和需要烧录地址的地址)通过SWIM下载到从机RA
[单片机]
STM8学习笔记---利用PWM功能输出SPWM波
要生成SPWM波,其关键是要生成一组正弦规律变化的数字,然后将数字对应成PWM输出的占空比,按照顺序输出占空比就行。生成正弦波的方法在 使用C语言产生正弦波数据 这篇博客有详细说明,这里就不说了。 本例程中生成的64个数据是:50,54,59,64,69,73,77,81,85,88,91,94,96,97,99,99,100,99,99,97,96,94,91,88,85,81,77,73,69,64,59,54,50,45,40,35,30,26,22,18,14,11,8,5,3,2,0,0,0,0,0,2,3,5,8,11,14,18,22,26,30,35,40,45 它所组成的波形为 下面看C代码的实现
[单片机]
<font color='red'>STM8</font>学习笔记---利用PWM功能输出SPWM波
再造STM32---第十五部分:EXTI外部中断/事件控制
本章参考资料:《STM32F4xx 中文参考手册》系统配置控制器以及中断和事件章节。上一章节我们已经详细介绍了 NVIC,对 STM32F4xx 中断管理系统有个全局的了解,我们这章的内容是 NVIC 的实例应用,也是 STM32F4xx 控制器非常重要的一个资源。 学习本章时,配合《STM32F4xx 中文参考手册》系统配置控制器以及中断和事件章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 特别说明,本书内容是以 STM32F42xxx 系列控制器资源讲解。 15.1 EXTI 简介: 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应
[单片机]
再造STM32---第十五部分:<font color='red'>EXTI</font>—<font color='red'>外部中断</font>/事件<font color='red'>控制</font>器
STM8 bootloader(boot和app皆可使用中断)
STM8 In Application Programming IAP编写的三个要点: 分析STM8启动过程和C运行时环境建立 规划bootloader和application以及各自向量表在内存中的分布 如何重定位STM8中断向量表 思路: 要编写IAP程序首先需要解决的问题是程序在运行过程中,当发生异常时,如何保证程序正常的跳转到相应的异常服务函数(不论程序是运行在bootloader还是application)。 但STM8没有类似NVIC之类的中断控制器管理中断向量的地址,STM8的向量表固定在0x008000,因此在IAP中需要重定位向量表来实现(为了bootLoader和application都可以使用中断,因
[单片机]
<font color='red'>STM8</font> bootloader(boot和app皆可使用中断)
stm32外部中断进入不了的原因分析
最近几天折腾stm32,遇见了很郁闷的问题,外部中断进入不了,最后找到解决方法的时候觉得 唉,下面总结几条原因以便于大家少走弯路。 1.切记打开复用时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 2.最好加上一个EXTI_GenerateSWInterrupt(EXTI_LineX);产生软件中断便于判断是不是本来就配置错误; 3.开启硬件仿真: 4.正确设置中断向量地址: #if defined (VECT_TAB_RAM) /* Set the Vector Table base location at 0x20000000 */ NVIC_Se
[单片机]
stm32<font color='red'>外部中断</font>进入不了的原因分析
STM8内部时钟切换
简介:在STM8内部有时钟切换功能,可以在需要时变换时钟的频率。板子为STM8_Discovery,LED为PD0。 程序如下: //功能:STM8的内部时钟分频切换 #include iostm8s105c6.h // 函数功能:延时函数 // 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ void DelayMS(unsigned int ms) { unsigned char i; while(ms != 0) { for(i=0;i 250;i++) { } for(i=0;i 75;i++) { } ms--; } } /
[单片机]
IAR for STM8 研究
最近移植了一个UCOSII到STM8L,先从编译器谈起。 由于IAR与VC++很像,所以直接就选用了它。 1. 函数参数传递 了解到它用了16个虚拟寄存器(也可以配置成12个)作为局部变量和函数参数传递。地址从0x00~0x0F。从MAP文件中可以看到。注意0地址是RAM的,所以函数中对指针的判断要特别注意。 从调试时反汇编的代码可以看到,C函数调用开始前都需要调用系统的一些函数用于保存参数,但在汇编里的函数就必须自己保存。比如中断回调函数: 汇编: PUBLIC _interrupt_29 //UART_TXE irq SECTION `.far_func.text`:CODE:NOROOT(0) _
[单片机]
关于51单片机“外部中断触发方式”的经验总结
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。 这个原理很好理解。但应用时需要特别注意的几点: 1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved