为啥单片机从上电开始一直进入IO口中断程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥单片机从上电开始一直进入IO口中断程序相关的知识,希望对你有一定的参考价值。
1、既然你设置中断了,进入中断无可厚非2、肯定是符合中断条件了才进入的中断
3、如果有异议的话,在你使能中断前,先把中断标志位给清除掉。
4、请接到固定电平上。悬空是输入状态未知,产生中断也无可非议。 参考技术A 如果你设置的是电平触发方式,这是很可能的。 参考技术B 把程序发上来看看
为啥这无法进入中断
参考技术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;
以上是关于为啥单片机从上电开始一直进入IO口中断程序的主要内容,如果未能解决你的问题,请参考以下文章
求助:很急!关于STC 8位单片机上电后,无法进入串口接收中断的问题