main() { _DINT(); WDTCTL = WDTPW | WDTHOLD; PortInit(); Ucs_Init_16M(); TimerA0CounterSetup(); while(1) { __bis_SR_register(LPM3_bits | GIE); // Enter LPM3 WDTCTL = WDTPW | WDTCNTCL | WDTSSEL0_L | WDTIS_2; UCA1IE |= UCRXIE; APP_RTCPro_Delay_ms(2); unsigned int uiTemp=0; unsigned int uiTranceiver=0; uiTranceiver=TA0R; do { __bis_SR_register(LPM3_bits | GIE); // Enter LPM3 if(TA0R>=uiTranceiver)uiTemp=TA0R; else uiTemp=TA0R+0x8000; if((uiTemp-uiTranceiver)> T50ms) //400ms { P1OUT |= BIT3; P3OUT |= BIT3; break; } }while((uiTemp-uiTranceiver)<(T200ms+T200ms)); P1OUT |= BIT3; UCA1IE &= ~UCRXIE; } } void PortInit(void) { _DINT(); // P1DIR=0xff; P1OUT=0x00; // P2DIR=0xff; P2OUT=0x00; // P3DIR=0xff; P3OUT=0x00; P1DIR=0; P2DIR=0; P3DIR=0; P1OUT |= BIT3; P3OUT &= ~BIT3; _NOP(); } void Ucs_Init_16M(void) { FRCTL0 = FRCTLPW | NWAITS_1; P2SEL0 |= BIT0 | BIT1; do { CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag SFRIFG1 &= ~OFIFG; } while (SFRIFG1 & OFIFG); // Test oscillator fault flag __bis_SR_register(SCG0); // disable FLL CSCTL3 |= SELREF__XT1CLK; CSCTL0 = 0; // clear DCO and MOD registers CSCTL1 &= ~(DCORSEL_7); // Clear DCO frequency select bits first CSCTL1 |= DCORSEL_5; // Set DCO = 16MHz CSCTL2 = FLLD_0 + 487; // DCOCLKDIV = 16MHz __delay_cycles(3); __bic_SR_register(SCG0); // enable FLL while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // FLL locked CSCTL4 = SELMS__DCOCLKDIV | SELA__XT1CLK; // MCLK=SMCLK=DCO; ACLK=XT1 PM5CTL0 &= ~LOCKLPM5; } void TimerA0CounterSetup(void) { TA0CCTL0 |= CCIE; // CCR0 interrupt enabled TA0CCR0 = 0x8000; TA0CTL = TASSEL_1 | TACLR | ID_3 | MC_1; // ACLK, clear TAR,8分频,Up to CCR0 } void APP_RTCPro_Delay_ms(unsigned int iTimes) { for(unsigned int i=0;i=uiTranceiver0) uiTemp0=TA0R; else uiTemp0=TA0R+0x8000; }while((uiTemp0-uiTranceiver0)<0x21 ); } } /*********************************************************** 函数名称: 函数功能:定时器TA0中断服务函数,秒中断 入口参数: 出口参数: 描述: ************************************************************/ #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A0_Counter (void) { TA0CTL=TA0CTL&(~TAIFG); _BIC_SR_IRQ(LPM3_bits); }