蓝桥杯单片机组&超声波定时器(PCA)解决方案

用单片机内置的PCA定时器去做超声波的捕获?

由于iap15k60s2的定时器资源较少,为了节省其定时器资源给到555,串口,数码管显示等情况采用PCA将会有不错的应用。

效果很好,代码思路简单,针对主要定时器做出如下说明:

void send_sonic()

{
   unsigned char i=8;
   while(i--)
    {
       sonic_tx=1;
       Delay13us();
       sonic_tx=0;
       Delay13us();
    }
}

此处的13us是为了与红外遥控的38KHZ相匹配。

void PCA_init()

{

     CMOD|=0x08;//设置定时器时钟为系统时钟
     CCON=0x00;//将溢出位cf(溢出标志位)置零cr(启停位)置零停止计数

}

此处初始化设置CMOD主要选定定时器的工作主频

CCON主要用于设置CF、CR位:CF相当于定时器中断TF

CR相当于定时器中的TR位

unsigned int sonic_drive()

{

        unsigned int time,distance;
        send_sonic();
        CH=0;
        CL=0;
        CR=1;
        while((sonic_rx)&&(CF==0));
        CR=0;
        if(CF==1)
        {
        CF=0;distance=999;
        }
        else
        {
                 time =(CH*256)+CL;
                 distance=(unsigned int)((time*0.017)/12);
        }
        return distance;
}

此处的CH与CL相当于定时器的配置初始值的寄存器TH与TL

你可能感兴趣的:(蓝桥杯单片机学习,单片机,蓝桥杯,嵌入式硬件)