|
#include
int time=0;
void init_clk( )
{
unsigned char i;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
BCSCTL1&=~XT2OFF;//打开XT振荡器
BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M
do
{
IFG1 &= ~OFIFG;//清除振荡错误标志
for(i = 0; i < 0xff; i++) _NOP();//延时等待
}
while ((IFG1 & OFIFG) != 0);//如果标志为1继续循环等待
IFG1&=~OFIFG;
}
void main()
{
init_clk();//初始化系统时钟
TACTL=TASSEL1+ID0+ID1+TACLR+TAIE;//计数时钟源为系统时钟,8分频,允许定时器溢出 中 断,清除计数器。
P5DIR|=0x02;
P5DIR|=0x04;
P5DIR|=0x08;
P4DIR|=0x04;
P3DIR|=0x40;
P3DIR|=0x80;
TACTL|=MC0;//增计数模式
TACCR0=700;//计数周期为1000
_EINT();//开启总中断
while(1)
{
if(time==100)
{
P5OUT^=0x02;
time++;
}
if(time==200)
{
P5OUT^=0x02;
P5OUT^=0x04;
time++;
}
if(time==300)
{
P5OUT^=0x04;
P5OUT^=0x08;
time++;
}
if(time==400)
{
P5OUT^=0x08;
P4OUT^=0x04;
time++;
}
if(time==500)
{
P4OUT^=0x04;
P3OUT^=0x40;
time++;
}
if(time==600)
{
P3OUT^=0x40;
P3OUT^=0x80;
time++;
}
if(time==700)
{
P3OUT^=0x80;
time=0;
}
}
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch(TAIV)
{
case 2:break;
case 4:break;
case 10:time++;break;
}
}
这是我暑假学430用的程序,你看一下吧 |
|