📄 test.lst
字号:
C51 COMPILER V7.10 TEST 06/18/2007 11:05:56 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\test.c BROWSE DEBUG OBJECTEXTEND PRINT(.\test.lst) OBJECT(test.obj)
line level source
1 #include <REG935.H>
2 #include"..\SOURCE\general.h"
3 #include <STRING.H>
4 //#include <stdio.h>
5 BYTE STATE;
6 DWORD DISTANCE,DISTANCENA,DISTANCEPA1,DISTANCEPA2;
7 BYTE PREDATA=100,j=0;
8 bit OVERFLOW=0;
9 /*********************************************************************************************************
10 * 函数名称: X9C104
11 *
12 * 功能描述: 数字电位器X9C104控制程序。
13 *
14 * 入口参数: X9C104DATA 数字电位器的中心抽头的位置数值
15 *
16 * 出口参数: 无
17 *
18 * 全局变量: 无
19 *
20 * 调用模块: delay
21 *
22 * 作 者: 汪帆
23 * 创建时间: 2006年1月10日
24 ********************************************************************************************************/
25 void x9c104(BYTE X9C104DATA)
26 {
27 1 signed int i;
28 1 UD=0;
29 1 INC=0;
30 1 i= X9C104DATA-PREDATA;
31 1 if (i>0)
32 1 {
33 2 i=X9C104DATA-PREDATA;
34 2 UD=1;
35 2 do
36 2 {
37 3 INC=1;
38 3 _nop_();
39 3 INC=0;
40 3 i--;
41 3 }while (i>0);
42 2 }else if (i<0)
43 1 {
44 2 i=PREDATA-X9C104DATA;
45 2 UD=0;
46 2 do
47 2 {
48 3 INC=1;
49 3 _nop_();
50 3 INC=0;
51 3 i--;
52 3 }while (i>0);
53 2 }
54 1 PREDATA=X9C104DATA;
55 1
C51 COMPILER V7.10 TEST 06/18/2007 11:05:56 PAGE 2
56 1 }
57 /*********************************************************************************************************
58 * 函数名称: pulse
59 *
60 * 功能描述: 发送脉冲,并选择脉冲宽度
61 *
62 * 入口参数: ABC=0 范围参数
63 *
64 * 出口参数: 无
65 *
66 * 全局变量: 无
67 *
68 * 调用模块: 无
69 *
70 * 作 者: 汪帆
71 * 创建时间: 2006年1月10日
72 ********************************************************************************************************/
73 void pulse(BYTE ENSEL10)
74 {
75 1 //START=0;
76 1 CLR=0;
77 1 delay(2);
78 1 LOAD=0; //LOAD为脉冲下降沿有效
79 1 switch (ENSEL10)
80 1 {
81 2 case 1: EN=0;SEL1=0;SEL0=0;ENNP=0;break; //200米
82 2 case 2: EN=0;SEL1=0;SEL0=1;ENNP=0;break; //1000米
83 2 case 3: EN=0;SEL1=1;SEL0=0;ENNP=0;break; //4000米
84 2 case 4: EN=0;SEL1=1;SEL0=1;ENNP=0;break; //8000米
85 2 case 5: EN=1;SEL1=0;SEL0=0;ENNP=1;break; //
86 2 case 6: EN=1;SEL1=0;SEL0=0;ENNP=1;break; //
87 2 case 7: EN=1;SEL1=1;SEL0=0;ENNP=1;break; //
88 2 case 8: EN=1;SEL1=1;SEL0=0;ENNP=1;break; //
89 2 default: break;
90 2 }
91 1 DCLK=0;
92 1 //START=1;
93 1 CLR=1;
94 1 }
95 /*********************************************************************************************************
96 * 函数名称: rdpulse
97 *
98 * 功能描述: 读一次测试数据的值
99 *
100 * 入口参数:
101 *
102 * 出口参数: DISTANCE 一次测试后的记数值
103 *
104 * 全局变量: 无
105 *
106 * 调用模块: 无
107 *
108 * 作 者: 汪帆
109 * 创建时间: 2006年1月10日
110 ********************************************************************************************************/
111 DWORD rdNAPA(void)
112 {
113 1 BYTE i,l;
114 1 for(l=0;l<255;l++)
115 1 {
116 2 _nop_();
117 2 _nop_();
C51 COMPILER V7.10 TEST 06/18/2007 11:05:56 PAGE 3
118 2 }
119 1 P2=P2|0x18;
120 1 _nop_();
121 1 P2=P2&0xe7;
122 1 DISTANCE=0;
123 1 DCLK=0;
124 1 LOAD=0;
125 1 LOAD=1;
126 1 DCLK=1;
127 1 LOAD=0;
128 1 for (i=0;i<8;i++)
129 1 {
130 2 DCLK=1;
131 2 if(SD==1)
132 2 DISTANCE|=1;
133 2 if(i<7)
134 2 DISTANCE<<=1;
135 2 DCLK=0;
136 2 }
137 1 DCLK=0;
138 1 //DISTANCE=1688;
139 1 return(DISTANCE);
140 1 }
141 /*********************************************************************************************************
142 * 函数名称: autotest
143 *
144 * 功能描述: 自动测试程序
145 *
146 * 入口参数: 无
147 *
148 * 出口参数: DISTANCE 一次测试后的记数值 ;RANGE 完成测试时的范围
149 * 当DISTANCE=0x0fff,RANGE=7时说明测试距离过长,超出测试范围。
150 *
151 * 全局变量: 无
152 *
153 * 调用模块: 无
154 *
155 * 作 者: 汪帆
156 * 创建时间: 2006年1月10日
157 ********************************************************************************************************/
158 DWORD gainDISTANCE(void)
159 {
160 1 BYTE k=255;
161 1 do
162 1 {
163 2 j=0;
164 2 CCU_init(j*36);
165 2 delay(5);
166 2 DA(k); //数模转换,从AD03(P2.0)输出模拟电压,为PA,NA检测提供基准电压
167 2 _nop_();
168 2 _nop_();
169 2 _nop_();
170 2
171 2 do
172 2 {
173 3 j++;
174 3 if(j==9)
175 3 break;
176 3 pulse(j);
177 3 DISTANCE=rdNAPA();
178 3 }while(DISTANCE==0x00ff);
179 2 k=k-5;
C51 COMPILER V7.10 TEST 06/18/2007 11:05:56 PAGE 4
180 2 if (k>10)
181 2 OVERFLOW=0;
182 2 else
183 2 {
184 3 OVERFLOW=1;
185 3 break;
186 3 }
187 2 }while(DISTANCE==0x00ff);
188 1 if ((j==1))
189 1 {
190 2 DISTANCE=(DISTANCE)*2;
191 2 }
192 1 else if ((j==2))
193 1 {
194 2 DISTANCE=(DISTANCE)*4;
195 2 }
196 1 else if ((j==3))
197 1 {
198 2 DISTANCE=(DISTANCE)*8;
199 2 }
200 1 else if ((j==4))
201 1 DISTANCE=(DISTANCE)*16;
202 1 if ((j==5))
203 1 {
204 2 DISTANCE=(DISTANCE)*32;
205 2 }
206 1 else if ((j==6))
207 1 {
208 2 DISTANCE=(DISTANCE)*64;
209 2 }
210 1 else if ((j==7))
211 1 {
212 2 DISTANCE=(DISTANCE)*128;
213 2 }
214 1 else if ((j==8))
215 1 DISTANCE=(DISTANCE)*256;
216 1 else if ((j==9))
217 1 DISTANCE=20000;
218 1 return(DISTANCE);
219 1 }
220 void autotest()
221 {
222 1 char xdata str1[50],*str2;
223 1
224 1 /*unsigned char i=0; //测试
225 1 while(1)
226 1 {
227 1 CCU_init(1*36);
228 1 delay(5);
229 1 DA(255); //数模转换,从AD03(P2.0)输出模拟电压,为PA,NA检测提供基准电压
230 1 _nop_();
231 1 _nop_();
232 1 _nop_();
233 1 i++;
234 1 i%=5;
235 1 pulse(2);
236 1 delay(20);
237 1 }*/
238 1
239 1 D0=1; //选中PA1事件测的数据
240 1 DISTANCEPA1=gainDISTANCE();
241 1 D0=0; //选中NA事件测的数据
C51 COMPILER V7.10 TEST 06/18/2007 11:05:56 PAGE 5
242 1 DISTANCENA=gainDISTANCE();
243 1 /*strcpy(str1,"断线距离第一次。");
244 1 numtostr(str1,DISTANCEPA1);
245 1 if(OVERFLOW)
246 1 str2=strcat("测试距离太长超范围。");
247 1 else
248 1 str2=strcat(str1,"米");
249 1 xf3011text(str2);
250 1 delay(255);
251 1 delay(255);
252 1
253 1 if ((DISTANCEPA1)==0x03ff)
254 1 DISTANCE=DISTANCEPA2;
255 1 else
256 1 DISTANCE=DISTANCEPA1;*/
257 1 /*if ((j==1)||(j==2))
258 1 {
259 1 DISTANCE=(DISTANCE)*2;
260 1 DISTANCENA=(DISTANCENA)*2;
261 1 }
262 1 else if ((j==3)||(j==4))
263 1 {
264 1 DISTANCE=(DISTANCE)*4;
265 1 DISTANCENA=(DISTANCENA)*4;
266 1 }
267 1 else if ((j==5)||(j==6))
268 1 {
269 1 DISTANCE=(DISTANCE)*8;
270 1 DISTANCENA=(DISTANCENA)*8;
271 1 }
272 1 else if ((j==7)||(j==8))
273 1 {
274 1 DISTANCE=(DISTANCE)*16;
275 1 DISTANCENA=(DISTANCENA)*16;
276 1 }*/
277 1 DISTANCEPA1=DISTANCEPA1-4;
278 1 DISTANCENA=DISTANCENA-4;
279 1 //if(DISTANCENA>DISTANCEPA1)
280 1 {
281 2 strcpy(str1,"断线距离。");
282 2 numtostr(str1,DISTANCEPA1);
283 2 if(OVERFLOW)
284 2 str2=strcat("测试距离太长超范围。");
*** WARNING C209 IN LINE 284 OF SOURCE\TEST.C: '_strcat': too few actual parameters
285 2 else
286 2 str2=strcat(str1,"米");
287 2 xf3011text(str2);
288 2 delay(255);
289 2 delay(255);
290 2 }
291 1 //else
292 1 {
293 2 strcpy(str1,"短路距离。");
294 2 numtostr(str1,DISTANCENA);
295 2 if(OVERFLOW)
296 2 str2=("测试距离太长超范围。");
297 2 else
298 2 str2=strcat(str1,"米");
299 2 xf3011text(str2);
300 2 delay(255);
301 2 delay(255);
302 2 }
C51 COMPILER V7.10 TEST 06/18/2007 11:05:56 PAGE 6
303 1 }
304 void DA(BYTE da_val)
305 {
306 1 DWORD xdata i;
307 1 ADINS=0x08; //开转换通道3
308 1 ADMODA=0x02; //设置转换模式
309 1 ADMODB=0x44; //设置ADC模块,0.5Mhz<ADC CLK<3.3Mhz,使能DAC0
310 1 ADCON0=0x04; //开启DAC0模块
311 1
312 1 //ADCON0&=0x7F; //清AD/DA转换完成标志位
313 1 AD0DAT3=da_val; //AD0DAT3的值为DAC0输出的控制量
314 1 for(i=0;i<=1000;i++);
315 1 ADCON0=0x05; //启动DA转换,立即启动方式
316 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 985 ----
CONSTANT SIZE = 46 ----
XDATA SIZE = ---- 57
PDATA SIZE = ---- ----
DATA SIZE = 19 2
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -