为啥这无法进入中断
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥这无法进入中断相关的知识,希望对你有一定的参考价值。
参考技术A 我刚看错了你要测P1.2的周期,我感觉应该把P1.2口设置成中断,上升沿或者下降沿中断,在P1.2口中断中设置一个计数常数初值为0,当第一次进中断的时候设置定时器开始计时,然后判断计数常数是否等于你要求的值,不等于则加一,等于则停止定时器,这时定时器的定时时间除以计数常数就是周期了(你可以把计数常数设置成10,100,1000...)这样方便计算。知道怎么做吧
至于你说定时器无法进中断我就不晓得是不是没开全局中断还是怎么的,下面是我临时编的一个程序,定时器定时是0.01S,当然了我用的晶振是11.0592MHz的,你可以根据不同的晶振算出定时时间,最后的周期就是T_timex0.01/100,你试试看,不懂得再问吧
#include "msp430x44x.h"
unsigned char T_count=0; //周期计数常数
unsigned char T_time=0; //定时时间常数
unsigned char Flag=0;
//测试周期完成标志
void Time_1(void);//定时器time_3初始化
void P1.2_Init(void);//端口函数初始化
void main( void )
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1.2_Init();
_EINT();
void Time_1(void)//定时器time_3初始化
TA0CCR0=0X21C0;// 定时常数
TA0CTL = TASSEL_2+ID_3 + MC_1;//时钟选择SMCLK;8分频;增模式;
TA0CCTL0 = CCIE;//中断允许
void P1.2_Init(void)//端口函数初始化
P1SEL&=~+BIT2;//设置P1.2端口为I/O端口
P1DIR&=~BIT2;//设置P1.2端口为输入口
P1IES|=BIT2;//设置P1.2端口下降沿中断
P1IE|=BIT2;//打开P1.2端口中断
#if __VER__<200
//interrupt [PORT1_VECTOR] void P.12_interrupt(void)
#else
#pragma vector=PORT1_VECTOR
__interrupt void P1.2_interrupt(void)
#endif
if(T_Count==0)
Time_1();//如果计时常数等于0,开始定时
else if(T_Count==100)
TA0CTL| = MC_0;//停止计时
Flag=1;//周期测试完毕标志
else
T_Count++;//否则计时常数加一
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
if(Flag!=0)//如果周期没有测试完,则时间继续增加
Time_1();
T_time++;
else//周期测试完成,停止计数器
TA0CTL =MC_0;
以上是关于为啥这无法进入中断的主要内容,如果未能解决你的问题,请参考以下文章
stm32 开启接收中断 PC 发送两次 为啥串口只接收到一次
STM32外部中断无法进入中断程序,请问下面的程序哪里不对呀???