程序的主要部分如下
void Time1Init(void) //定时器1初始化
{
T1TC=0;
T1PR=0;
T1CCR=0x05; //CAP1.0上升沿跳变将TC装入CR0,并产生中断
T1TCR=0x01;
}
void senddata(void) //发送数据
{
for(i=0;i<6;i++)
{
sprintf(str,"%8d",st[i]);
ISendStr(60,21,0x30,str);
}
}
void Time1_irqInit(void) //中断初始化
{
VICIntSelect=0x00;
VICVectCntl0=0x20|5; //定时器1优先级slot0
VICVectAddr0=(uint32)Time1_irq; //定时器中断地址1
VICIntEnable=0x00000010;
}
void __irq Time1_irq(void) //中断程序
{
p=T1CR0;
st[n]=p-k;
k=p;
n+=1;
if(n==6)
{
T1TCR=0x00;
senddata();
}
T1IR=0x00;
VICVectAddr=0;
}
int main(void) //主程序
{
k=0;
n=0;
delay(3000); //延时
PINSEL0=0x00200000;//捕获1.0,P0.10口,
Time1_irqInit();
Time1Init();
while(1);
return(0);
}
大概意思就是用定时器1的CAP1.0捕获功能捕捉脉冲,并产生中断,在中断中处理数据,捕获几个脉冲,用后一个脉冲所获得的TC值减去前一次获得的TC值,这样就知道这一个脉冲的周期了,多做几次然后平均,输出求转速。程序是这么写的,但实际传感器信号接到CAP1.0运行之后,一直在等待中断产生,而传感器信号通过示波器看过之后是方波没有问题,就是无法测到脉冲周期,不知道错误在哪里,搞了几天很纠结,达人们帮我看看吧,谢啦 |