#include "msp430x14x.h" #include "12864.h" #include "SPWM.h" #define uint unsigned int #define uchar unsigned char void OSCSET(void); uchar i=0,flag=1; void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 OSCSET(); //晶振初始化 P3DIR |= 0x03; Init12864(); //12864设置 String(1,1,"SPWM测试"); P1DIR |= BIT2+BIT3; // P1.2-P1.3输出模式 P1SEL |= BIT2+BIT3; // P1.2-P1.3模块功能 CCTL1 = OUTMOD_7; //输出模式 CCTL2 = OUTMOD_7; //输出模式 CCTL0 = CCIE; //定时器中断允许 CCR0 = 400; //定时周期——载波频率 // CCR1 = 200; //测试载波频率用 TACTL = TASSEL_2 + MC_1; //选择SMCLK时钟源,增计数模式 _BIS_SR(LPM0_bits+GIE); //低功耗,全局中断允许 // _BIS_SR(LPM0_bits); //测试载波频率用 } #pragma vector=TIMERA0_VECTOR //定时器中断函数 __interrupt void Timer_A(void) { if(flag == 1) { CCR1 = SPWM[i]; //查询数组 CCR2 = 0; } else { CCR2 = SPWM[i]; //查询数组 CCR1 = 0; } i++; //地址自加 if(i == 105) { i = 0; //重复 flag = ~flag; } } void OSCSET(void) { uint j; //以下先配置时钟,然后再清除标志位OFIFG BCSCTL1 &=~(XTS+XT2OFF); //开启XT2,ACLK为LFXT1且为低频模式(32.768K不用加C) do //清除标志位 { IFG1 &=~OFIFG; for(j=0xff;j>0;j--); //稳定延时,TI给出的 } while((IFG1&OFIFG)!=0); BCSCTL2 |=SELM_2+SELS; //选择MCLK物理时钟源为XT2,不分频为8MHZ }