1 #include "ultrasonic.h"
2
3 unsigned long S = 0;
4 unsigned int time = 0;
5 char disbuff[6];
6 static unsigned int timeFlag = 0;
7
8 void InitTimer(){
9 TMOD |= 0x01;
10 TH0 = 0;
11 TL0 = 0;
12 ET0 = 0;
13 EA = 1;
14 }
15 /*
16 终端
17 */
18 void timeInter() interrupt 1{
19 timeFlag = 1;
20 }
21 /*
22 延时
23 单位:ms
24 */
25 void delayms(unsigned int ms){
26 unsigned char i = 100,j;
27 for(;ms;ms--){
28 while(i--){
29 j=10;
30 while(--j);
31 }
32 }
33 }
34 /*
35 模块时序图
36 */
37 void startModel(){
38 Trig = 1;
39 _nop_();
40 _nop_();
41 _nop_();
42 _nop_();
43 _nop_();
44 _nop_();
45 _nop_();
46 _nop_();
47 _nop_();
48 _nop_();
49 _nop_();
50 _nop_();
51 _nop_();
52 _nop_();
53 _nop_();
54 _nop_();
55 _nop_();
56 _nop_();
57 _nop_();
58 _nop_();
59 Trig = 0;
60 }
61 /*
62 计算距离
63 */
64 void computedRange(){
65 time = TH0*256+TL0;
66 TH0 = 0;
67 TL0 = 0;
68 S = (time*1.7)/100;
69 if( S>=700 || timeFlag == 1){
70 timeFlag = 0;
71 sendError();
72 }else{
73 disbuff[0] = S%1000/100 + '0';
74 disbuff[1] = S%1000%100/10 + '0';
75 disbuff[2] = S%10 + '0';
76 }
77 }
78 /*
79 发送错误
80 */
81 void sendError(){
82 sendString("ERROR\n\r\0");
83 }
84 /*
85 发送距离
86 */
87 void sendRange(){
88 sendString("距离是: ");
89 sendString(disbuff);
90 sendString(" cm\r\n\0");
91 }
92 /*
93 运行
94 */
95 void working(){
96 while(1){
97 startModel();
98 while(!Echo); //当RX为零时等待
99 TR0=1; //开启计数
100 while(Echo); //当RX为1计数并等待
101 TR0=0; //关闭计数
102 computedRange();
103 sendRange();
104 delayms(80);
105 }
106 }