8751单片机超声波发射接收电路
51单片机超声波测距离(带温度补偿)
超声波模块原理图:发射接收原理图PCB:51单片机原理图:软件部分C语言程序:/*=========================================================== =========调试要求:1.MCU:A T89S52芯片或AT89C522.晶振:12MHz调试注意:本程序带温度补偿,采用DS18B20测量温度1.LCD1602液晶屏有显示后,才接入超声波模块。
2.注意超声波模块电源的极性。
不清楚请参好淘宝的电路图3.没有选用频率为12MHz晶振,用了别的频率晶振,单片机定时器的测量值与发出的40KHz频率脉冲不对。
4.使用者经常误发出20KHZ脉冲当40KHZ脉冲。
(40KHz频率脉冲,周期25us,占空比为50% = 12.5us)5.如果是用开发板调超声波模块,请检查开发板上的电路是否与超声波模块的控制脚复用了, 若复用了,请通过跳线分开发板上的电路。
6如果使用的是万用板,请确定单片机的复位电路和晶振电路是否正常,同时单片机的31脚(EA)记得接高电平。
============================================================= =======*/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//===============================LCD1602接口定义=====================/*-----------------------------------------------------|DB0-----P2.0 | DB4-----P2.4 | RW-------P0.1 ||DB1-----P2.1 | DB5-----P2.5 | RS-------P0.2 ||DB2-----P2.2 | DB6-----P2.6 | E--------P0.0 ||DB3-----P2.3 | DB7-----P2.7 | 注意,P0.0到P0.2需要接上拉电阻---------------------------------------------------============================================================= */#define LCM_Data P2 //数据接口#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit LCM_RW = P0^1; //读写控制输入端,LCD1602的第五脚sbit LCM_RS = P0^2; //寄存器选择输入端,LCD1602的第四脚sbit LCM_E = P0^0; //使能信号输入端,LCD1602的第6脚//===============================超声波模块定义========================sbit RemPin =P3^2;// 接收端(这个不能修改,因为是外部中断(INT0)的引脚) sbit TxPin =P3^1;// 发射端//******************************************************************** ***//ds18b20数字温度传感器控制引脚定义sbit dq_ds18b20=P3^3;//定义控制DS18B20//******************************************************************** ***//LCD显示模块的函数声明void WriteDataLCM (uchar WDLCM);//LCD模块写数据void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模块写指令uchar ReadDataLCM (void);//LCD模块读数据uchar ReadStatusLCM (void);//读LCD模块的忙标void DisplayOneChar (uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符void DisplayListChar (uchar X,uchar Y,uchar delayms,uchar code *DData); void DisplayCursorPos (uchar X, uchar Y);void LCMInit (void);void DisplayIntData (uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu);void DisplayCharData (uchar X, uchar Y,uchar ZiFu);//******************************************************************** **//延时函数声明void delay25us_40KHz(unsigned char us);void DelayUs(uint us);void DelayMs(uint Ms);void delay_3us();//3US的延时程序void delay_8us(unsigned int t);//8US延时基准程序void delay_50us(unsigned int t);//延时50*T微妙函数的声明//******************************************************************** ***//DS18B20测温函数定义void w_1byte_ds18b20(uchar value);//向DS18B20写一个字节uchar r_1byte_ds18b20(void);//从DS18B20读取一个字节的数据void rest_ds18b20(void);//DS18B20复位程序void readtemp_ds18b20(void);//读取温度void display_temp(void);//温度显示程序//******************************************************************** ***//参数定义uint length = 0; // 测距的长度0.00Muchar flag = 0; // 测距的标志有信号接收=1uchar templ,temph;uint speed;//根据温度计算出来的声音速度uchar t_b,t_s,t_g,t_x;//从左到右分别存储温度百位,十位,个位,小数位uchar flag1;//温度正负性暂存,1为正数,0为负数const unsigned char tabl3[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x0 8,0x09,0x09};/*=========================================================== ================主程序============================================================= ================*/void main(void){uchar i;LCMInit(); //1602初始化EX0 = 1; //允许总中断中断,使能INT0 外部中断ET0 = 1;TMOD=0x11; //设定T0为16位时器,设定T1为16位时器DisplayOneChar( 0,14,'m');DisplayListChar(0,0,0, "Distanc: "); //显示字符串while(1){readtemp_ds18b20();display_temp();//显示温度for(i=0;i<20;i++){DisplayIntData(0, 13,length,5,3);//显示测量距离TH0=0x00;TL0=0x00;TR0=1; //启动定时器0EA = 1; //允许所有中断delay25us_40KHz(15); //发出脉冲信号DelayMs(200);}}}//******************************************************************** ***********//温度显示函数void display_temp(){if(flag1==1)//温度为正数时的显示程序{DisplayOneChar( 1,2,'+');}else{DisplayOneChar( 1,2,'-');}//显示温度信息DisplayOneChar( 1,0,'T');DisplayOneChar( 1,1,':');DisplayOneChar( 1,3,t_s+0x30);DisplayOneChar( 1,4,t_g+0x30);DisplayOneChar( 1,5,'.');DisplayOneChar( 1,6,t_x+0x30);//显示速度信息DisplayOneChar( 1,8,'S');DisplayOneChar( 1,9,':');DisplayOneChar( 1,10,speed/100%10+0x30);DisplayOneChar( 1,11,speed/10%10+0x30);DisplayOneChar( 1,12,speed%10+0x30);DisplayOneChar( 1,13,'M');DisplayOneChar( 1,14,'/');DisplayOneChar( 1,15,'S');}//****************************************************//读取温度void readtemp_ds18b20(void){uchar temp32;rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0x44); //启动温度转换delay_8us(2);rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度templ=r_1byte_ds18b20();temph=r_1byte_ds18b20();if((temph&0xf0))//判断温度的正负性{flag1=0;temph=-temph;templ=-templ;t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据speed=331.4-0.607*(temp32 | templ);}else//为正数{t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据flag1=1;speed=311.4+0.607*(temp32 | templ);}}/*=========================================================== =========功能:在1602显示一个整数数据说明:显示一个整数数据-9999->32625. 从右至左显示数据5位:============================================================= =========*/void DisplayIntData(uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu) {uchar i=0,k=0, BCD[5]={0};if(Digit>5) Digit=5;if(ZhengShu<0){k=1;//负数示志位ZhengShu=-ZhengShu;}BCD[4] =ZhengShu / 10000; //求出万位数据ZhengShu = ZhengShu % 10000;BCD[3] =ZhengShu / 1000; //求出千位数据ZhengShu = ZhengShu % 1000;BCD[2] =ZhengShu / 100; //求出百位数据ZhengShu = ZhengShu % 100;BCD[1] =ZhengShu / 10; //求出十位数据BCD[0] =ZhengShu % 10; //求出个位数据for(i=0;i<Digit;i++)//输出显示的数值{if((i==XiaoShu)&&(0!=XiaoShu)){DisplayOneChar(X,Y-i,'.');//输出小数点Y= Y-1;}DisplayOneChar(X,Y-i,BCD[i]+0x30); //显示一个字符}if(k==1)DisplayOneChar(X,Y-1,'-');//输出负符}//****************************************************************//读一个字节uchar r_1byte_ds18b20(void){uchar i=0;uchar value= 0;for (i=0;i<8;i++){value>>=1;dq_ds18b20=0;// DQ_L;delay_3us();dq_ds18b20=1; //DQ_H;delay_8us(2);if(dq_ds18b20==1) value|=0x80;delay_8us(6); //延时40us}dq_ds18b20=1;return value;}//******************************************************************** ***********//子程序功能:向DS18B20写一字节的数据void w_1byte_ds18b20(uchar value){uchar i=0;for(i=0;i<8;i++){dq_ds18b20=1;delay_3us();dq_ds18b20=0;delay_8us(2);if (value& 0x01) dq_ds18b20=1; //DQ = 1delay_50us(1); //延时50us 以上delay_8us(2);value>>=1;}dq_ds18b20=1; //DQ = 1}//;**************************************************//ds18b20复位子程序void rest_ds18b20(void){rest:delay_3us(); //稍做延时delay_3us();dq_ds18b20=1;delay_3us();dq_ds18b20=0;// DQ_L;delay_50us(11);//480us<T<960usdq_ds18b20=1;//拉高总线delay_8us(5);if(dq_ds18b20==1){return;}delay_50us(2); //延时90usif(dq_ds18b20==1){return;}else{goto rest;}}//==============================超声波模块测试子程序================================================/*=========================================================== =========注意:是用12MHz晶振设定延时时间:x*25us 与产生40KHZ的脉冲============================================================= =======*/void delay25us_40KHz(unsigned char us){while(us--){TxPin = 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TxPin = 1;_nop_();_nop_();_nop_();_nop_();}TxPin = 1;}/*=========================================================== ==================中断程序的入口(注意:接收与发射的电平是相反的)============================================================= ==================*/void init0int() interrupt 0{uint timer_us = 0;TR0=0; //关闭定时器0timer_us =TH0*256+TL0;if(timer_us>190)timer_us=timer_us-180; //修正测距的距离if(timer_us<=735){timer_us=timer_us-96;//二次修正}if(timer_us>5059){timer_us+=29;}if(timer_us>5470){timer_us+=29;}if(timer_us>6410){timer_us+=29;}if(timer_us>7410){timer_us+=29;}if(timer_us>8410){timer_us+=29;}if(timer_us>9410){timer_us+=29;}if(timer_us>10410){timer_us+=29;}length = ((unsigned long)(speed)*timer_us)/2000;//计算长度,是扩大100倍flag = 0;EA = 0; //禁止所有中断}/*=========================================================== =========功能:在1602显示一个字符数据说明:显示一个字符数据0~256. 从左至右显示数据3位============================================================= =========*/void DisplayCharData(uchar X, uchar Y,uchar ZiFu){uchar i=0;uchar V alueBCD[3];V alueBCD[0] = ZiFu / 100; //求出百位数据ZiFu = ZiFu % 100;V alueBCD[1] = ZiFu / 10; //求出十位数据V alueBCD[2] = ZiFu % 10; //求出个位数据for(i=0;i<3;i++)//输出显示的数值{DisplayOneChar(X,Y+i,V alueBCD[i]+0x30); //显示一个字符}}/*=========================================================== ================超出测量时间============================================================= ================*/void timer0int (void) interrupt 1{TR0=0; //关闭定时器0length = 0; //超出测量时间显示示0flag = 1; //EA = 0; //禁止所有中断}/*=========================================================== ===========LCM初始化============================================================= =========*/void LCMInit(void){LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置DelayMs(100);}/*=========================================================== =========显示光标的位置============================================================= =======*/void DisplayCursorPos( unsigned char X, unsigned char Y){X &= 0x1;Y &= 0xF; //限制Y不能大于15,X不能大于1if (X) Y |= 0x40; //当要显示第二行时地址码+0x40;Y |= 0x80; // 算出指令码WriteCommandLCM(Y, 1); //这里不检测忙信号,发送地址码}/*=========================================================== =========按指定位置显示一串字符:第X 行,第y列注意:字符串不能长于16个字符============================================================= =========*/void DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData){unsigned char ListLength;ListLength = 0;X &= 0x1;Y &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]!='\0') //若到达字串尾则退出{if (Y <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;Y++;DelayMs(delayms);//延时显示字符串}elsebreak;//跳出循环体}}/*=========================================================== =========设定延时时间:x*1us============================================================= =======*/void DelayUs(uint us){while(us--);}/*=========================================================== =========设定延时时间:x*1ms============================================================= =======*/void DelayMs(uint Ms){uint i,TempCyc;for(i=0;i<Ms;i++){TempCyc = 250;while(TempCyc--);}}//==============================LCD1602显示子程序================================================/*=========================================================== ==========写数据函数: E =高脉冲RS=1 RW=0============================================================= =========*/void WriteDataLCM(unsigned char WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}/*=========================================================== =========写指令函数: E=高脉冲RS=0 RW=0============================================================= =========*/void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}/*=========================================================== =========//读数据============================================================= =========*/unsigned char ReadDataLCM(void){LCM_RS = 1;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);}/*=========================================================== =========正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。
用于超声波测距发射及接收电路设计
以 保证
,
基 极 的 方 波 不 失真
。
起保 护 三 极 管 的 作 用 日 起 限 流 的作 用
、
。
及
的 匝数 为
,
设 接入 系 数
二
,
近似
。
等于Байду номын сангаас
与超 声 波 换 能器在 发 射 时 所 需 正 弦 信号 的 振 幅 之 比
,
当
,
较小 时 要求
能 输 出较 大 的 电流振 幅 这 时
。
,
应 取 小一 些
、
,
这 样 可 以 提 高发 射 功 率 和 接 收信 号 的质 量 后 减小 了 发 射与接 收 间 的影 响
,
。
加上
么
损 坏 电感 号及
。
、
、
的 参数 由 发 射 的 超 声 波 频 率 三 极 管 的 型
。
、
。
的 大 小决 定
偏小 时
,
口
输 出 的 方 波 祸合 到 三 极
,
管 的基 极 后 变 为 脉 宽较 窄 的 不 标 准 的 脉 冲波
,
,
以 下 不 会损 坏 接 收部 分 的 电路
。
在 发 射 时 发 射 电路 不 能 破坏 接 收 电 路
, ,
接 受 电 路也 不 能 影 响 发
、
射 在接 收信 号 时 由于信号 较 弱 应 尽 量减 少 由发 射 电路所造 成
的 对 信 号 的损 耗 我们 所设 计 的 电路 如 附 图 所 示 试 验 效 果 良好
用 于 超 声 肠 测 距发尉 及 拐 成 毋 路 计
在具 有超 声 波 测 距 功 能 的 仪器 设 备 中 用 于 驱 动 超声 波发 射
超声波发射和接收电路
超声波发射和接收电路在本设计中,我们设计的发射和接收电路都是分别只有一个,通过继电器进行顺、逆流方向收发电路的切换,这样做既降低了成本,又消除了非对称性电路误差,且发射脉冲通过使用单独的继电器分别对发射和接收换能器进行控制,使换能器的发射和接收电路完全隔离,消除了发射信号对接收的影响。
4.2.1超声波发射电路接收信号的大小和好坏直接取决于发射传感器的发射信号,由于使用收发共用型超声换能器,所以除了选用性能优良的超声波传感器外,发射电路和前级信号接收电路至关重要,它决定着整个系统的灵敏度和精度。
超声波测量最常用的换能器发射电路大体可分为三种类型:窄脉冲触发的宽带激励电路、调制脉冲谐振电路和单脉冲发射电路。
从早先国内进口的日本超声波流量计来看,基本都采用的是窄脉冲驱动电路。
这种电路在设计上一般是用一个极快速的电子开关通过对储能元件的放电来实现,这些开关器件通常为晶闸管或大功率场效应管(MOSFET)。
由于需要输出激励信号的瞬时功率大,因此开关器件必须由直流高压供电,一般要达到几十到一百伏以上,这在电池供电的系统中无法实现;此外,开关瞬间会产生高压脉冲,对整个电路的抗干扰设计不利。
而脉冲谐振电路设计起来比较简单,其基本方法是用振荡电路产生一个高频振荡,经过幅值和功率放大后接至换能器,使换能器发出超声波,确保高频振荡的频率与换能器固有频率一致,则可获得超声发射的最佳效果。
谐振电路能够使用较低的电压产生较强的超声波发射,适合使用电池供电的系统,而且它能精确地控制发射信号,效率高。
在本设计中,超声发射电路采用了连续脉冲发射电路,它由脉冲发生、放大电路构成,具体电路连接如图17所示。
单片机发出的方波信号经三极管放大和变压器升压,达到足够功率后推动换能器超声超声波,这里变压器的主要用途是升高脉冲电压和使振荡器的输出阻抗与负载(超声换能器)阻抗匹配,变压器与探头接成单端激励方式。
图17超声波发射电路4.3.2 超声波接收电路发射换能器发出超声波信号后,信号经过流体传播到接收换能器,中间有杂 质和气泡等影响,强度不断减小,并且强度也不稳定。
超声波发射接收电路
40kHZ超声波发射电路(1)40kHZ超声波发射电路之一,由F1~F3三门振荡器在F3的输出为40kHZ方波,工作频率主要由C1、R1和RP决定,用RP可调电阻来调节频率。
F3的输出激励换能器T40-16的一端和反向器F4,F4输出激励换能器T40-16的另一端,因此,加入F4使激励电压提高了一倍。
电容C3、C2平衡F3和F4的输出,使波形稳定。
电路中反向器F1~F4用CC4069六反向器中的四个反向器,剩余两个不用(输入端应接地)。
电源用9V叠层电池。
测量F3输出频率应为40kHZ±2kH Z,否则应调节RP。
发射超声波信号大于8m。
40kHZ超声波发射电路(2)40kHZ超声波发射电路之二,电路中晶体管VT1、VT2组成强反馈稳频振荡器,振荡频率等于超声波换能器T40-16的共振频率。
T40-16是反馈耦合元件,对于电路来说又是输出换能器。
T40-16两端的振荡波形近似于方波,电压振幅接近电源电压。
S是电源开关,按一下S,便能驱动T40-16发射出一串40kHZ超声波信号。
电路工作电压9V,工作电流约25mA。
发射超声波信号大于8m。
电路不需调试即可工作。
40kHZ超声波发射电路(3)40kHZ超声波发射电路之三,由VT1、VT2组成正反馈回授振荡器。
电路的振荡频率决定于反馈元件的T40-16,其谐振频率为40kHZ±2kHZ。
频率稳定性好,不需作任何调整,并由T40-16作为换能器发出40kHZ的超声波信号。
电感L1与电容C2调谐在40kHZ起作谐振作用。
本电路适应电压较宽(3~12V),且频率不变。
电感采用固定式,电感量5.1mH。
整机工作电流约25mA。
发射超声波信号大于8m。
40kHZ超声波发射电路(4)40kHZ超声波发射电路之四,它主要由四与非门电路CC4011完成振荡及驱动功能,通过超声换能器T40-16辐射出超声波去控制接收机。
其中门YF1与门YF2组成可控振荡器,当 S按下时,振荡器起振,调整RP改变振荡频率,应为40kHZ。
基于51单片机超声波测距.
一设计要求(1)设计一个以单片机为核心的超声波测距仪,可以应用于汽车倒车、工业现场的位置监控;(2)测量范围在0.50~4.00m,测量精度1cm;(3)测量时与被测物无直接接触,能够清晰稳定地显示测量结果。
二超声波测距系统电路总体设计方案本系统硬件部分由AT89S52控制器、超声波发射电路及接收电路、温度测量电路、声音报警电路和LCD显示电路组成。
汽车行进时LCD显示环境温度,当倒车时,发射和接收电路工作,经过AT89S52数据处理将距离也显示到LCD 上,如果距离小于设定值时,报警电路会鸣叫,提醒司机注意车距。
超声波测距器的系统框图如下图所示:图5 系统设计总框图由单片机AT89S52编程产生10us以上的高电平,由指定引脚输出,就可以在指定接收口等待高电平输出。
一旦有高电平输出,即在模块中经过放大电路,驱动超声波发射探头发射超声波。
发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的处理,指定接收口即变为低电平,读取单片机中定时器的值。
单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由单片机控制显示出来。
由时序图可以看出,超声波测距模块的发射端在T0时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。
计算时间差,即可得到超声波在媒介中传播的时间t,由此便可计算出距离。
图6 时序图三超声波发射和接收电路的设计分立元件构成的发射和接收电路容易受到外界的干扰,体积和功耗也比较大。
而集成电路构成的发射和接收电路具有调试简单,可靠性好,抗干扰能力强,体积小,功耗低的优点,所以优先采用集成电路来设计收发电路。
3.1 超声波发射电路超声波发射电路包括超声波产生电路和超声波发射控制电路两部分,可采用软件发生法和硬件方法产生超声波。
在超声波的发射电路的设计中,我们采用电路结构简单的集成电路构成发射电路:图7 由反相器构成的超声波发射电路图7是由反相器74HC04构成的发射电路,用反相器74HC04构成的电路简单,调试容易,易通过软件控制。
基于MCS8751单片机的测距仪研究
基于MCS8751单片机的测距仪研究超声波由于指向性强,能耗低,传播距离远,经常被用于距离测量;单片机体积小,价格低,易编程故在此选用超声波和单片机设计了智能测距仪。
标签:超声波测距仪单片机0 引言超声波检测速度快、方便、计算简单、易于实时控制,测量精度高;结合单片机及外围电路,通过超声换能器,设计了具有较高重复频率,精度高的超声测距仪的软硬件系统。
并通过RS232串行通讯将报告测距结果传送给计算机显示。
1 硬件设计MCS-51系列单片机属于8位单片计算机,因其品种齐全,兼容性强,软硬件资源丰富等特点,而成为8为位单片机中的主流。
在此选用了MCS8751单片机。
8155芯片介绍8155H芯片内包含有256个字节的RAM存储器,两个可编程的8位并行口PA和PB,一个可编程的6位并行口PC,以及一个14位减法定时器/计数器。
PA口和PB口可工作于基本输入输出方式或选通输入输出方式。
数码显示电路LED显示器分为:共阴极LED显示器的发光二极管阴极相连并接地;共阳极LED显示器的发光二极管的阳极相连接正电压,当某发光二极管的阴极接低电平时,二极管被点亮,显示相应字段。
点亮显示器有静态和动态两种。
静态显示是指显示器显示某一字符时,相应的发光二极管恒定导通或截止;动态显示就是一位一位地轮流点亮显示器各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
若显示器的位数不大于八位,显示器公共极电位只需一个I/O口称为扫描口,显示器各位所显示的字型也需要一个八位口称为段数据口。
4位共阴极显示器与8155的A口相连作为扫描口,经反向驱动器75452接显示器公共极,B口作为段数据口,经同向驱动器7407接显示器的各个极。
RS232接口电路在PC机中一般有两个标准RS-232C串行接口COM1和COM2.MCS8751单片机片内含一个全双工的串行接口,通过编程即可实现串行通信。
然而PC机的RS-232C标准的电平采用负逻辑,规定+3V~+15V之间的任意电平为逻辑“0”,-3V~-15V之间的任意电平为逻辑“1”,计算机接口芯片大都为TTL或CMOS电平,在通信时,须进行电平转换,以便与RS-232C标准的电平匹配。
超声波接收电路图
超声波接收电路图
超声波接收电路图如下图所示:
超声波在空气中传播时,能量会随着距离的增加而不断衰减。
通过实验测得,当探测距离为1m 左右时,信号能量已经衰减到30mv 左右,我们需要把这个接收到的微弱的超声波正弦信号进行放大、滤波等处理,输入到PIC 的外部中断口,作为接收到回波的标志。
通常的设计思路是首先采用LM 系列的放大器进行放大,然后经过滤波、频率锁定等电路输入到INT0 产生中断。
该方法的优点在于可以锁定所需要的频率,防止外界其他频率的超声波的干扰,但缺点在于集成度不高,设计和焊接比较繁琐。
为此本文采用索尼公司的CX20106A 红外遥控接收集成芯片,该芯片可用于超声波处理电路,它集成了放大、限幅、带通滤波、峰值检测、整形和比较等功能,具有很高的灵敏度和抗干扰性[5].CX20106A 芯片的7 引脚与PIC单片机的INT0 相连接,未接收到超声波时,7 引脚输出4.1v 左右的高电平,不产生中断;当接收到与中心频率40KHz 相符或相近的超声波时,便产生低跳变。
当检测到有底跳变时,把第一个下降沿信号输入到INT0 作为外部中断信号,然后关闭定时器T1 并读取T1 的计数值,进行下一步的时间和距离计算。
图系统发射电路图。
(完整word版)超声波发射和接收电路
超声波发射和接收电路在本设计中,我们设计的发射和接收电路都是分别只有一个,通过继电器进行顺、逆流方向收发电路的切换,这样做既降低了成本,又消除了非对称性电路误差,且发射脉冲通过使用单独的继电器分别对发射和接收换能器进行控制,使换能器的发射和接收电路完全隔离,消除了发射信号对接收的影响。
4.2.1超声波发射电路接收信号的大小和好坏直接取决于发射传感器的发射信号,由于使用收发共用型超声换能器,所以除了选用性能优良的超声波传感器外,发射电路和前级信号接收电路至关重要,它决定着整个系统的灵敏度和精度.超声波测量最常用的换能器发射电路大体可分为三种类型:窄脉冲触发的宽带激励电路、调制脉冲谐振电路和单脉冲发射电路。
从早先国内进口的日本超声波流量计来看,基本都采用的是窄脉冲驱动电路.这种电路在设计上一般是用一个极快速的电子开关通过对储能元件的放电来实现,这些开关器件通常为晶闸管或大功率场效应管(MOSFET).由于需要输出激励信号的瞬时功率大,因此开关器件必须由直流高压供电,一般要达到几十到一百伏以上,这在电池供电的系统中无法实现;此外,开关瞬间会产生高压脉冲,对整个电路的抗干扰设计不利。
而脉冲谐振电路设计起来比较简单,其基本方法是用振荡电路产生一个高频振荡,经过幅值和功率放大后接至换能器,使换能器发出超声波,确保高频振荡的频率与换能器固有频率一致,则可获得超声发射的最佳效果。
谐振电路能够使用较低的电压产生较强的超声波发射,适合使用电池供电的系统,而且它能精确地控制发射信号,效率高.在本设计中,超声发射电路采用了连续脉冲发射电路,它由脉冲发生、放大电路构成,具体电路连接如图17所示。
单片机发出的方波信号经三极管放大和变压器升压,达到足够功率后推动换能器超声超声波,这里变压器的主要用途是升高脉冲电压和使振荡器的输出阻抗与负载(超声换能器)阻抗匹配,变压器与探头接成单端激励方式。
图17超声波发射电路4.3。
2 超声波接收电路发射换能器发出超声波信号后,信号经过流体传播到接收换能器,中间有杂 质和气泡等影响,强度不断减小,并且强度也不稳定。
超声波收发电路(可用于测距)
CX20106a的中文资料2009-08-23 10:46CX20106A的引脚注释:l脚:超声波信号输入端,该脚的输入阻抗约为40kΩ。
2脚:该脚与GND之间连接RC串联网络,它们是负反馈串联网络的一个组成部分,改变它们的数值能改变前置放大器的增益和频率特性。
增大电阻R或减小C,将使负反馈量增大,放大倍数下降,反之则放大倍数增大。
但C的改变会影响到频率特性,一般在实际使用中不必改动,推荐选用参数为R=4.7Ω,C=3.3μF。
3脚:该脚与GND之间连接检波电容,电容量大为平均值检波,瞬间相应灵敏度低;若容量小,则为峰值检波,瞬间相应灵敏度高,但检波输出的脉冲宽度变动大,易造成误动作,推荐参数为3.3μF。
4脚:接地端。
5脚:该脚与电源端VCC接入一个电阻,用以设置带通滤波器的中心频率f0,阻值越大,中心频率越低。
例如,取R=200kΩ时,fn≈42kHz,若取R=220kΩ,则中心频率f0≈38kHz。
6脚:该脚与GND之间接入一个积分电容,标准值为330pF,如果该电容取得太大,会使探测距离变短。
7脚:遥控命令输出端,它是集电极开路的输出方式,因此该引脚必须接上一个上拉电阻到电源端,该电阻推荐阻值为22kΩ,没有接收信号时该端输出为高电平,有信号时则会下降。
8脚:电源正极,4.5V~5V。
发射部分接收部分注:这上面两幅图是做出实物经过测试的发射电路主要有反相器74LS04和超声波换能器构成,单片机P1.0端口输出的40KHz方波信号一路经一级反相器后送到超声波换能器的一个电极,另一路经两级反相器后送到超声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器两端可以提高超声波发射强度。
输出端采用两个反向器并联,可以提高驱动能力。
上拉电阻R1、R2一方面可以提高反相器74LS04输出高电平的驱动能力;另一方面可以增加超声波换能器的阻尼效果,以缩短其自由振荡的时间。
用51单片机设计超声波测距系统的设计原理及电路(附源程序)
基于51单片机的超声波测距仪说明书引言超声波测距仪,可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
利用超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。
一、性能要求该超声波测距仪,要求测量范围在0.08-3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
二、工作原理及方案论证超声波传感器及其测距原理超声波是指频率高于20KHz的机械波。
用超声波传感器产生超声波和接收超声波,习惯上称为超声波换能器或超声波探头。
超声波传感器有发送器和接收器.超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(timeofflight)。
首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离。
根据要求并综合各方面因素,采用AT89C52单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距仪的系统框图如下图所示:图1 超声波测距仪系统设计框图三、系统硬件部分硬件部分主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
1.单片机系统及显示电路单片机采用AT89C52来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。
单片机通过P1.1引脚发射脉冲控制超声波的发送,然后单片机不停的检测外中断0口INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管驱动。
单片机控制超声波 -回复
单片机控制超声波 -回复超声波技术在许多领域中都有广泛的应用,比如测距、物体检测和定位等等。
本文将介绍如何通过单片机控制超声波模块来实现测距功能。
1.超声波模块的工作原理超声波模块主要由一个发射器和一个接收器组成。
发射器会发送一段频率在40kHz左右的超声波信号,接收器则会接收反射回来的信号。
通过计算发送和接收之间的时间差,我们可以得出信号的传播时间,从而推算出目标物体的距离。
2.连接电路超声波模块一般都有四个引脚:VCC、GND、Trig和Echo。
其中VCC和GND用于连接电源,Trig和Echo则用于发送和接收信号。
我们需要将Trig连接到单片机的输出端口,而将Echo连接到单片机的输入端口。
3.编写程序```c#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit TRIG = P1^0; // 发送引脚sbit ECHO = P1^1; // 接收引脚void delay_us(uint us) // 微秒级延时函数{while(us--);}4.调试程序- 确保超声波模块的电源连通;- 确保Trig和Echo连接正确;- 程序正常运行时,应该能够看到距离的数值在不断变化。
5.总结通过本文的介绍,我们了解了超声波模块的工作原理,学会了如何连接电路和编写程序来控制超声波模块实现测距功能。
随着科技的不断发展,超声波技术的应用领域也会不断扩大。
除了测距外,超声波技术在工业自动化控制、机器人控制、无人机导航、医疗诊断和火灾预警等方面也有广泛的应用。
在工业自动化控制方面,超声波技术可用于检测物体的存在、厚度、形状和位置等,从而实现自动控制和精确定位。
比如在自动化加工中,超声波传感器可以用于检测工件的位置和变化,从而控制加工精度和速度;在流体控制中,超声波流量计可以用于检测流体的速度和流量,从而控制流体的质量和方向。
超声波的原理
[编辑本段]引言由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。
为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。
本文所介绍的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。
[编辑本段]原理二、超声波测距原理1、超声波发生器为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。
总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
目前较为常用的是压电式超声波发生器。
2、压电式超声波发生器原理压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部结构如图1所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
3、超声波测距原理超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。
这就是所谓的时间差测距法。
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。
51单片机开发板-超声波测距-数码管显示
计算机技术系项目工作报告课程名称单片机开发板设计与制作实训班级学号姓名项目名称超声波测距,数码管显示实训日期/时间2015.6.23-2015.7.5 地点指导教师同组成员仪器设备(参考资料)计算机、Keil uVision2、Proteus ISIS 电烙铁、开发板、HC-SR04超声波模块实训内容(任务安排)1焊接开发板2自选课题3开发与调试4项目汇报与总结一、项目名称与要求项目名称:超声波测距,数码管显示功能描述:采用HC-SR04超声波模块,STC89C52单片机以及数码管显示设计的一种超声波测距显示器,可以实现测量物体到仪器距离以及显示等功能,可以测量范围为2cm –450cm ,精确度为1cm。
是一种结构简单、性能稳定、使用方便、价格低廉的超声波距离测量器,具有一定的实用价值。
二、项目设计思路1、硬件资源单片机开发板(携带数码管);HC-SR04超声波模块;STC89C52芯片;2、软件设计思路软件设计采用C语言编程,运用模块化程序设计思想,对不同功能模块的程序进行分别编程,以便移植或调用,这样使软件层次结构清晰,有利于软件的调试修改。
软件设计思路是:系统初始化、发射脉冲串、计时、接收输入脉冲,接收串口输入速度值、计算距离、显示距离值、重复。
超声波测距算法设计如下:超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波接收器R接收到。
这样,只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器于反射物体的距离。
该距离的计算公式如下:d=s/2(v×t)/2其中:d为被测物于测距器的距离;s为声波的来回路程;v为声速;t为声波来回所用的时间。
超声波测距原理图如下:3、项目涉及的知识点说明HC-SR04超声波模块简介:实物图:正面:背面:HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 1cm;模块包括超声波发射器、接收器与控制电路。
使用51单片机和CX20106A做超声波测距
我现在在做超声波测距,用的是非门 + CX20106A方案。
发射部分用非门驱动,如下:(原文件名:超声波发射电路原理图.gif)引用图片我手上没有74ALS04或74LS04,所以用74HC04和HCF4069UBE 代替。
超声波接收采用CX20106A,如下:(原文件名:接收电路 .jpg)引用图片我用的CX20106A是拆机件。
用万用板搭好电路之后,在网上找到了一些参考汇编程序,我修改后可以通过串口发到PC显示超声波往返的时间:;///////////////////////////////////////////////////// //; USE BY :超声波测距器; IC :STC89C52; OSCCAL :XT (12M);///////////////////////////////////////////////////// //;T2CON EQU 0C8HT2MOD EQU 0C9HRCAP2L EQU 0CAHRCAP2H EQU 0CBHTH2 EQU 0CDHTL2 EQU 0CCHVOUT EQU P3.7 ;超声波输出端口;********************************************;* 中断入口程序 *;********************************************;ORG 0000H ;复位LJMP STARTORG 0003H ;外部中断0LJMP PINT0ORG 000BH ;T0溢出中断RETIORG 0013H ;外部中断1RETIORG 001BH ;T1溢出中断LJMP INTT1ORG 0023H ;串口中断RETIORG 002BH ;T2EN端负跳变(52系列)RETI;;********************************************;* 主程序 *;********************************************;START: MOV SP,#4FH MOV SCON,#50H ;串口方式1工作,8位数据位,1位停止位,无奇偶校验,允许接收MOV T2MOD,#00H ;DCEN = 0,向上计数MOV RCAP2H,#0FEH ;定时器T2置重装数,波特率:1200. (12MHz)MOV RCAP2L,#0C8HMOV TH2,#0FEH ;定时器T2置初值MOV TL2,#0C8HMOV T2CON,#34H ;T2工作方式:波特率发生器,同时启动Time2定时器CLR TICLR 30HMOV TMOD,#11H ;T1、T0为16位定时器MOV TH0,#00H ;65毫秒初值MOV TL0,#00HMOV TH1,#00HMOV TL1,#00HMOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV R4,#04H ;超声波脉冲个数控制(为赋值的一半,即2个超声波)SETB PX0CLR IE0 ;外部中断0中断请求标志位。
超声波发射电路与接收电路设计_高忠义
>才智/200超声波发射电路与接收电路设计高忠义 谢玲 侯雅波 袁秀艳 高萍 白城职业技术学院 137000摘要:本设计主要采用555振荡器、RS 触发器、分频器、信号发生器、换能器等进行信号的发射,使用放大器、RS 触发器、分频器换能器等进行信号的接收。
关键词:超声波传感器;振荡器;分频器;触发器车总人数为290人,下车总人数为380人,9:00~10:00下车总人数为220人,上车总人数为190人,10:00~11:00下车总人数为190人,上车总人数为187人,11:00~12:00下车总人数为340人,上车总人数为265人,13:00~14:00下车总人数为210人,上车总人数为186人,14:00~15:00下车总人数为390人,上车总人数为270人,15:00~16:00下车总人数为190人,上车总人数为150人,16:00~17:00下车总人数为190人,上车总人数为120人,17:00~18:00下车总人数为340人,上车总人数为270人, 18:00~19:00下车总人数为260人,上车总人数为220人,19:00~20:00下车总人数为220人,上车总人数为190人,20:00~21:00下车总人数为200人,上车总人数为165人,可根据不同时段的人流量进行公交车合理调度。
如图2所示2路公交车各时间段乘客上下车情况。
图2 2路公交车各时间段乘客上下车情况在制定2路公交车发车时刻表时,考虑到公交公司的利益和公交调度方案的可行性,可将上午7:00~8:00时间段内尽量少发车,在11:00~12:00时间段的公交车由于乘客较多,可根据需要将其他时间段的公交车进行调整,以满足高峰时期乘客的出行需要,最大程度上实现了公交区位的优化,同时保证了公交公司的利益也保证了乘客的利益。
2公交线路平均站点间距的优化研究由于站点间距优化问题的复杂性,以及站距优化能带来很显著的经济和社会效益。
目前,国内外已经有许多关于公交站点间距优化的研究成果。
超声波发射接收电路
1.超声波发射接收模块:超声波发射是利用压电效应,在其两端发射一定压差的38khz频
率的方波信号,电压控制其振动而发射出超声波,再由另一端感受其振动而又由逆压电效应将声音信号转化成同频率的电信号,再加上适当的检测电路即可检测该信号。
发射电路:从单片机发出的脉冲信号峰值为0到5v。
电压值有些小,本方案中我们巧妙地使用了max232做了一个推挽电路。
从单片机输出的脉冲信号先做一路非门,就有两路互补的信号。
一路送入max232的T1 IN端,另一路送入max232的T2 IN端。
再从该芯片的T1 OUT 端与T2 OUT端取出信号。
由于MAX232内部有双路电荷泵电压转换器,可以将低电平0v 转换成8v,将高电平转换成-8v。
这样就提升了38k方波的峰峰值,从而增强了其发射强度。
接收电路:超声波的接收头利用了逆压电效应,能感受外界的超神波而产生共振,又将振动的量转化成电量,在其两端可检测到38k的正弦波。
这里我们用到了超声波接收专用芯片cx20106.该芯片内部集成了放大,滤波,检波,比较等功能。
将接收头的信号送至该芯片内部时,会在其输出端口有一个由高电平到低电平的突变,将该引脚直接连接单片机的外部中断输入口,就可以通过判断其发射到接受所用的总时间来计算出超声波传播的距离。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
超声波测距电路原理和电路图
2008-03-20 21:05
超声波测距电路原理
一、声波测距电路原理和制作
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。
为了使移动机器人能自动避障行走,就必须装备测距系统,以使其及时获取距障碍物的距离信息(距离和方向)。
本文所介绍的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。
二、超声波测距原理
1、超声波发生器
为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。
总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
目前较为常用的是压电式超声波发生器。
2、压电式超声波发生器原理
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部结构如图1所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了
3、超声波测距原理
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2
图1 超声波传感器结构
这就是所谓的时间差测距法。
三、超声波测距系统的电路设计
图2 超声波测距电路原理图
本系统的特点是利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时,单片机选用8751,经济易用,且片内有4K的ROM,便于编程。
电路原理图如图2所示。
其中只画出前方测距电路的接线图,左侧和右侧测距电路与前方测距电路相同,故省略之。
1、40kHz 脉冲的产生与超声波发射
测距系统中的超声波传感器采用UCM40的压电陶瓷传感器,它的工作电压是40kHz的脉冲信号,这由单片机执行下面程序来产生。
puzel:mov 14h, #12h;超声波发射持续200ms
here:cpl p1.0 ;输出40kHz方波
nop ;
nop ;
nop ;
djnz 14h,here;
ret
前方测距电路的输入端接单片机P1.0端口,单片机执行上面的程序后,在P1.0 端口输出一个40kHz的脉冲信号,经过三极管T放大,驱动超声波发射头UCM40T,发出40kHz的脉冲超声波,且持续发射200ms。
右侧和左侧测距电路的输入端分别接P1.1和P1.2端口,工作原理与前方测距电路相同。
2、超声波的接收与处理
接收头采用与发射头配对的UCM40R,将超声波调制脉冲变为交变电压信号,经运算放大器IC1A和IC1B两极放大后加至IC2。
IC2是带有锁定环的音频译码集成块LM567,内部的压控振荡器的中心频率f0=1/1.1R8C3,电容C4决定其锁定带宽。
调节R8在发射的载频上,则LM567输入信号大于25mV,输出端8脚由高电平跃变为低电平,作为中断请求信号,送至单片机处理。
前方测距电路的输出端接单片机INT0端口,中断优先级最高,左、右测距电路的输出通过与门IC3A的输出接单片机INT1端口,同时单片机P1.3和P1.4接到IC3A的输入端,中断源的识别由程序查询来处理,中断优先级为先右后左。
部分源程序如下:
receive1:push psw
push acc
clr ex1 ;关外部中断1
jnb p1.1, right ;P1.1引脚为0,转至右测距电路中断服务程序
jnb p1.2, left ;P1.2引脚为0,转至左测距电路中断服务程序
return:SETB EX1;开外部中断1
pop acc
pop psw
reti
right: ... ;右测距电路中断服务程序入口
ajmp return
left:... ;左测距电路中断服务程序入口
ajmp return
3、计算超声波传播时间
在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记。