標(biāo)題: 關(guān)于msp430頻率計(jì)的問題,一直解決不了 [打印本頁]

作者: theshy    時(shí)間: 2018-12-4 19:19
標(biāo)題: 關(guān)于msp430頻率計(jì)的問題,一直解決不了
//*********************************************************
//計(jì)數(shù)后一直顯示為 65535 請問大佬應(yīng)該怎么改,錯(cuò)誤請?jiān)敿?xì)指出來,謝謝
//*********************************************************





//    端口初始化
void Port_Init()
{
P1SEL|=BIT2;     //捕獲模式
P1DIR&=~BIT2;    //捕獲輸入

P2SEL|=BIT0;      //ACLK時(shí)鐘
P2DIR|=BIT0;
P2SEL&=~BIT5;


P4SEL=0x00;
P4DIR=0xff;
P5SEL=0x00;
P5DIR|=BIT5+BIT6+BIT7;


TACCTL1=CM1+CAP+CCIS0+SCS+CCIE;           //捕獲模式設(shè)置
TACTL|=TASSEL0+MC1+TAIE+TACLR+TAIE;   //定時(shí)器設(shè)置
}





//頻率處理
void TIME_do(uint x)
{
uint time;
time=(1000000/(65535*overtime+x));     //將時(shí)間轉(zhuǎn)換為頻率
a[0]=time/100000+48;
a[1]=(time%100000)/10000+48;            //用數(shù)組記錄每一位
a[2]=(time%10000)/1000+48;
a[3]=(time%1000)/100+48;
a[4]=(time%100)/10+48;
a[5]=time%10+48;
a[6]='H';
a[7]='Z';
}




//    中斷
#pragma vector=TIMERA1_VECTOR
__interrupt void time(void)
{
switch(TAIV)
{
case 2:Flag++;      
if(Flag==1)             //捕獲第一個(gè)上升沿
{
  TACTL|=TACLR;
  overtime=0;
  TIME0=TACCR1;
}
else if(Flag==2)             //捕獲第二個(gè)上升沿
{
  TIME1=TACCR1;
TIME=TIME1-TIME0;          //一個(gè)周期的時(shí)間
  Flag=0;
}
  break;
case 4:break;
case 10:overtime++;break;        //定時(shí)器溢出次數(shù)
  default:break;
}
}




//    主函數(shù)
void main()
{
WDT_Init();
Clock_Init();
Port_Init();
delay_ms(500);
LCD_Init();
LCD_clear();
  _EINT();
while(1)
{
  uchar i;
  TIME_do(TIME);            //對所計(jì)的定時(shí)器時(shí)間差處理
  delay_ms(5);
for(i=0;a[i]!='\0';i++)
{
LCD_write_char(i,1,a[i]);       //轉(zhuǎn)lcd顯示

}
  delay_ms(500);
}
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1