|
#include "msp430x14x.h"
#include "iic.h"
unsigned int TA_OverflowCnt; //TA溢出次數(shù)存放變量
unsigned long int Period; //周期測(cè)量結(jié)果存放變量
unsigned int PervCapVal; //前一次捕獲值存放變量
void display() //顯示
{
// OLED_ShowString(0, 2, "haha:",16);
//OLED_ShowString(0, 0, "20",16);
//OLED_ShowChar(33, 0, '-',16);
//OLED_ShowChar(57, 0, '-',16);
// OLED_ShowChar(78, 2,':',16);
// OLED_ShowChar(102, 2,':',16);
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese( 16,0,1);
// OLED_ShowChar(32, 4,':',16);
//OLED_ShowString(0, 6, "new money:",16);
// OLED_ShowNum(0,4,TA_OverflowCnt,2,16);
OLED_ShowString(112,0,"HZ",16);
//OLED_ShowNum(0,6,3,5,16); //顯示
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1SEL |= BIT2; //P1.2設(shè)為第二功能(TA1),不同單片機(jī)可能不同
P1DIR &= ~(BIT2); //P1.2(TA1)設(shè)為輸入(可省略)
TACTL= TASSEL_2+MC_2+TACLR+TAIE;
TACCTL1 =CAP + CM_3 +CCIS_1 + SCS + CCIE;
//捕獲模塊1啟動(dòng),選擇TA1(P1.2)管腳作為捕獲源,上升沿捕獲,同步捕獲,開啟捕獲中斷
Initial_LY096BG30(); //OLED初始化
OLED_Clear();
display();
_EINT(); //總中斷允許
LPM0; //因?yàn)門imerA要用SMCLK,只能進(jìn)入低功耗模式0休眠
}
#pragma vector = TIMERA1_VECTOR
__interrupt void TA_ISR(void) //Timer_A中斷入口
{
switch(TAIV)
{
case 2: //比較/捕獲模塊1中斷
Period = TA_OverflowCnt*65536 + TACCR1-PervCapVal; //計(jì)算周期
PervCapVal = TACCR1; //保存捕獲值,供下一次使用
TA_OverflowCnt = 0; //溢出次數(shù)清零
OLED_ShowNum(0,2,Period,5,16); //顯示
OLED_ShowNum(0,6,3,5,16); //顯示
break;
case 4: break;
case 10: TA_OverflowCnt++; //TA每次溢出,溢出次數(shù)變量+1
break;
}
}
進(jìn)入不了這個(gè)中斷,我查了一下手冊(cè) 捕獲模式:寄存器 CCRx 捕獲了定時(shí)器 TAR 值時(shí)置位。
說(shuō)明沒有捕獲到定時(shí)器TAR
case 2: //比較/捕獲模塊1中斷
Period = TA_OverflowCnt*65536 + TACCR1-PervCapVal; //計(jì)算周期
PervCapVal = TACCR1; //保存捕獲值,供下一次使用
TA_OverflowCnt = 0; //溢出次數(shù)清零
OLED_ShowNum(0,2,Period,5,16); //顯示
OLED_ShowNum(0,6,3,5,16); //顯示
break;
問題是:為什么捕獲不了TAR中的值 我的oled ,脈沖輸入沒有問題
|
|