📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 09/02/2007 21:16:40 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE main.c DEBUG OBJECTEXTEND
line level source
1 #include "common.h"
2 #include "config.h"
3 #include "timer.h"
4 #include "pca.h"
5 #include "findline.h"
6 #include "bizhang.h"
7 #define T3RUN temppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
8 #define T4RUN temppage=SFRPAGE;SFRPAGE=0x02;TR4=1;SFRPAGE=temppage
9 #define T4STOP temppage=SFRPAGE;SFRPAGE=0x02;TR4=0;SFRPAGE=temppage
10 #define T3STOP temppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
11 #define S TMR4 //S为路程计数值
12
13 /*定时器2。3。4寄存器和定时器2。3。4捕捉寄存器字声明*/
14 sfr16 RCAP2=0xca;
15 sfr16 RCAP3=0xca;
16 sfr16 RCAP4=0xca;
17 sfr16 TMR4=0xcc;
18 sfr16 TMR3=0xcc;
19 sfr16 TMR2=0xcc;
20 uchar temp;
21 uchar temp1;
22 uchar temp3;
23 uchar k; //避障接收次数计数
24 uchar ir[8];
25 uchar int0_count;
26 uchar temppage;
27 uchar tiepiancount=0x00;
28 bit c_flag; //到达C标志,1到达,0未到达
29 xdata uint s[6]; //16位
30
31 void delay1ms(uint time){//延迟1ms
32 1 uint i;
33 1 uint j;
34 1 for (i=0;i<time;i++){
35 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- for(
-j=0;j<300;j++);
36 2 }
37 1 }
38 void ring() //测试用的报警蜂鸣器程序,低电平报警
C51 COMPILER V7.20 MAIN 09/02/2007 21:16:40 PAGE 2
39 {
40 1 temppage=SFRPAGE;
41 1 SFRPAGE=0X0F;
42 1 P4_7=0;
43 1 delay_ms(1);
44 1 P4_7=1;
45 1 delay_ms(1);
46 1 SFRPAGE=temppage;
47 1 }
48 void ringl() //测试用的报警蜂鸣器程序,低电平报警
49 {
50 1 temppage=SFRPAGE;
51 1 SFRPAGE=0X0F;
52 1 P4_7=0;
53 1 delay_ms(25);
54 1 P4_7=1;
55 1 delay_ms(25);
56 1 SFRPAGE=temppage;
57 1 }
58 void main(void) //90s计时成功,40K方波成功,路程计数成功,金属探测成功8。20
59 {
60 1 config();
61 1 EA=1;
62 1 IE|=0x01; //开外部中断0
63 1 // t1_count_ini();
64 1 //t2_time90s_ini();
65 1 //t2_time90s_start(); //开始90计时
66 1 // t4_count_ini();//开始计路程,*/
67 1 // t3_ini();
68 1 //t3_fre_set(100);
69 1 //t3_fre_set40k();
70 1 // T3RUN;
71 1
72 1 //t0_ini();
73 1 pca_ini();
74 1 go_forward();
75 1
76 1 while(1);
77 1 /*hile(1) //寻迹
78 1 {
79 1 if(c_flag) //是否到达C点
80 1 break; //到达C点
81 1 else
82 1 findline(); //未到达C点
83 1 }*/
84 1 /*while(1)
85 1 {stop();
86 1 delay1ms(5000); //致达C点,停车5S
87 1
88 1 /*while(1)
89 1 {
90 1 if(S<0XFFFF) //是否越过障碍区,
91 1 {
92 1 //bizhang_tr();
93 1 bizhang_isr();
94 1 }
95 1 else
96 1 break;
97 1 }*/
98 1
99 1 }
100
C51 COMPILER V7.20 MAIN 09/02/2007 21:16:40 PAGE 3
101 void int0_isr() interrupt 0
102 {
103 1 EA=0;
104 1
105 1 //int0_count++;
106 1 //if(int0_count>=2) //450ms内有两次以上反射,则认为有障碍物,进行避障
107 1 //bizhang_isr();
108 1 //else
109 1 EA=1;
110 1 }
111 void T0_isr() interrupt 1
112 {
113 1 EA=0;
114 1 TH0 = 0x90; //定时器赋初值
115 1 TL0 = 0x0a;
116 1 int0_count=0; //450ms清零
117 1 EA=1;
118 1 }
119 void t2ISR() interrupt 5
120 { //T2定时溢出处理,计数351次后停车90s
121 1 EA=0;
122 1 temppage=SFRPAGE;
123 1 SFRPAGE=0X00;
124 1 TF2=0;
125 1 ET2=0;
126 1 SFRPAGE=temppage;
127 1 t2count++;
128 1 if(t2count<20)
129 1 {
130 2 //P4_7=0;
131 2 void t2_start();
132 2 }
133 1 else
134 1 {
135 2 temppage=SFRPAGE;
136 2 SFRPAGE=0X0F;
137 2 P4_7=0;
138 2 delay_ms(10);
139 2 P4_7=1;
140 2 SFRPAGE=temppage;
141 2 //stop();
142 2 }
143 1 ET2=1;
144 1 EA=1;
145 1
146 1 }
147 void PCA_ISR(void) interrupt 9
148 {
149 1 uchar temp1; //temp保存第一次的探测结果,temp1保存第一次的探测结果,k保存记录次数
150 1 SFRPAGE=0x00;
151 1 EIE1&=0xF7; //关PCA中断
152 1 ring();
153 1 delay1ms(15);
154 1 temp1=PCA0CN&0X0C;
155 1 /* if(k<2)
156 1 {
157 1 temp=temp1;
158 1 k++;
159 1 //delay1ms(500);
160 1 }
161 1 else
162 1 {
C51 COMPILER V7.20 MAIN 09/02/2007 21:16:40 PAGE 4
163 1 if(temp1==temp)
164 1 {*/
165 1 switch(temp1)
166 1 {
167 2 case 0x0c: //前方有障碍
168 2 front_bi();
169 2 break;
170 2
171 2 case 0x08: //左方有障碍物
172 2 //delay1ms(300);
173 2 //if(CCF2==1)
174 2 //front_bi();
175 2 //else
176 2 left_bi();
177 2 break;
178 2 case 0x04: //右方有障碍物
179 2 /* if(CCF3==1)
180 2 front_bi();
181 2 else*/
182 2 right_bi();
183 2 break;
184 2 case 0x00: //没有障碍物
185 2 break;
186 2 }
187 1 k=0;
188 1 //}
189 1 // }
190 1 temppage=SFRPAGE;
191 1 SFRPAGE=0x00;
192 1 CCF2=0;
193 1 CCF3=0;
194 1 SFRPAGE=temppage;
195 1 EIE1|=0x08;//PCA中断使能,EPCA
196 1 }
197 /*void PCA_ISR(void) interrupt 9
198 {
199 ring();
200 EIE1&=0xF7; //关PCA中断
201 delay1ms(5);
202 P0|=0x0c;
203 if(k<2)
204 {
205 ir[k]=P0&0x0c;
206 k++;
207 }
208 else
209 {
210 if(ir[0]==ir[1])
211 {
212 switch(ir[0])
213 {
214 case 0x00:
215 temppage=SFRPAGE;
216 SFRPAGE=0x0f;
217 P5_1=0;
218 P5_0=0;
219 delay1ms(500);
220 P5_1=1;
221 P5_0=1;
222 delay1ms(500);
223 SFRPAGE=temppage;
224 break;
C51 COMPILER V7.20 MAIN 09/02/2007 21:16:40 PAGE 5
225 case 0x04:
226 temppage=SFRPAGE;
227 SFRPAGE=0x0f;
228 P5_1=0;
229 delay1ms(500);
230 P5_1=1;
231 delay1ms(500);
232 SFRPAGE=temppage;
233 break;
234 case 0x08:
235 temppage=SFRPAGE;
236 SFRPAGE=0x0f;
237 P5_0=0;
238 delay1ms(500);
239 P5_0=1;
240 delay1ms(500);
241 SFRPAGE=temppage;
242 break;
243 case 0x0c:
244 break;
245 }
246 k=0;
247 }
248 }
249 CCF2=0;
250 CCF3=0;
251 EIE1|=0x08;//PCA中断使能,EPCA
252 }*/
253 /*void PCA_CEX3_ISR(void) interrupt 9 //*CEX3负边沿触发模式,用来探测金属
254 {
255 EIE1&=0xF7; //关PCA中断
256 CCF3=0;
257 ring();
258 temppage=SFRPAGE;
259 SFRPAGE=0x00;
260 PCA0CPM3 = 0x31; // 正负边沿触发模式,CEX3捕捉中断使能
261 PCA0CPL3 = 0x00;
262 PCA0CPH3 = 0x00;
263 SFRPAGE=temppage;
264 if(S>0XFFFF)
265 c_flag=1;
266 else
267 {
268 tiepiancount++;
269 s[tiepiancount]=S;
270 }
271 }*/
272
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 346 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 12 ----
PDATA SIZE = ---- ----
DATA SIZE = 15 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -