#include <msp430.h>
#include "oled.h"
#include "type.h"
#include "bmp.h"//配置IIC
#include"stdint.h"
#include<stdio.h>
#include<stdlib.h>
/**
* main.c
*/
int overflow_counter;
int DETA_counter;
int input_one_capture;
int capflag;
int input_one_counter;
int sample_times;
int avarge_period;
int f;
float f2;
int f3;
//void InitSys();
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
OLED_Init();
P2SEL |= BIT4;//(p2.4为捕捉频率口)
TA2CTL = TACLR; TA2CTL=TASSEL_2+ID_0+MC_2+TAIE; TA2CCTL1=CCIE +CAP +CCIS_0 +CM_1 + SCS;
OLED_Clear();
while(1){
f=(int)1/(avarge_period*0.000001);
f2=f*0.05;
f3=f+f2;
OLED_ShowString(20,1,"fget=",20);
OLED_ShowNum(30,4,avarge_period,8,20);
__bis_SR_register(LPM0_bits +GIE);
}
}
#pragma vector=TIMER2_A1_VECTOR
__interrupt void TIMER2_A1_ISR(void)
{
switch(TA2IV)
{
case 2: sample_times = 0;
avarge_period= overflow_counter*65536-input_one_capture+TA2CCR1;
input_one_capture = TA2CCR1;
input_one_counter = DETA_counter;
overflow_counter=0;
capflag++;
break;
case 4:
break;
case 6:
break;
case 8:
break;
case 10:
break;
case 12:
break;
case 14:overflow_counter++;
DETA_counter++;
break;
}
}
我使用MSP430f5529定时器测周法去做一个测量频率的功能,当输入频率过高时IIC屏幕不可以正常显示