求单片机牛人帮忙看看这段代码里面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这个是干嘛的 不要行不行
展开
 我来答
li_ghtning
2012-04-06 · TA获得超过183个赞
知道答主
回答量:96
采纳率:0%
帮助的人:33.8万
展开全部
L是单次长度,360000000单位是10us,所以就是一小时,time是定时器算的走过L的时间T,单位也是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是最后不足一圈的值。
生活如歌_
2012-04-06 · TA获得超过1.5万个赞
知道大有可为答主
回答量:7398
采纳率:78%
帮助的人:2183万
展开全部
L是从哪儿来的?是通信送过来的吗? 一楼,TIME的单位是50us
追问
L有个宏定义 L 50 ,应该是长度设置,这个是实现测速功能的。
请问temp干嘛的,不要行不行,speed的值我怎么算都和代码里面不一样呀,求解释,谢谢了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式