C51 COMPILER V9.59.0.0 ULTRASONIC 03/12/2024 11:41:20 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE ULTRASONIC OBJECT MODULE PLACED IN .\Objects\Ultrasonic.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\Driver\Ultrasonic.c OPTIMIZE(8,SPEED) BROWSE INCDIR(..\Driver) DEBUG -OBJECTEXTEND PRINT(.\Listings\Ultrasonic.lst) TABS(2) OBJECT(.\Objects\Ultrasonic.obj) line level source 1 #include "Ultrasonic.h" 2 #include "intrins.h" 3 4 sbit Tx = P1 ^ 0; 5 sbit Rx = P1 ^ 1; 6 void Delay12us(void) //@12.000MHz 7 { 8 1 unsigned char data i; 9 1 10 1 _nop_(); 11 1 _nop_(); 12 1 i = 33; // 38 13 1 while (--i) 14 1 ; 15 1 } 16 17 void Ut_Wave_Init() 18 { 19 1 unsigned char i; 20 1 // 发送8个40kHz的方波 21 1 // f=40kHz->T=1/f=0.000025s=25us 22 1 // 12.5us 1 12.5us 0 23 1 for (i = 0; i < 8; i++) 24 1 { 25 2 Tx = 1; 26 2 Delay12us(); 27 2 Tx = 0; 28 2 Delay12us(); 29 2 } 30 1 } 31 32 unsigned char Ut_Wave_Data() 33 { 34 1 unsigned int time; 35 1 CH = CL = 0; // 清空PCA寄存器计数值 36 1 CCON = 0; // 初始化PCA控制寄存器/PCA定时器停止/清除CF/ 37 1 38 1 EA = 0; // 关闭总中断 39 1 Ut_Wave_Init(); // 发送超声波驱动信号 40 1 EA = 1; // 开启总中断 41 1 CR = 1; // PCA开始计数 42 1 while (Rx && !CF) // TF1 43 1 ; // 等待接收 44 1 CR = 0; // PCA停止计数 45 1 if (CF == 0) 46 1 { 47 2 time = CH << 8 | CL; // 单位为毫秒 48 2 // L=V*T/2 49 2 return (time * 0.017); // 返回的单位是cm 50 2 } 51 1 else 52 1 { 53 2 CF = 0; 54 2 return 0; C51 COMPILER V9.59.0.0 ULTRASONIC 03/12/2024 11:41:20 PAGE 2 55 2 } 56 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 93 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)