📄 mainusb.lst
字号:
261 1 {
262 2 XBYTE[Cmdaddr]=0xD0;
263 2 XBYTE[Dataddr]=(Uchar)(Device_request.wvalue/0x100);
264 2 Printn((Uchar)(Device_request.wvalue/0x100));
265 2 //for(transp=&Device_request,i=0;i<16;i++,transp++)
266 2 //Printn(*transp);
267 2 Writeep(1,0,0);
268 2 }
269 1 }
*** WARNING C280 IN LINE 239 OF MAINUSB.C: 'i': unreferenced local variable
270
271 void Readep(char n,char *p)
272 {
*** WARNING C235 IN LINE 272 OF MAINUSB.C: parameter 2: different types
273 1 char len,i;
274 1
275 1 XBYTE[Cmdaddr]=n; //选择端点
276 1 if(XBYTE[Dataddr]&0x01==0) //如果缓冲区为空
277 1 {
278 2 return;
279 2 }
280 1 //若不为空
281 1 XBYTE[Cmdaddr]=0xF0; //读缓冲区
282 1 len=XBYTE[Dataddr];
283 1 len=XBYTE[Dataddr];
284 1 if(len==0) return;
285 1
286 1 for(i=0;i<len;i++)
287 1 {
288 2 *p=XBYTE[Dataddr];
289 2 //Printn(*p);
290 2 p++;
291 2 }
292 1
293 1 XBYTE[Cmdaddr]=0xF2; //清空缓冲区
294 1 }
295
296 void Writeep(char n, char len, char *p)
297 {
298 1 char i;
299 1 XBYTE[Cmdaddr]=n; //选择端点
300 1 i=XBYTE[Dataddr]; //选读一个字节
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 6
301 1
302 1 XBYTE[Cmdaddr]=0xF0; //写缓冲区的命令
303 1 XBYTE[Dataddr]=0;
304 1 XBYTE[Dataddr]=len;
305 1 for(i=0;i<len;i++)
306 1 {
307 2 XBYTE[Dataddr]=*p;
308 2 //SBUF=*p;Delay(10);
309 2 p++;
310 2 }
311 1
312 1 XBYTE[Cmdaddr]=0xFA; //使能缓冲区
313 1
314 1 }
315
316 void Answerep(char n)
317 {
318 1 XBYTE[Cmdaddr]=n;
319 1 XBYTE[Cmdaddr]=0xF1;
320 1 if(n==0) //若0收到setup包,writeep中的清除缓冲区命令是无效的;
321 1 XBYTE[Cmdaddr]=0xF2; //在此,应答了setup之后的清除命令才是有效的。
322 1 }
323
324 void Ep0out()
325 {
326 1 char epstate,lastreg; //端点状态 和 最后处理状态寄存器
327 1
328 1 XBYTE[Cmdaddr]=0x80;
329 1 epstate=XBYTE[Dataddr]; //读端点状态
330 1 //Printn(epstate);
331 1
332 1 XBYTE[Cmdaddr]=0x40;
333 1 lastreg=XBYTE[Dataddr]; //读最后处理状态
334 1 //Printn(lastreg);
335 1
336 1
337 1 if(lastreg&0x20) //如果收到的有Setup包
338 1 {
339 2
340 2 Flag|=Setup_flag; //Setup包的标志置1,表示有Setup包进入
341 2 Readep(0,&Device_request); //读端点0
*** WARNING C182 IN LINE 341 OF MAINUSB.C: pointer to different objects
342 2
343 2 Answerep(0);
344 2 Answerep(1); //应答Setup包,使得可以清除缓冲区(F2)和使能缓冲区(FA)
345 2 //SUSP=1;
346 2 }
347 1
348 1
349 1 }
350
351 void Ep0in()
352 {
353 1 Uchar lastreg;
354 1
355 1 XBYTE[Cmdaddr]=0x41;
356 1 lastreg=XBYTE[Dataddr]; //读最后处理状态,清除中断
357 1 //Printn(lastreg);
358 1
359 1 if(translen==0) Writeep(1,0,0);
360 1 /*if(Flag&Trans_flag)
361 1 return;
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 7
362 1
363 1 if(translen>16)
364 1 {
365 1 Writeep(1,16,transp);
366 1 translen-=16;
367 1 transp+=16;
368 1 }
369 1 else if(translen!=0)
370 1 {
371 1 Writeep(1,translen,transp);
372 1 translen=0;
373 1 }
374 1 else
375 1 {
376 1 Writeep(1,0,0);
377 1 Flag^=Trans_flag;
378 1 }*/
379 1 }
380
381 void Ep1out()
382 {
383 1
384 1 }
385 void Ep1in()
386 {
387 1
388 1 }
389 void Ep2out()
390 {
391 1
392 1 }
393 void Ep2in()
394 {
395 1
396 1 }
397 void Busreset()
398 {
399 1 TestL=0;Delay(1);TestL=1;
400 1 //SUSP=1;
401 1 }
402 void Suspch()
403 {
404 1
405 1 }
406
407
408
409 void Connect()
410 {
411 1 XBYTE[Cmdaddr]=0xF3;
412 1 XBYTE[Dataddr]=0x12;
413 1 XBYTE[Dataddr]=0x80;
414 1 }
415
416 void Disconnect()
417 {
418 1 XBYTE[Cmdaddr]=0xF3;
419 1 XBYTE[Dataddr]=0x02;
420 1 XBYTE[Dataddr]=0x80;
421 1 }
422
423 void Delay(int n)
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 8
424 {
425 1 int i;
426 1
427 1 for(;n>0;n--)
428 1 for(i=0;i<100;i++)
429 1 {;}
430 1 }
431
432 /****************************** INT *************************************/
433
434 void Serial() interrupt 4
435 {
436 1 char c;
437 1
438 1 DISABLE;
439 1 if(TI==1)
440 1 {
441 2 TI=0;
442 2
443 2 }
444 1
445 1 if(RI==1)
446 1 {
447 2 c=SBUF;
448 2 RI=0;
449 2
450 2 }
451 1
452 1 ENABLE;
453 1 }
454
455 void int0() interrupt 0
456 {
457 1 unsigned char ir1,ir2;
458 1
459 1 DISABLE;
460 1
461 1 Readintregister(&ir1,&ir2);
462 1
463 1 if(ir1&EP0_OUT) //假如端点0输出中断发生
464 1 {
465 2 Prints("0o\t");
466 2 Ep0out();
467 2 }
468 1
469 1 if(ir1&EP0_IN) //假如端点0输入中断发生
470 1 {
471 2 Prints("0i\t");
472 2 Ep0in();
473 2 }
474 1
475 1 if(ir1&EP1_OUT) //假如端点0输入中断发生
476 1 {
477 2 Prints("1o\t");
478 2 Ep1out();
479 2 }
480 1
481 1 if(ir1&EP1_IN) //假如端点0输入中断发生
482 1 {
483 2 Prints("1i\t");
484 2 Ep1in();
485 2 }
C51 COMPILER V7.06 MAINUSB 03/02/2006 11:53:59 PAGE 9
486 1
487 1 if(ir1&EP2_OUT) //假如端点0输入中断发生
488 1 {
489 2 Prints("2o\t");
490 2 Ep2out();
491 2 }
492 1
493 1 if(ir1&EP2_IN) //假如端点0输入中断发生
494 1 {
495 2 Prints("2i\t");
496 2 Ep2in();
497 2 }
498 1
499 1 if(ir1&BUS_RESET) //假如总线复位中断发生
500 1 {
501 2 Prints("br\t");
502 2 Busreset();
503 2 }
504 1
505 1 if(ir1&SUSPCH) //假如端点0输入中断发生
506 1 {
507 2 Prints("sc\t");
508 2 Suspch();
509 2 }
510 1
511 1 ENABLE;
512 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 883 ----
CONSTANT SIZE = 93 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 19
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 4 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -