超声波C语言程序
函数名:Send_Bao()
功能:从串口发送一个数据包
入口参数:指向要发送的数据包地址
************************************************************************/
void Send_Bao( char *Data)
{
char j=0;
超声波测距C程序
#include<reg51.h>
#include"MAX485.h"
#define uint unsigned int
#define uchar unsigned char
long int time,l; /*时间*/
bit CLflag; /*测量标志*/
sbit Trig=P2^0; /*发射*/
{
/*外部中断0,用于检测接收信号*/
TR0=0; /*关闭定时器0 */
EX0=0; /*关中断*/
time=TL0;
time+=TH0*256;
l=time*ss;
l=l/2;
CLflag=1;
}
/********************主程序*************************/
TMOD=TMOD|0x20; //定时器T1工作在模式2,即八位自动重装模式
TH1=0xFD;
TL1=0xFD; //波特率为9600,在11.0592M的时钟下
TR1=1*********************************************************************
for(i=0;i<j;)
i++;
}
/***********************初始化定时器*********************/
void CSB_init(void )
{
TMOD = 0x11; /*设CTC1工作于模式1 */
IP=0x01; /*置外部中断INT0优先级为高*/
IT0=0; /*设置外部中断0的中断方式为电平触发*/
void main()
{
CSB_init(); /*初始化定时器*/
EA=1;
CLflag=0;
TL0=0x00;
TH0=0x00; /*定时器0的初始时间*/
Trig=1;
delay1(100);
Trig=0;
while(Echo==0);/*开启检测时会自动置位*/
TR0=1; /*启动定时器0,开始记时*/
CLflag=0; /*测量标志*/
Trig=0;
//EA=1; /*开总中断*/
ET0=1;
TR0=0;
}
/******************将测量的时间转换为距离************/
void Timetojuli( )
{
number[0]=l/1000; /*米*/
l=l-number[0]*1000;
#define RS485_T RS485RTPIN=1; //RS485设置为发送状态
/******************串口初始化函数********************************/
void Serial_Init()
{
SCON=0x50; //串口工作方式为:8位Uart模式1,接收使能
RS485_T;
ES=0; //设置RS485为发送状态
SBUF=Char; //发送数据
while(!TI); //检测上一个字节是否发送完毕,及是否为发送下一字节做好准备
TI=0;
ES=1;
RS485_R; //清楚发送中断标志位
}
/***********************************************************************
for(j;j<4;j++)
{
Send_Char(*Data); //发送一个字节数据
Data++;//指针向后移
}
}
#endif
EX0=1;
while(!CLflag);
Timetojuli( );
}
#ifndef __MAX485_H
#define __MAX485_H
sbit RS485RTPIN=P3^4; //RS485收发使能位定义
#define RS485_R RS485RTPIN=0; //RS485设置为接收状态
函数名:Send_Char()
功能:从串口发送一个字节的数据
入口参数:Char:要发送的一个字节数据
************************************************************************/
void Send_Char( char Char)
{
number[1]=l/100; /*分米*/
l=l-number[1]*100;
number[2]=l/10;/*厘米*/
number[3]=l%10;
}
/********************中断函数0*************************/
void serve_INT0( ) interrupt 0
sbit Echo=P3^2; /*外部中断0检测接收信号*/
#define ss=0.344
char number[4]; /*存储数据*/
/*********************延时函数****************************/
void delay1( int j )
{ int i;