找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1714|回复: 4
收起左侧

单片机程序中,那个计数有什么用?还有问号那块为什么要!Echo再TR0=1?

[复制链接]
ID:930905 发表于 2021-10-28 21:54 来自手机 | 显示全部楼层 |阅读模式
谢谢大家

void zd0() interrupt 3          //计数        
  {
    flag=1;                        
        RX=0;
  }

void main()
{
        TMOD|=0x01;
        EA=1;
        TH0=0;
        TL0=0;
        ET0=1;
        Timer1Init();
        while(1)
        {
                IOA();   // 红外避障
                ultrasound();  //启动超声波
                while(!Echo);   ??
                TR0=1;
                while(Echo);
                TR0=0;
                ultrasound_range();  //超声波避障
        }
}
回复

使用道具 举报

ID:624769 发表于 2021-10-28 22:51 | 显示全部楼层
等待 ECHO变1之后,让定时器工作,然后等待ECHO变0之后,再关闭定时器。你的代码里面也就这点东西可以说了。
回复

使用道具 举报

ID:930905 发表于 2021-10-28 23:23 来自手机 | 显示全部楼层
188610329 发表于 2021-10-28 22:51
等待 ECHO变1之后,让定时器工作,然后等待ECHO变0之后,再关闭定时器。你的代码里面也就这点东西可以说了 ...

懂了,那zd0中断说是超出超声波量程怎么理解
回复

使用道具 举报

ID:624769 发表于 2021-10-29 12:22 | 显示全部楼层
szxydpjc51 发表于 2021-10-28 23:23
懂了,那zd0中断说是超出超声波量程怎么理解

定时器 计数超出后 标志位 flag 置 1  RX清0

具体代码没有看到不知道,猜测是超声波如果有反馈的话,会让定时器复位,那么就没有机会给flag置1,也就是说说这个flag是为了 记录 超声波超过多少时间没有反馈的一个标志。
回复

使用道具 举报

ID:959346 发表于 2021-10-29 15:58 | 显示全部楼层
188610329 发表于 2021-10-29 12:22
定时器 计数超出后 标志位 flag 置 1  RX清0

具体代码没有看到不知道,猜测是超声波如果有反馈的话, ...

按注释和楼主问题理解,如果定时器中断了还没有ECHO信号,意思就是超时了,超出了超声波量程。如果没有超时,就根据定时器的计数值来计算距离吧。只是不明白如果没有障碍物,ECHO会不会一直不会变0,导致卡死?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表