|
#include <msp430f5529.h>
#include "oled.h"
#include "PWM.h"
#define CPU_F ((double)1048576)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define delay_s(x) __delay_cycles((long)(CPU_F*(double)x))
double T = 0;
double freq;
int i =0;
int Cycle[2];
int Setfreq=64;
int j=2;
void main(void)
{
WDTCTL = WDTPW+WDTHOLD;
P2DIR &= ~BIT1;//配置P2.1為輸入
P2REN |= BIT1;//使能P2.1上拉電阻
P2OUT = BIT1;//為P2.1配置上拉電阻
P6DIR &= ~BIT5;//配置P6.5為輸入
P6REN = BIT5;//使能P6.5上拉電阻
P6OUT = BIT5;//為P6.5配置上拉電阻
P7DIR = BIT4;
P7SEL = BIT4;
P1DIR = BIT0;
P1SEL = BIT0;
P2DIR &=~BIT4;
P2SEL = BIT4;
TB0CCR0 = Setfreq-1;
TB0CCTL2 = OUTMOD_7;
TB0CCR2 = (int) (Setfreq/2) ;
TB0CTL = TASSEL_1 + MC_1 + TBCLR;
TA2CTL = TASSEL_2 + MC_2 + TACLR;
TA2CCTL1 = CM0 + SCS + CAP + CCIE;
OLED_Init();
bspOledTest();
_DINT();
while(1)
{
if(j>0)
{
_EINT();
delay_ms(200);
_DINT();
bspOledTest();
j--;
}
while(!(P2IN&BIT1))
{
while(! (P2IN&BIT1));
Setfreq=Setfreq+10;
PWMInit();
j=2;
_EINT () ;
delay_ms (200);
_DINT ();
bspOledTest();
while(0);
}
while(! (P6IN&BIT5))
{
while(!(P6IN&BIT5));
Setfreq=Setfreq-10;
PWMInit();
j=2;
_EINT();
delay_ms(200);
_DINT();
bspOledTest();
while(0);
}
}
}
#pragma vector = TIMER2_A1_VECTOR
__interrupt void WDT_ISR(void)
{
Cycle[i]=TA2CCR1;
i++;
if(i==2)
{
T = Cycle[1]-Cycle[0];
freq = 1048000/T;
_DINT();
i=0;
}
TA2CCTL1 &= ~CCIFG;
LPM0_EXIT;
}
這個程序是實現(xiàn)MSP430F5529單片機上電后,使用實驗板上的 P7.4 輸出頻率為 512Hz 的 PWM 波,利用P2.4 端口測量該 PWM 波的頻率(利用杜邦線連接實驗板上的 P7.4 和 P2.4 即可),之后利用按鍵 KEY1、KEY2 調(diào)節(jié) P7.4 輸出的 PWM 波的頻率值,按鍵 KEY1 按下一次頻率增加,按鍵 KEY2 按下頻率減小.
為什么一直編譯不通過
|
|