我在做一个超声波测距的程序,有一行程序不明白,请高手解答
我在做一个超声波测距的程序,有一行程序不明白if(1==testOK)/若testOK等于1,表示接收超声波成功,记下计数器的数值,用于计算所用时间{time=TH0;t...
我在做一个超声波测距的程序,有一行程序不明白
if(1==test OK) /若test OK等于1,表示接收超声波成功,记下计数器的 数值,用于计算所用时间
{
time=TH0;
time=(time<<8)|TL0; /高低位赋值给time
time*=172;
time/=10000;
if (time<=20)
{LED1=0;} /显示如果小于20cm,第一个发光二极管亮报警
else if (time>250)
{LED2=0;} /显示如果大于250cm,第二个发光二极管亮报警
其中time=(time<<8)|TL0; /高低位赋值给time
这一条不明白为什么中间有一条竖杠 展开
if(1==test OK) /若test OK等于1,表示接收超声波成功,记下计数器的 数值,用于计算所用时间
{
time=TH0;
time=(time<<8)|TL0; /高低位赋值给time
time*=172;
time/=10000;
if (time<=20)
{LED1=0;} /显示如果小于20cm,第一个发光二极管亮报警
else if (time>250)
{LED2=0;} /显示如果大于250cm,第二个发光二极管亮报警
其中time=(time<<8)|TL0; /高低位赋值给time
这一条不明白为什么中间有一条竖杠 展开
2个回答
展开全部
这个是这样的 定时器记得数有十六位 前面八位叫高八位 也就是TH0 后面八位是第八位 也就是TL0 你取数的时候肯定要把十六位的都取出来 time=TH0; 这一行是取高八位赋给time 接下来time=(time<<8)|TL0;这一行 是把先取出来得八位左移 然后或上低八位构成了十六位 这样的数据才是准确的 举个例子 如果计数器记得数是 01100010 11010101
time=01100010后 进行左移 此时time=01100010 00000000(左移后补零)然后进行或运算
01100010 11010101 或上
01100010 00000000就等到了你想要的结果了 对吧 如果满意请采纳 希望能帮到你 谢谢
time=01100010后 进行左移 此时time=01100010 00000000(左移后补零)然后进行或运算
01100010 11010101 或上
01100010 00000000就等到了你想要的结果了 对吧 如果满意请采纳 希望能帮到你 谢谢
瑞地测控
2024-08-12 广告
2024-08-12 广告
苏州瑞地测控技术有限公司成立于2015年17月,致力于提供基于同步网络的测试和控制系统;为工程师提供电气和物理量测量、控制、仿真和记录的工具;使其能够方便的定义测试设备,获取精准可信赖的数字化资源,应对更高协同性、更大空间、更大带宽和更多领...
点击进入详情页
本回答由瑞地测控提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询