求单片机牛人帮忙看看这段代码里面speed怎么算出来的,我怎么算都不一样呀,求解释,谢谢了
voidint0_isr(void)interrupt0/*遥控使用外部中断0,接P3.2口*/{unsignedinttemp;time=count;TR0=0;tem...
void int0_isr(void) interrupt 0 /*遥控使用外部中断0,接P3.2口*/
{
unsigned int temp;
time=count;
TR0=0;
temp=TH0;
temp=((temp << 8) | TL0);
TH0=0x3c;
TL0=0xaf;
count=0;
TR0=1;
time=time*50000+temp;
}
void time0_isr(void) interrupt 1 /*遥控使用定时计数器1 */
{
TH0 =0x3c;
TL0 =0xaf;
count++;
}
void main(void)
{
TMOD=0x01; /*TMOD T0选用方式1(16位定时) */
IP|=0x01; /*INT0 中断优先*/
TCON|=0x11; /*TCON EX0下降沿触发,启动T0*/
IE|=0x83;
TH0=0x3c;
TL0=0xaf;
initLCM();
WriteCommandLCM(0x01,1); //清显示屏
for(;;)
{
account();
display();
}
}
void account()
{
unsigned long a;
if (time!=0)
{
a=L*360000000/time;
}
speed=a;
}
time设置应该是50ms( TH0=0x3c; TL0=0xaf;time=time*50000+temp;)L值有个宏定义为 L 50,不知道单位是多少,speed最终的单位是km/h。我想问一下temp这个是干嘛的 不要行不行 展开
{
unsigned int temp;
time=count;
TR0=0;
temp=TH0;
temp=((temp << 8) | TL0);
TH0=0x3c;
TL0=0xaf;
count=0;
TR0=1;
time=time*50000+temp;
}
void time0_isr(void) interrupt 1 /*遥控使用定时计数器1 */
{
TH0 =0x3c;
TL0 =0xaf;
count++;
}
void main(void)
{
TMOD=0x01; /*TMOD T0选用方式1(16位定时) */
IP|=0x01; /*INT0 中断优先*/
TCON|=0x11; /*TCON EX0下降沿触发,启动T0*/
IE|=0x83;
TH0=0x3c;
TL0=0xaf;
initLCM();
WriteCommandLCM(0x01,1); //清显示屏
for(;;)
{
account();
display();
}
}
void account()
{
unsigned long a;
if (time!=0)
{
a=L*360000000/time;
}
speed=a;
}
time设置应该是50ms( TH0=0x3c; TL0=0xaf;time=time*50000+temp;)L值有个宏定义为 L 50,不知道单位是多少,speed最终的单位是km/h。我想问一下temp这个是干嘛的 不要行不行 展开
2个回答
展开全部
L是单次长度,360000000单位是10us,所以就是一小时,time是定时器算的走过L的时间T,单位也是10us
360000000/time就是看一小时有多少个T,即能走过多少个L,再乘以L就是速度。
如果算的不一样的话,看L设置的是否对,还有就是定时器时钟源选择等有没有问题,time的单位是否是10us。
360000000/time就是看一小时有多少个T,即能走过多少个L,再乘以L就是速度。
如果算的不一样的话,看L设置的是否对,还有就是定时器时钟源选择等有没有问题,time的单位是否是10us。
更多追问追答
追问
time设置应该是50ms( TH0=0x3c; TL0=0xaf;time=time*50000+temp;)L值有个宏定义为 L 50,不知道单位是多少,speed最终的单位是km/h。我想问一下temp这个是干嘛的 不要行不行
追答
不要temp的话会影响精度。
count是用来计算定时器的周期,temp是当前定时器的值。就相当于是count是秒表的整圈数,temp是最后不足一圈的值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询