stm8中断的学习

发布者:温柔的爱情最新更新时间:2018-09-05 来源: eefocus关键字:stm8  中断 手机看文章 扫描二维码
随时随地手机看文章

//PA4口中断初始化
void Driver_ExtIntOn(void)

//PA4 上拉输入
PA_DDR &= CLRBIT4;
PA_CR1 |= SETBIT4;
//下降沿触发
EXTI_CR1 |= SETBIT1;
EXTI_CR1 &= CLRBIT0;
//开启端口中断
PA_CR2 |= SETBIT4;

}

volatile bool ExiFlag = False;
//中断服务程序
@far @interrupt void Driver_EXI_Interrupt(void)
{
//--- 外部中断处理 ----
//置中断标志
ExiFlag = True;
}




struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap  */
{0x82, NonHandledInterrupt}, /* irq0  */
{0x82, NonHandledInterrupt}, /* irq1  */
{0x82, NonHandledInterrupt}, /* irq2  */
{0x82, Driver_EXI_Interrupt}, /* irq3  */
{0x82, NonHandledInterrupt}, /* irq4  */
{0x82, NonHandledInterrupt}, /* irq5  */
{0x82, NonHandledInterrupt}, /* irq6  */
{0x82, NonHandledInterrupt}, /* irq7  */
{0x82, NonHandledInterrupt}, /* irq8  */
{0x82, NonHandledInterrupt}, /* irq9  */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, NonHandledInterrupt}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, NonHandledInterrupt}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, NonHandledInterrupt}, /* irq20 */
{0x82, NonHandledInterrupt}, /* irq21 */
{0x82, NonHandledInterrupt}, /* irq22 */
{0x82, NonHandledInterrupt}, /* irq23 */
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};

代码的添加和终端的映射是一一对应的。

//LED控制 输入1 点亮; 0 熄灭;
void Driver_LEDCont(bool flag)
{
static bool startflag = 1;
if(startflag)
{
PD_DDR |= SETBIT1;
PA_DDR |= SETBIT1;
PA_DDR |= SETBIT2;
PD_DDR |= SETBIT5;
PD_DDR |= SETBIT3;
PD_CR1 |= SETBIT1;
PA_CR1 |= SETBIT1;
PA_CR1 |= SETBIT2;
PD_CR1 |= SETBIT5;
PD_CR1 |= SETBIT3;
startflag = 0;
}
if(flag)
{
PD_ODR &= CLRBIT1;
PA_ODR &= CLRBIT1;
PA_ODR &= CLRBIT2;
PD_ODR &= CLRBIT5;
PD_ODR &= CLRBIT3;
}
else
{
PD_ODR |= SETBIT1;
PA_ODR |= SETBIT1;
PA_ODR |= SETBIT2;
PD_ODR |= SETBIT5;
PD_ODR |= SETBIT3;
}
}

main()
{
//程序启动STM8默认以HSI分频2M执行速率进行
Driver_LEDCont(1);
//开启外部中断
Driver_ExtIntOn();
//开总中断
_asm("rim");
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//在stm8_interrupt_vector.c文件中 写入中断接入函数Driver_EXI_Interrupt
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//等待中断
while(1)
{
static u16 Timer = 0; 
if(ExiFlag)
{
Timer = 0xfff;
ExiFlag = False;
}
if(!(PA_IDR&CHSBIT4))
Timer = 0xfff;
if(Timer)
{
if(!--Timer)
{
static bool flag = 0;
//循环控制LED灯状态
flag = !flag;
Driver_LEDCont(flag);
}
}
}
}


关键字:stm8  中断 引用地址:stm8中断的学习

上一篇:STM8单步调试的问题
下一篇:STM8的数据@near @tiny定义

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

