Other Parts Discussed in Thread: CC2530
利用cc2530的定时器3捕获模式进行超声波测距,定时器捕获到上升沿开始计时,当捕获到下降沿停止计时,并计算总的时间,从而得到所测距离,并通过串口发送出来。但是现在无法正确使用捕获,在定时器中断里面,一直不停地发送数据,貌似程序一直在不停地捕获,但是我是设置1000ms进行一次捕获。具体的配置如下所示:
void InitT3()
{
T3CTL |=(1<<3) ; //开溢出中断
T3IE = 1; //开总中断和T3中断
T3CTL |= 0xE0; //128分频,128/16000000*N=0.5S,N=62500
T3CTL &= ~0x03; //自动重装 00->0xff 62500/255=245(次)
T3CC0=0xFF; //设置T3CC0初始值
T3CCTL0=0x43; //开启channal0中断,输入捕获模式,上升沿和下降沿捕获
P1SEL |=(1<<3); //P1_3定时器输入捕获,第二功能
P1DIR &=~(1<<3);
P1INP =(1<<3);
P1_3=1;
IRCON = 0; //清除中断标志
P0DIR |=(1<<0); //设置P0_0为输出模式
TRIG=0;
T3CTL |= (1<<4); //启动定时器
EA = 1; //开总中断
}
//定时器T3中断处理函数
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
if(T3CH0IF==1)
{
//高电平开始计数
if(ECHO==1)
{
overflow=0;
time=0;
startTime=T3CC0;
LED2=0;
}
else
{
time = T3CC0-startTime+0xFF*overflow;
distance = time*0.136; //128分频,16M/128=125K,1/125=8us distance=time*1/125*340/2(cm)
float2ascii(distanceBuffer,distance);
Uart_Send_String(distanceBuffer,6);
LED2=1;
}
}
else
{
overflow++;
if(overflow==200)
{
LED1 = ~LED1;
}
}
T3IF=0x00;
}
主程序在附件中。