使用PCA进行超声波测距的蓝桥杯单片机实验

文章目录

  • 前言
  • 一、PCA是什么?
  • 二、使用步骤
  • 总结
  • 前言

    蓝桥杯单片机定时器的资源是非常紧张的,只有三个,定时器0,1,2;用来超声波测距的话要用到溢出标志位,而定时器2又没有溢出标志位,当比赛中一考察到频率加串口加超声波测距,那么三个定时器就不够用了,这时我们可以用PCA对超声波测距进行处理。

    一、PCA是什么?

    PCA是指16位定时器/计数器模块(Programmable Counter Array)。PCA可以在多种工作模式下工作,包括:
    捕获模式:可以捕获外部输入的脉冲,并测量脉冲的频率或占空比。
    比较模式:可以设置比较值,当计数器计数到设定的值时,可以产生中断或外部信号。
    PWM模式:可以产生占空比可调的PWM波形信号,在驱动直流电机、灯光调节等应用中非常常用。
    单边模式:可以用作单边计数器,在计算脉冲时非常有用。
    双边模式:可以用作双向计数器,可以计算输入脉冲的上升沿和下降沿。
    根据不同的应用需求,可以选择不同的工作模式,以实现目标功能。

    可以看到,PCA实质上也就是一个定时器,也就具备超声波测距的一个能力。
    注意:reg52头文件中未定义PCA,使用的话就需要使用stc15f2k60s2的头文件

    二、使用步骤

    首先,我们查看手册,寻找PCA工作所需的寄存器:


    查看手册之后就可以对寄存器定义了,我们让其工作在系统频率的12分频之下,即CPS2=0,CPS1=0,CPS0=0;再让CIDL=0,让PCA在空闲模式下继续工作。所以我们让CMOD&=0x00就行了。
    还有一个CCON寄存器(PCA控制寄存器),内部包含CF(溢出标志位);CR(PCA计数器控制位),也就是用来启动PCA计数的位;还有CCF(PCA模块中断标志),此处未用到。由于该寄存器是一个可位寻址寄存器,在实际使用的时候对其位寻址更方便去操作。

    固定部分代码如下:

    #include <STC15F2K60S2.H>
    sbit TX=P1^0;   //定义发送端
    sbit RX=P1^1;   //定义接收端
    unsigned int dis;      //距离数据
    void Delay12us()		//@12.000MHz
    {
    	unsigned char i;
    
    	_nop_();
    	_nop_();
    	i = 33;
    	while (--i);
    }
    void Send_Wave()  //产生一个40Khz方波
    {
    	unsigned char i;
    	for(i=0;i<8;i++)
    	{
    		TX=1;
    		Delay12us();
    		TX=0;
    		Delay12us();
    	}
    }
    

    使用起来跟定时器大同小异,一样的工作流程:

    unsigned int Get_Csb()
    {
    	unsigned int dis;
    	CMOD&=0x00;   //定义工作模式
    	CH=0;      //计数高八位
    	CL=0;      //计数低八位
    	Send_Wave();  //发送40Khz波
    	CR=1;     //开始计时
    	while((RX==1)&&(CF==0));//等待接收端接收到返回信号或者溢出
    	CR=0; //关闭计时
    	if(CF==0) //如果未超出测量范围,进行数据处理
    	{
    		dis=CH;
    		dis=(dis<<8)|CL;
    		dis=((dis/10)*17)/100+3;
    	}
    	else  //如果超出测量范围,溢出标志位会硬件置一,我们需要在此软件清零
    	{
    	    CF=0;  //溢出标志位清零
    		dis=999;
    	}
    	return  dis;
    }
    

    获取数据只需要函数值返回给变量就行了

    dis=Get_Csb();
    

    总结

    本文仅仅简单介绍了PCA在超声波测距中的使用的使用。这可以使我们在比赛中节省一个定时器,还是非常好用的。小伙伴们不用担心记不住,代码不是用来硬记的,只要理解了整个一个流程,理解了它的运作方式,那么写起来自然就水到渠成了。

    作者:小茶干大事

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用PCA进行超声波测距的蓝桥杯单片机实验

    发表评论