我现在在做超声波测距,用的是非门 + CX20106A方案。发射部分用非门驱动,如下: (原文件名:超声波发射电路原理图.gif) 引用图片 我手上没有 74ALS04或 74LS04,所以用74HC04和 HCF4069UBE代替。 超声波接收采用CX20106A,如下: (原文件名:接收电路 .jpg) 引用图片 我用的CX20106A是拆机件。 用万用板搭好电路之后,在网上找到了一些参考汇编程序,我修改后可以通过串口发到 PC显示超声波往返的时间: ;/////////////////////////////////////////////////////// ; USE BY :超声波测距器 ; IC :STC89C52 ; OSCCAL :XT (12M) ;/////////////////////////////////////////////////////// ; T2CON EQU 0C8H T2MOD EQU 0C9H RCAP2L 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溢出中断 RETI ORG 0013H ;外部中断 1 RETI ORG 001BH ;T1溢出中断 LJMP INTT1 ORG 0023H ;串口中断 RETI ORG 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,#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 TL1,#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,...