学习MSP430G2553,已有7天有余。个人觉着:低功耗是其最大亮点。为此可谓是处心积虑。因而中断/低功耗模式在430的应用中便显得千娇百媚,楚楚动人!这里,先跟大伙看下这个中断的情况。
#include
#include "in430.h"
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; //禁止看门狗计数
P1DIR=BIT0+BIT1;//P1.01设置为输出,P1.4/5是输入
P1OUT=BIT0+BIT1+BIT4+BIT5;//P1.01为高,P.4/5上拉
P1REN=BIT4+BIT5;//P1.4上拉使能
P1IE=BIT4+BIT5;//P1.4开中断
P1IES=BIT4+BIT5;//中断沿选择
__enable_interrupt();//开总中断
while(1);//没事做
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1()//P1口中断服务程序
{
unsigned int i=0;
unsigned char PushKey=0;
PushKey=P1IFG&(BIT4+BIT5);//读取是哪个键按下
for(i=0;i<65535;i++);//延时后再作判断,避免是抖动
if(!(P1IN&PushKey))//没有按下,则为抖动,标志清零
P1IFG=0;
if((P1IN&PushKey))//判断是否有键按下
{
for(i=0;i<65535;i++);
if((P1IN&PushKey))
{
if((PushKey&BIT4))
P1OUT^=BIT0;
if((PushKey&BIT5))
P1OUT^=BIT1;
}
P1IFG&=~(BIT4+BIT5);
}
}
这个程序,最出彩的地方在于“while(1);”这个等待的语句。
中断没发生前,程序在停这儿等待,就相当于CPU一直停在儿没事做歇着,也许是在等待戈多。一旦中断条件发生,在这里是按键,它便好像逮着什么似的,便进入中断,去执行中断程序中的代码。
这里,我们可见。中断没来之前,CPU它无所事事,却没有关闭,仍在耗电。中断来了之后,它赶忙地处理中断程序。前前后后,他总在折腾。肯定累得够戗。
那CPU在哪段时间内本可好好休息,不必浪费精力呢???大伙都知道,肯定是等待戈多那个时间里。所以便会让它在等待戈多的时间里去休眠。中断来了确实需它出面处理时,它再醒来处理中断事件,更为妥当!!!
于是乎,便有了下面的程序。
#include
#define uchar unsigned char
uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar i,num,flag;
void TimeAInit(void)
{
TACTL=TASSEL0+MC0+TACLR;//SMCL时钟,up,清零
TACCTL0|=CCIE;
}
void SetTime(unsigned int time)
{
TACCR0=time;
}
int main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR=0xff;
TimeAInit();
SetTime(100);
__enable_interrupt();
while(1)
{
LPM3;
if(flag==0)
{
i++;