资讯详情

超声波测距电路+汇编程序

大家好! 我现在在做超声波测距,用的是非门 + 20106A方案。发射部分用非门驱动,如下:

(原文件名:超声波发射电路原理图.gif)

我手上没有74ALS04或74LS04,所以用74HC04和HCF4069UBE代替。

超声波接收采用CX20106A,如下:

(原文件名:接收电路 .jpg)

我用的CX20106A是拆机件。

用万用板搭好电路之后,在网上找到了一些参考汇编程序,我修改后可以通过串口发到PC显示超声波往返的时间: ;/////////////////////////////////////////////////////// ; USE BY :超声波测距器 ; IC :STC89C52 ; OAL :XT (12M) ;/////////////////////////////////////////////////////// ; T2CON EQU 0C8H T2MOD EQU 0C9H P2L EQU 0CAH RCAP2H EQU 0CBH TH2 EQU 0CDH TL2 EQU 0CCH VOUT EQU P3.7 ;超声波输出端口

;******************************************** ;* 中断入口程序 * ;******************************************** ; ORG 0000H ;复位 LJMP START ORG 0003H ;外部中断0 LJMP PINT0 ORG 000BH ;T0溢出中断 R ORG 0013H ;外部中断1 RETI ORG 001BH ;T1溢出中断 LJMP INTT1 ORG 0023H ;串口中断 RETI ORG 002BH ;T2EN端负跳变(52系列) RETI ; ;******************************************** ;* 主 程 序 * ;******************************************** ; START: MOV SP,#4 MOV SCON,#50H ;串口方式1工作,8位数据位,1位停止位,无奇偶校验,允许接收 MOV T2MOD,#00H ;EN = 0,向上计数 MOV RCAP2H,#0FEH ;定时器T2置重装数,波特率:1200. (12MHz) MOV RCAP2L,#0C8H MOV TH2,#0FEH ;定时器T2置初值 MOV TL2,#0C8H MOV T2CON,#34H ;T2工作方式:波特率发生器,同时启动Time2定时器 CLR TI CLR 30H MOV TMOD,#11H ;T1、T0为16位定时器 MOV TH0,#00H ;65毫秒初值 MOV TL0,#00H MOV TH1,#00H MOV ,#00H MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH MOV R4,#04H ;超声波脉冲个数控制(为赋值的一半,即2个超声波) SETB PX0 CLR IE0 ;外部中断0中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE0位清0 SETB IT0 ;当IT0 = 1时,则外部中断0(INT0 )端口由“1 ”→“0 ”下降沿跳变,激活中断请求标志位IE0,向主机请求中断处理 SETB ET1 ;允许T1中断 SETB EA SETB TR1 ;开启测距定时器 ;main主循环开始 start1: JNB 30H,$ ;收到反射信号时标志位为1 CLR EA ;不让T1中断 MOV R2,#64H ;测量间隔控制(约5*100=500MS). 64H = 100 LOOP: LCALL DL1MS LCALL DL1MS LCALL DL1MS LCALL DL1MS LCALL DL1MS DJNZ R2,LOOP CLR 30H ;清除反射信号标志位 CLR ET0 ;关闭T0中断 MOV TH0,00H MOV TL0,00H SETB TR1 ;重新开启测距定时器 SETB EA SJMP start1 ;main主循环结束 ;**************************************************** ;* 中断程序 * ;**************************************************** ;T1中断,发超声波用 ;T1中断,65毫秒中断一次 INTT1: CLR EA CLR TR0 CLR EX0 MOV TH0,#00H MOV TL0,#00H MOV TH1,#00H MOV TL1,#00H SETB ET0 ;外部中断0中断请求标志位。当主机响应中断转向该中断服务程序执行时,由内部硬件自动将IE0位清0 SETB EA SETB TR0 ;启动T0,用以计算超声波传播时间 intt11: CPL VOUT ;发射40KHZ超声波. 晶振:12MHz,1us nop nop nop nop nop nop nop nop nop DJNZ R4,intt11 ;2us ;超声波发送完毕 CLR IE0 MOV R4,#04H LCALL DL1MS ;延时2ms,避开发射的直达声波信号,消除余震 LCALL DL1MS SETB EX0 ;开启接收回波中断 RETIOUT: RETI

;外中断0,收到回波时进入 PINT0: nop jb P3.2,pint0_exit CLR TR0 ;关闭T0 CLR EA CLR EX0 MOV SBUF,TH0 JNB TI,$ CLR TI MOV SBUF,TL0 JNB TI,$ CLR TI MOV TH0,#00H MOV TL0,#00H JNB p3.2,$ SETB 30H ;接收成功标志 pint0_exit: RETI ;

;**************************************************** ;* 延时程序 * ;**************************************************** ; DL1MS: push 06H push 07H MOV R6,#14H ;14H = 20 DL1: MOV R7,#19H ;19H = 25 DL2: DJNZ R7,DL2 ;2us * 25 = 50 DJNZ R6,DL1 ;50us * 20 = 1000us pop 07H pop 06H RET ;

; DL100US: push 06H MOV R6,#32H ;32H = 50 DL3: DJNZ R7,DL3 ;2us * 50 = 100us pop 07H pop 06H RET ;

END

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台