标题:
MS0430F5529单片机上电后,使用实验板上的 P7.4 输出频率为 512Hz 的 PWM 波,利用...
[打印本页]
作者:
helllll
时间:
2023-12-3 10:49
标题:
MS0430F5529单片机上电后,使用实验板上的 P7.4 输出频率为 512Hz 的 PWM 波,利用...
#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;
}
这个程序是实现MSP430F5529单片机上电后,使用实验板上的 P7.4 输出频率为 512Hz 的 PWM 波,利用P2.4 端口测量该 PWM 波的频率(利用杜邦线连接实验板上的 P7.4 和 P2.4 即可),之后利用按键 KEY1、KEY2 调节 P7.4 输出的 PWM 波的频率值,按键 KEY1 按下一次频率增加,按键 KEY2 按下频率减小.
为什么一直编译不通过
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1