单片机小白学习之路(十八)---定时器中断实现led的取反
目标:定时器中断实现led的取反 本节所要实现的功能是:系统运行时,D1小灯循环点亮1秒,熄灭1秒。 1.定时器/计数器使用方法 ①对TMOD赋值,以确定T0和T1的工作方式。 ②计算初值,并将其写入TH0、TL0或TH1、TL1。 ③中断方式时,打开定时器中断(ET0/ET1)及总中断EA。 ④使TR0或TR1置位,启动定时/计数器定时或计数 定时器/计数器初值计算: 假如要定时1ms,定时器初值是多少? 计数脉冲个数N=1ms/1us=1000个 定时器初值X=2^16-1000=65536-1000=64536=0XFC18 中断号 #include reg52.h typedef unsigned in
[单片机]
单片机小白学习之路(十八)---定时器<font color='red'>中断</font>实现led的取反
PIC中断的应用(二)
//中断的应用二 //★★★★★★★★★数字钟★★★★★★★★★★★\\ //单征机型号:PIC16F877A //功能描述:数字钟功能,初始显示时间为12点,且带手动调整时间功能。 //端口定义:RA0~RA5数码管位控制口、RD0~RD7数码管段控制口、RB0秒增一、RB1分增一、RB2时增一。 #include pic.h __CONFIG(0xf73A); //芯片配置字 const unsigned char dispcode ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选0~9 unsigned char dispbitcode
[单片机]
STM8S的中断系统
STM8具有最多32的中断系统,另外,外部中断中有一个特殊的中断叫做TLI不可屏蔽中断,也就是PD7,他不属于D中断向量而是拥有自己的TLI中断向量。 A,B,C,D,E,这些端口同时只能一个用来作为中断输入,比如PA0,PB0,PC0,PE0等等同时只能有一个作为中断输入。 使用外部中断的过程 1.配置中断向量 2.配置中断端口的触发模式
[单片机]
STM32串口中断接收方式详细比较
简介:本例程通过PC机的串口调试助手将数据发送至STM32,接收数据后将所接收的数据又发送至PC机,具体下面详谈 实例一: void USART1_IRQHandler(u8 GetData) { u8 BackData; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志. GetData = UART1_GetByte(BackData); //也行GetData=USART1- DR; USART1_SendByte(GetData);
[单片机]
ARM单片机三种中断返回情况的分析与解决
ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,本文就将对ARM异常中断的集中情况进行总结,并给出了一些解决方法。 在正式介绍之前,要为大家补充一些较为重要的基础知识。首先R15(PC)总是指向 正在取指 的指令,而不是指向 正在执行 的指令或正在 译码 的指令。一般来说,人们习惯性约定将 正在执行的指令作为参考点 ,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8
[单片机]
STM32低功耗(STM32G0+HAL库+STOP模式+中断唤醒)
一、知识点: 1.STM32低功耗一共有三种模式: (1)睡眠模式:功耗高,任意中断,任意事件唤醒 (2)停机模式:功耗较低,可以任意外部中断和RTC闹钟唤醒 (3)待机模式:功耗最低,但是只可以通过RTC唤醒,WKUP唤醒,NRST引脚复位,IWDG复位 综上优缺点,所以最常用最实用的也就是STOP停机模式。 2.小白扫盲 1)STOP模式下,只要有外部中断进来就可以唤醒,无需用户自己配置具体代码去实现唤醒操作。 2)STOP模式下被唤醒之后,单片机先执行外部中断回调函数,然后再接着刚刚进入STOP模式下的语句继续执行。 4)待机模式下被唤醒之后,单片机是类似于REST,从头开始执行的 5)RTC闹钟唤醒实质也就是外部中
[单片机]
STM32低功耗(STM32G0+HAL库+STOP模式+<font color='red'>中断</font>唤醒)
什么是中断 stm32中断服务函数
中断概念: 中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。 中断作用: 计算机与外设之间的联系一般通过两种方法:一是通过CPU控制来进行数据的传送;二是在专门的芯片控制下进行数据的传送。我们所说的DMA,就是不用CPU控制,外设同内存之间相互传送数据的通道,在这种方式下,外设利用DMA通道直接将数据写入存储器或将数据从存储器中读出,而不用CPU参与,系统的速度会大大增加。 你打开stm32的启动文件,例如startup_stm32f10x_hd.s 里面有很多中断跳转的
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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