zoukankan      html  css  js  c++  java
  • 蓝桥省赛后继续水——超声波驱动程序

    超声波测距的电路图电路图:部分A——跳帽接线部分因为跳帽的P10和P11要分别用跳帽接到N_A1,N_B1;

    sbit TX = P1^0;
    sbit RX = P1^1;

    P10为发送端,P11为接收端。

    部分B——超声波发送接收电路

     把发送与接收部分的程序分开写(也是参考了网上的其他人): 发送占空比为50%的方波信号。

    发送超声波:

    void send_wave(void)        //发送部分是——循环8次,13us的高低电平转换。
    {
    u8 i;
    for(i=0;i<8;i++)
    {
    TX=1;
    Delay12us();_nop_();
    TX=0;
    Delay12us();_nop_();
    }
    }

    接收并换算测距:(启用定时器1)

    u16 Measure(void)
    {
    u16 time=0,Current_Distance=0;

    TMOD=0x01;
    TL1=0x00;
    TH1=0x00;
    EA=0;                        //初始化定时器0,总中断不开启
    send_wave();    //P10发送超声波
    TR1=1;                       //启动定时器1
    while((RX==1)&&(TF1==0));          //等待反射回来的信号被接收

    //原因:当CX20106接收到超声波发送的信号会产生一个下降沿信号,若RX==1,表示没有接收完毕,

    同时TF1的中断请求标志位==0,即表示没有定时器溢出的中断请求,测量是在容许范围内,测量的值是有效的,这两个条件同时 存在表明没有接收到信号。


    TR1=0;          //当程序运行到这里表示接收到信号了。
    if(!TF1)          //TF0=0,我们开始换算测量的距离
    {
    time=TH1;             //计时的值装入变量,time是16位变量,能装下13位定时器的值。
    time=(time<<8)|TL1;
    Current_Distance=time*0.018;    //换算成距离。
    }
    else           //否则超出范围,清空溢出的标志,表示测量到了很远的距离大约是999cm(比较随意的一个值)。
    {
    TF1=0;
    Current_Distance=999;
    }
    EA=1;                                   //开启中断
    return Current_Distance;      //返回测量的距离
    }

     
  • 相关阅读:
    从最近面试聊聊我所感受的职业天花板
    NetCore基于EasyNetQ的高级API使用RabbitMq
    Ocelot学习笔记
    使用iis反向代理.net core应用程序
    Odoo 部署windows server 2012
    低版本VMware与docker不兼容
    odoo tools
    Pandas 学习随笔
    Json数据校验 Json Schema
    python入门
  • 原文地址:https://www.cnblogs.com/page71/p/13905731.html
Copyright © 2011-2022 走看看