基于51最小系统的距离测量仪制作/更新于2017/12/30

HC-SR04工作原理及说明:  

1、 给Trig触发控制信号IO端口至少10us的高电平信号;  

2、 模块自动发送8个40khz的方波,并自动检测是否有信号返回; 

3、 有信号返回时,Echo回响信号输出端口输出一个高电平,高电平持续的时间就是超声波从发射到 返回的时间; 

4、 两次测距时间间隔最少在60ms以上,以防止发射信号对回响信号的影响;


单片机控制HC-SR04超声波测距说明:   

单片机的P1.7口接HC-SR04的Trig端口,P1.6口接HC-SR04的Echo端口,超声波在传播时碰到障碍物即返回,HC-SR04模块收到回波信号后Echo口输出一个高电平,单片机检测到高电平后即启动计数器开始计数,直到单片机检测到Echo口变成低电平后结束计数,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即距离S=v*t/2;


初始化函数,对T2 初始化

 void UltraSoundInit()  

 {      

 Trig = 0;      

 TH2 = RCAP2H = 0;     

 TL2 = RCAP2L = 0;        

 TR2 = 0;//关闭定时器      

  ET2=1;             //允许T2中断  

 }   


定时器/计数器

1、与单片机的CPU相互独立

2、根据机器内部时钟或者外部的脉冲

3、初始化;

                   对TMOD赋值,以确定T0和T1的工作方式

                   计算初值,并将其写入THO、TLO或TH、TL

                   中断方式,对EA赋值,开放定时器中断

                   使TR0或TR1置位,启动定时器/计数器

4、C/T:定时或计数   C/T=0为定时模式; C/T=1为计数模式    

      M1M0:计数器模式   00方式0:13位定时/计数器;01方式1:16位;10方式2:8位 自动重装;11方式3:T0分为两个独立的8位,T1方式终止

      GATE=0:不受中断影响;GATE=1:受中断影响

      eg:TMOD=0X01  //0000 0001  //设置定时器0为工作方式1     0(GATE)0(C/T)01(M1M0)


/************************************更新于2017.12.7************************************/


串口通信


传输速率:比特率是每秒钟传输二进制代码的位数,单位是位/秒(bps),如每秒传输240个字符,而每个字符格式包含十位(1位起始,8位数据,1位停止),这时比特率为:10位*240个/秒=2400bps


RS-232标准接口主要引脚:

插针序号                         信号名称                     功能                                 信号方向

3(25针)/ 2(9针)           RXD             接收数据(串行输入)               DCE-DTE

2/3                                    TXD              发送数据(串行输出)               DTE-DCE     

7/5                                     SGND          信号接地                    


RS-232问题:

1、传输距离一般不要超过15m。

2、最高速率为20bps。

3、有电平偏移(收发双方共地)                                   

4、抗干扰能力差,采用较大的电压摆幅。


80C51串行口的控制寄存器:

SCON是一个特殊功能的寄存器,用以设计串行口的工作方式,接收/发送设置,以及状态标志

SM0、SM1   工作方式选择位    常用01,方式1:10位异步收发器    波特率可变

SM2 (一般不用)方式1时,当SM2=1,则只有接收到有效停止位时,RI才置1

REN  允许串行接收位  由软件置REN=1  则启动串行口接收数据 ; 若软件置REN=0 则禁止接收

TB8 方式1未用

RB8 在方式1时,若SM2=0,则RB8是接收到的停止位

TI 发送中断标志位 发送停止位开始时,由内部硬件使TI置1,向CPU发送中断请求,在中断服务程序中,必须用软件将TI清零,取消中断

RI   接收中断标志位 接收停止位中间时,由内部硬件使RI置1,向CPU发送中断请求,在中断服务程序中,必须用软件将RI清零,取消中断


PCON只有一位SMOD于串行口工作有关

SMOD 波特率倍增位   SMOD=1 波特率提高一倍       SMOD=0 复位


波特率计算

方式1波特率可变  由定时器T1溢出率来决定

方式1波特率=(32分之2的SMOD次方)* (T1溢出率)

T1溢出率=fosc / { 12 * [ 256-TH1(T1的初值 ] }

单片机常用晶振:12MHz、11.0592MHz


串口通信步骤:

确定T1的工作方式(编程TMOD寄存器)

计算T1的初值、装载TH1、TL1

启动T1(TCON中的TR1位)

确定串行口控制(编程SCON寄存器)

串口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)

示例:

void main()

{

 TMOD=0X20;            //设置定时器为方式2

 TH1=0Xfd;                //装入初值

 TL1=0Xfd;

 TR1=1;                     //启动定时器1

 SM0=0;

 SM1=1;                    //设置串口为方式1

 REN=1;                    //接收使能

 EA=1;                      //打开中断总开关

 ES=1;                      //打开串口中断开关

 while(1)

    {

     if(flag==1)

         {

           ES=0;

           flag=0;

           SBUF=a;

           while(!TI);         //等待数据发送结束

           TI=0;

           ES=1;

        }

    }

}

void serial() interrupt 4

{

 a=SBUF;

 P1=a;

 RI=0;

 flag=1;              //标志位

}

/************************************更新于2017.12.11************************************/


写程序及程序的下载与调试

1、程序下进去,可以测距,但LCD1602不显示任何数据

原因是:显示函数模块,write_date写成了write_com。没有清楚的区分写数据和写指令。

2、按键可以使用,但LCD1602只能显示一位距离阈值

原因还未找出

4、最初写程序,不知道要用到两个定时器,一个用于超声波测距;一个用于串口通信

接下来解决以上问题,完成串口通信

/**********************************更新于2017.12.30*************************************/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值