|
/* 定时:LFXT1CLK作为ALCK的时钟源,频率:32768HZ */
#include
void delay(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=1000;j>0;j--);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
//TIMER_A相关设置
CCTL0 = CCIE;
// CCR0 = 2047; //设定周期0.5S
CCR0=60000;
TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
P2DIR |=0xff; //设置P2方向为输出
P1DIR=0X00;
P1IES=0xff;
P1IE=0XFF;
_EINT(); //使能全局中断
while(1)
{
P2OUT=0XFF;
}
}
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
_EINT();
P2OUT=0XFD;
delay(1000);
}
#pragma vector=PORT1_VECTOR
__interrupt void timer()
{
unsigned char temp;
if((P1IFG&0X0F)!=0X0F)
{
temp=P1IFG;
switch(temp)
{
case 1 :P2OUT=0XEF;break;
case 2 :P2OUT=0XDF;break;
case 4 :P2OUT=0XBF;break;
case 8 :P2OUT=0X7F;break;
}
}
delay(100);
P1IFG=0X00;
}
说明:此程序可用于验证“msp430中优先级低的中断是否能打断高优先级的中断”!
首先我们可以查到:P1口的中断优先级比TIMERA0的要低。此程序main部分使led全灭,TA定时(>10s),产生中断,进入中断使P2.1的led亮,并且将维持一段时间,为了便于验证,我特意延时较长,差不多有5s。则有,led——亮,进入TA中断,led——灭,在main函数中。这时,我们只要在led刚亮的时候,按下按键触发P1口中断,导致led提前退出亮的状态,而点亮其他led,则证明P1中断打断了TA中断!否则,反之。
|
赞赏
-
1
查看全部赞赏
-
|