专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
执行外部中断出现问题
2019-07-14 16:53
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
2324
9
915
利用IO口的两个引脚作为外部中断信号的输入引脚进行外部中断判断,主程序中已进入低功耗LPM3状态,然后写外部中断程序,请问这有做的话可以实时检测中断信号并进入相应的中断程序吗???或者说应该把外部中断程序放在循环中呢
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
wenminglang
2019-07-15 03:55
#include "studio.h"
unsigned char flag;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
TACCTL0=CCIE;//开启定时器A中断
TACCR0=1000-1;
TACTL=TASSEL_1+ID_3+TACLR+MC_1;//选择ACLK作为时钟源,时钟八分频,定时器清除位
P1DIR = 0x9F;
P1OUT = 0x00;
P2DIR = 0xFF;
P2OUT = 0x00;
P3DIR = 0xFF;
P3OUT = 0x00;
P4DIR = 0xFF;
P4OUT = 0x00;
P5DIR = 0xFF;
P5OUT = 0x00;
P6DIR = 0xFF;
P6OUT = 0x00;
/****P1.5中断触发********/
P1IES^=BIT5;//设置为上升沿触发
P1IFG&=~BIT5;//清除终端标志位
P1IE|=BIT5;//设置终端使能
/*****P1.6中断触发******/
P1DIR&=~BIT6;//中断引脚P1.6设置为输入端口
P1IES|=BIT6;//设置为下降沿触发
P1IFG&=~BIT6;//清除终端标志位
P1IE|=BIT6;//设置终端使能
//P1DIR|=BIT0;//MCU工作状态标志
_EINT();
__bis_SR_register(LPM3_bits ); // Enter LPM3, enable interrupts
while(1)
{
//__bis_SR_register(LPM3_bits ); // Enter LPM3, enable interrupts
}
}
#pragma vector =PORT1_VECTOR
__interrupt void P1_Interrupt(void)
{
if((P1IFG&0X40)==BIT6)//判断TLV3691是否产生低电平中断信号
{
P1IFG&=~BIT6;//中断标志清除
P2OUT&= ~(BIT7);//P2.0 LED等灭
flag=0;
//__bis_SR_register(LPM3_bits ); // Enter LPM3, enable interrupts
}
else if((P1IFG&0X20)==BIT5)//判断TLV3691是否产生高电平中断信号
{
P1IFG&=~BIT5;//中断标志清除
//__bic_SR_register_on_exit(LPM3_bits); // Clear LPM3 bits from 0(SR)
P2OUT|=BIT7;//P2.0 LED灯亮
flag=1;
}
}
#pragma vector =TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
if(flag==1)
{
P1OUT^=BIT1;
}
else if(flag==0)
{
P1OUT&=~(BIT1);
}
}
加载中...
查看其它9个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "studio.h"
unsigned char flag;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
TACCTL0=CCIE;//开启定时器A中断
TACCR0=1000-1;
TACTL=TASSEL_1+ID_3+TACLR+MC_1;//选择ACLK作为时钟源,时钟八分频,定时器清除位
P1DIR = 0x9F;
P1OUT = 0x00;
P2DIR = 0xFF;
P2OUT = 0x00;
P3DIR = 0xFF;
P3OUT = 0x00;
P4DIR = 0xFF;
P4OUT = 0x00;
P5DIR = 0xFF;
P5OUT = 0x00;
P6DIR = 0xFF;
P6OUT = 0x00;
/****P1.5中断触发********/
P1IES^=BIT5;//设置为上升沿触发
P1IFG&=~BIT5;//清除终端标志位
P1IE|=BIT5;//设置终端使能
/*****P1.6中断触发******/
P1DIR&=~BIT6;//中断引脚P1.6设置为输入端口
P1IES|=BIT6;//设置为下降沿触发
P1IFG&=~BIT6;//清除终端标志位
P1IE|=BIT6;//设置终端使能
//P1DIR|=BIT0;//MCU工作状态标志
_EINT();
__bis_SR_register(LPM3_bits ); // Enter LPM3, enable interrupts
while(1)
{
//__bis_SR_register(LPM3_bits ); // Enter LPM3, enable interrupts
}
}
#pragma vector =PORT1_VECTOR
__interrupt void P1_Interrupt(void)
{
if((P1IFG&0X40)==BIT6)//判断TLV3691是否产生低电平中断信号
{
P1IFG&=~BIT6;//中断标志清除
P2OUT&= ~(BIT7);//P2.0 LED等灭
flag=0;
//__bis_SR_register(LPM3_bits ); // Enter LPM3, enable interrupts
}
else if((P1IFG&0X20)==BIT5)//判断TLV3691是否产生高电平中断信号
{
P1IFG&=~BIT5;//中断标志清除
//__bic_SR_register_on_exit(LPM3_bits); // Clear LPM3 bits from 0(SR)
P2OUT|=BIT7;//P2.0 LED灯亮
flag=1;
}
}
#pragma vector =TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
if(flag==1)
{
P1OUT^=BIT1;
}
else if(flag==0)
{
P1OUT&=~(BIT1);
}
}
一周热门 更多>