main.lst
来自「这是一整套USB2.0试验程序」· LST 代码 · 共 1,034 行 · 第 1/5 页
LST
1,034 行
193 //-------------------------------------------------------------------------------------------
194 //-----------------------------标定参数--------------------------------------------------
195 //参数表fPara备忘:0~7电流,8~11电压,12~18转速,19~23加速时间,24~35闭合角,36~44提前角
196 //参数表Para_Array备忘:0~7电流*100,8~11电压*100,12~18七个转速值的整数第一部分,
197 //19~23五个加速时间的整数第一部分,24~35十二个闭合角的整数部分,
198 //36~44九个提前角的整数部分,45~51七个转速值的整数第二部分,
199 //52~56五个加速时间的整数第二部分,57~68十二个闭合角的小数部分,
200 //69~77九个提前角的小数部分,78~84七个转速值的的小数部分,
201 //85~89五个加速时间的小数部分,
202 //90~101电压电流的3、4位小数
203 float fPara[47]; //电流8个系数,,电压4个系数,两位小数
204 uchar Para_Array[108];
205 uchar ParaFlag=0; //参数表标志变量
206 float fSpeedParaMul = 1.0f; //当前乘系数
207 float fSpeedParaAdd = 0.0f; //当前加系数
208 float fTimeParaMul = 1.0f; //当前乘系数
209 float fTimeParaAdd = 0.0f; //当前加系数
210 float fCloseAngleParaMul = 1.0f; //当前乘系数
211 float fCloseAngleParaAdd = 0.0f; //当前加系数
212 float fAheadAngleParaMul = 1.0f; //当前乘系数
213 float fAheadAngleParaAdd = 0.0f; //当前加系数
214 float fCurrentPara;
215 float fVoltagePara;
216 uchar VoltageFlag = 0;
217 //-----------------------------屏幕位置变量----------------------------------------------------------
218 uchar PromptX1;
219 uchar PromptY1;
220 uchar PromptX2;
221 uchar PromptY2;
222 uchar PromptX3;
223 uchar PromptY3;
224 uchar PromptX4;
225 uchar PromptY4;
226 //-----------------------------DA/AD控制变量---------------------------------
227 bit AD0ProcessEnd=0;
228 bit AD1ProcessEnd=0;
229 bit StartFlag = 0;
230 //bit EndFlag = 0;
231 bit bVoltageAdjusting = 1;
232 bit bVoltageOk = 0;
233 bit bCurrentAdjusting = 1;
234 bit CurrentAdjusted = 0;
235 bit bCurrentWaitForAdj = 0;
236 uchar CurrentOkCounter = 0;
237
238 uchar VOLTAGEDATA = 0; //电压设定值
239 uchar VOLTAGEDATAADJUSTED = 0; //电压设定值
240 uchar VOLTAGEDATAADJUSTEDUP = 0; //电压设定值
241 uchar VOLTAGEDATAADJUSTEDDOWN = 0; //电压设定值
C51 COMPILER V7.50 MAIN 04/22/2008 11:45:45 PAGE 5
242 uint VoltageCounter = 0;
243 uint VoltageOkCounter = 0;
244 //uchar VOLTAGEDATAUP = 0;
245
246 //float VoltageAdjusted = 12.0f; //标定后的电压设定值
247 uint CURRENT = 100; //电流设定值
248 uint CURRENTDATA = 100;
249 uchar CURRENTDISP = 5; //电流偏移值
250 uint CURRENTDOWN = 100; //电流设定值下限
251 uint CURRENTUP = 200; //电流设定值上限
252 float fVoltage = 0.0f; //实际测得电压值
253 float fCurrent = 0.0f; //采样阻值
254 float fRSample = 2.0f; //实际测得电流值
255 float fGain0 = 2.0f; //AD0的增益
256 //uchar fGain1 = 1; //AD1的增益
257 uchar CurrentFlag = 0; //电流档位标志
258
259 uint AD0TraceCounterMax = 0; //AD跟踪器在调整后的等待上限值(电容充放电时间)
260 uint ValueOut_DA1 = 0xfff; //DA1输出变量
261
262 uint ValueOut_DA0 = 0xfff; //DA0输出变量
263 ulong ADC0_SUM; //ADC1数值和
264 ulong ADC1_SUM; //ADC1数值和
265 uint COUNTER_ADC1 = 0; //ADC1计数器
266 //-------------------------------------------------------------------
267 uchar KeyCounter = 0; //键盘中断计数
268 //-------------------------------------------------------------------
269 uchar BDBegin = 0;
270 uchar BDEnd = 0;
271 //-------------------------------------------------------------------
272 //----------------闪光中断--------------------
273 //EIE2 |= 0x10;//允许INT7外部中断
274 //EIP2 |= 0x10;//INT7外部中断置为高优先级
275 bit bFlash = 0;
276 */
277 //--------------USB---------------------------
278 //sbit SLRD=P7^0;//OUT
279 //sbit SLWR=P7^1;//OUT
280 //sbit SLCS=P7^2;//OUT
281 //sbit SLOE=P7^3;//OUT
282 //sbit FIFOADR1=P7^4;//OUT
283 //sbit FIFOADR0=P7^5;//OUT
284 //sbit Start=P6^0;//IN
285 //P5应配置为输出
286 //SLRD(RDY0/SLRD)、1
287 //SLWR(RDY1/SLWR)、 1
288 //SLCS(PA7/FLAGD/SLCS)、0
289 //SLOE(PA2/ SLOE) 1
290 //FIFOADR1(PA5/ FIFOADR1)1
291 //FIFOADR0(PA4/ FIFOADR0)0
292 int inData[256];
293 //-------------------------------------------=
294
295 void main(void)
296 {
297 1 int FD;
298 1 int i;
299 1
300 1 // FIFOADR0=1; //选择EP6
301 1 // FIFOADR1=0;
302 1 // SLWR=1; //初始化各个控制引脚
303 1 // SLRD=1;
C51 COMPILER V7.50 MAIN 04/22/2008 11:45:45 PAGE 6
304 1 // SLCS=0;
305 1 // SLOE=1;
306 1 WDTCN = 0xde; // disable watchdog timer
307 1 WDTCN = 0xad;
308 1 Init_Device();
*** WARNING C206 IN LINE 308 OF MAIN.C: 'Init_Device': missing function-prototype
309 1 P7 = 0x0B;
310 1
311 1 while(1) //主循环
312 1 {
313 2 P7 |= 0x30;//选择端点8,看是否有输出包
314 2 // P5 = 0x00;//设置P5为输入
315 2 if(!(P6&0x01))//若已满,读取命令包,或者利用可编程标志PF,读取设定字节的数据
316 2 {
317 3 P7 &= 0xF3; //SLOE
318 3 for (i=0;i<256;i++)
319 3 {
320 4 P7 &= 0xFE;
321 4 inData[i] = P5<<8;//仅读取高8位;
322 4 P7 |= 0x01;
323 4 // SLRD=0;
324 4 // SLRD=1;
325 4 }
326 3 for (i=0;i<256;i++)//两重缓冲,读两次
327 3 {
328 4 P7 &= 0xFE;
329 4 inData[i] += P5;//第二个缓冲区的高8位放在输入缓冲区的低字节
330 4 P7 |= 0x01;
331 4 }
332 3 P7 |= 0x08;
333 3 }
334 2 else
335 2 {
336 3
337 3 P7 &= 0xcf;//选择端点2
338 3 if(P6&0x01) //如果未满,满标志高电平
339 3 {
340 4 P74OUT |= 0x0c;
341 4 for (i=0;i<512;i++)
342 4 {
343 5 P5 = i; //循环写入512个数据0x05
344 5 P7 &= 0xFD;
345 5 P7 |= 0x02;
346 5 // SLWR=0;
347 5 // SLWR=1;
348 5 }
349 4 P74OUT &= 0xF3;
350 4 P5 = 0xff;//设置P5为输入
351 4 }
352 3 else //已满
353 3 {
354 4 FD = 0;
355 4 }
356 3
357 3 }
358 2
359 2 }
360 1 /* uchar key;
361 1 uint i;
362 1 bit ParaError0=0;
363 1 bit ParaError1=0;
364 1 bit ParaError2=0;
C51 COMPILER V7.50 MAIN 04/22/2008 11:45:45 PAGE 7
365 1 bit ParaError3=0;
366 1 WDTCN = 0xde; // disable watchdog timer
367 1 WDTCN = 0xad;
368 1 // LockFlash();
369 1 // P3 = 0x00;
370 1 //
371 1 K4 = 0;
372 1 K5 = 0;
373 1 K6 = 0;
374 1 // K3 = 0;
375 1 Init_Device();
376 1
377 1 K4 = 0;
378 1 K5 = 0;
379 1 K6 = 0;
380 1 // K3 = 0;
381 1
382 1 //lcd 显示
383 1
384 1 // DelayM(10); // 足够的延时确保lcm已经准备好
385 1 LcmInitialize(); //LCM初始化
386 1 LcmClear(); //LCM清屏
387 1 DisplayStart(); //显示欢迎界面
388 1 // DelayM(5000); //延时5秒
389 1
390 1 //===================================
391 1
392 1 //==========================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?