#include <msp430g2553.h>
void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1SEL|= 0x06; // P1.1 – P1.2 option select
P1DIR|= 0x07; // P1.0 – P1.2 outputs
CCTL0=OUTMOD_4+CCIE; // CCR0 toggle, interrupt enabled
CCTL1=OUTMOD_4+CCIE; // CCR1 toggle, interrupt enabled
TACTL=TASSEL_2+MC_2+TAIE; // SMCLK, Contmode, int enabled
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt }
// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{ CCR0+=200; // Add Offset to CCR0 }
// Timer_A2 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{ switch( TA0IV )
{ case 2: CCR1+=1000; // Add Offset to CCR1 break;
case 10: P1OUT^=0x01; // Timer_A3 overflow break;
}
}
求解释p1.1、p1.2口分别输出什么 波形是什么 频率是多少 如何计算的
Hardy Hu:
建议接在示波器上看一看,就明白了。
Xutong Han2:
首先如果直接从程序上推断频率需要确定几点,第一点在程序时钟的初始化时如果不初始化系统时钟,这时默认的是DCO这个频率在800K~1M,最好是初始化系统时钟比如MCLK=SMCLK=1MHz。第二确认定时器的时钟源比如你程序中的SMCLK。第三看此时定时器的模式看你的程序是利用PWM模式中断的翻转模式这个模式下PWM的占空比时固定的周期就是CCR0的值计数的两倍,这个结合用户手册很容易看出。其实最简单的办法还是利用示波器看~