|
我用的单片机是F149,在程序中发现有只用一次的屏幕显示函数被调用多次,请大家给分析一下,我自己认为是TimerA引起的。
我的这段程序是单片机C语言,在运行时发现屏幕显示函数被多次调用,实际我只用了一次。大家给点意思看看是哪里的问题。我自己分析是TiMER_A定时器引起的。程序如下:
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
init_xt(); //时钟初始化
init_LCD(); //液晶初始化
Init_Port1(); //P1口初始化
P4DIR = 0x1e;
P4SEL = 0x00;
P4OUT = 0x02;
xshm(); //这个屏幕显示函数,当运行到(1)这点后,发现返回到当前这条语句,反复这样
P6DIR=0x00;
P6SEL=0x01;
ADC12CTL0 =SHT0_2+ ADC12ON; // Set sampling time, turn on ADC12
//ADC12CTL1 = CONSEQ0&CONSEQ1; // Use sampling timer+SHP+
ADC12CTL1 =SHP;
ADC12MCTL0 = INCH_0+SREF_3; // ref+=Vref+, channel = A0
TACTL=TASSEL_0+TACLR+TAIE;
CCTL0=CCIE;
CCR0=38;
TACTL|=MC0;
_EINT();
//SET_GIE;
while(1)
{
Delay(100); //延时程序(1)
}
}
#pragma vector=TIMERA0_VECTOR /* TimerA三值波 */
__interrupt void Timer_A(void)
{
js=js+1;
if(js==5)
{
ADC12CTL0 |=ENC+ADC12SC;
}else if(js==6)
{
while ((ADC12CTL1 & ADC12BUSY) == 1);
result=ADC12MEM0;
}
switch (js)
{
case 1:
CCR0=40;
P4OUT |= 0x04;
break;
case 2:
CCR0=80;
P4OUT &= 0x00;
break;
case 3:
CCR0=118;
P4OUT |= 0x08;
break;
case 4:
CCR0=120;
P4OUT |= 0x10;
break;
case 5:
CCR0=160;
P4OUT &= 0x00;
break;
case 6:
CCR0=38;
P4OUT |= 0x02;
js=0;
break;
}
}
|
|