[P] void main()
{ WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 //-------开晶振XT2---------[/P][P] BCSCTL1&=~XT2OFF; //打开XT2振荡器 do { IFG1 &= ~OFIFG; // 清除振荡器失效标志 for (i=256;i>0;i--); // 延时,等待XT2起振 } while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振[/P][P] BCSCTL2 =SELM_2+SELS; //选择MCLK=SMCLK为XT2[/P][P] //----------------------------- P1DIR|=BIT0; P4SEL|=BIT0; //P4.0作为捕获模块功能的输入端输入方波 P5DIR|=BIT6+BIT4; P5SEL|=BIT6+BIT4; Set_UART1(); TBCCTL0&=~(CCIS1+CCIS0); // 捕获源为P4.0,即CCI0A(也是CCI0B) TBCCTL0|=CM_2+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式 TBCCTL0|=CCIE; //允许捕获比较模块提出中断请求 TBCTL|=ID_2; TBCTL|=TBSSEL_2; //选择时钟SMCLK //定时器清零, TBCCR0=TBCLR; TBCTL|=MC_2; //定时器开始计数(连续计数模式0~0xFFFF) P1OUT|=BIT0; _EINT(); while(1);
}[/P][P]#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB0(void)
{ if(TBCCTL0&CM1) //捕获到下降沿(检测是下降沿触发中断) { TBCTL|=TBCLR; TBCCTL0=(TBCCTL0&(~CM1))|CM0; //改为上升沿捕获:CM1置零,CM0置一[/P][P] } else if(TBCCTL0&CM0) //捕获到上升沿(检测上升沿触发中断) { width[i++]=TBCCR0; //记录下结束时间 TBCCTL0=(TBCCTL0&(~CM0))|CM1; //改为下降沿捕获:CM0置零,CM1置一 if(i==12) { i=0; h++; } } if(h==300) { h=0; P1OUT=~P1OUT; send(width,12); }
}[/P][P]问题:我查了很多资料,可还是找不到问题在哪里,定时器B选择SMCLK进行分频时 TBCTL|=ID_3;可以工作 串口有数据,可TBCTL|=ID_2;为什么就不能接收了,感觉没进入中断啊。串口收发程序正常,请高手指点....我是拿ACLK接得输入[/P] |