📄 main.lst
字号:
245 2 //printf("call stander request handler\n");
246 2 (* StandardDeviceRequest[req])();
247 2 }
248 1 else if(type==0x40){
249 2 //printf("call vendor request handler\n");
250 2 (*VendorDeviceRequest[req])();
251 2 }else {
252 2 //printf("not stander request\n");
253 2 stall_ep0();
254 2 }
255 1 }
256
257
258 void delay(unsigned char delay_time)
259 {
260 1 for(;delay_time>0;delay_time--){}
261 1 }
262
263
264 void d12_disconnect_usb()
265 {
266 1 d12_set_mode(D12_NOLAZYCLOCK|D12_CLOCKRUNING,D12_CLKOUT_6M|D12_SETTOONE);
267 1 }
268
269
270 void d12_connect_usb()
271 {
272 1 DISABLE_ALL_INTERRUPT;
273 1 flag.value=0;
274 1 ENABLE_ALL_INTERRUPT;
275 1 d12_set_mode(D12_NOLAZYCLOCK|D12_CLOCKRUNING|D12_SOFTCONNECT,D12_CLKOUT_6M|D12_SETTOONE);
276 1 }
277
278
279 void d12_reconnect_usb()
280 {
281 1 d12_disconnect_usb();
282 1 delay(500);
283 1 d12_connect_usb();
284 1 }
285
286
287
288 void init()
289 {
290 1 P0=0xff;
291 1 P1=0xff;
292 1 P2=0xff;
293 1 P3=0xff;
294 1 D12_SUSPD=0;
295 1 /****************************/
296 1 //设置串口波特率T1方式2自动装初值,双倍波特率,使用11.0592M晶振,波特率为9600bps;
297 1 /****************************/
298 1 TMOD=0x21;
299 1 TH1=0xFA;
300 1 TL1=0xFA;
301 1 PCON=0x80;
302 1 TR1=1;
303 1 SCON=0x72;
C51 COMPILER V7.07 MAIN 06/04/2004 18:36:52 PAGE 6
304 1 /****************************/
305 1 //设置d12触发的中断为电平触发,低中断优先级
306 1 /****************************/
307 1 IT0=0;
308 1 ENABLE_EX0_INTERRUPT;
309 1 PX0=0;
310 1 //**************************/
311 1 //设置定时器T0
312 1 //**************************/
313 1 TH0=0x4C;
314 1 TL0=0x00;
315 1 ET0=1;
316 1 TR0=1;
317 1 //*************************/
318 1 //设置外部中断1
319 1 //*************************/
320 1 IT1=1;
321 1 ENABLE_EX1_INTERRUPT;
322 1
323 1 }
324
325 d12_interrupt() interrupt 0 /*外部中断0服务子程序*/
326
327 {
328 1 DISABLE_ALL_INTERRUPT;
329 1 d12_isr();
330 1 ENABLE_ALL_INTERRUPT;
331 1 }
332
333 timer0_interrupt() interrupt 1
334 {
335 1 DISABLE_ALL_INTERRUPT;
336 1 TL0=0x00;
337 1 TH0=0x4C;
338 1 flag.bits.timer=1;
339 1 ENABLE_ALL_INTERRUPT;
340 1
341 1 }
342
343 ex1_interrupt() interrupt 2
344 {
345 1 DISABLE_ALL_INTERRUPT;
346 1 flag.bits.showtime=1;
347 1 ENABLE_ALL_INTERRUPT;
348 1 }
349
350
351 void serial_send_to_endp1()
352 {
353 1 extern unsigned char idata s2u_len;
354 1 unsigned char c;
355 1 c=SBUF;
356 1 RI=0;
357 1 if(c=='\n'){
358 2 if(s2u_len==0)
359 2 return;
360 2 else{
361 3 d12_write_endpoint(3,serial_buf,s2u_len);
362 3 s2u_len=0;
363 3 }
364 2 }
365 1 else{
C51 COMPILER V7.07 MAIN 06/04/2004 18:36:52 PAGE 7
366 2 serial_buf[s2u_len++]=c;
367 2 if(serial_buf[0]=='T'&serial_buf[1]==' '&serial_buf[2]=='W'&s2u_len==12)
368 2 { time[0]=((serial_buf[4]-0x30)*10+(serial_buf[5]-0x30));
369 3 time[1]=((serial_buf[7]-0x30)*10+(serial_buf[8]-0x30));
370 3 time[2]=((serial_buf[10]-0x30)*10+(serial_buf[11]-0x30));
371 3 printf("serial set time command OK!\n");
372 3 s2u_len=0;
373 3 }
374 2 else if(serial_buf[0]=='T'&serial_buf[1]==' '&serial_buf[2]=='R'&s2u_len==3)
375 2 {
376 3 flag.bits.showtime=1;
377 3 s2u_len=0;
378 3 }
379 2 else if(s2u_len<16) return;
380 2 d12_write_endpoint(3,serial_buf,s2u_len);
381 2 s2u_len=0;
382 2 }
383 1 }
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
C51 COMPILER V7.07 MAIN 06/04/2004 18:36:52 PAGE 8
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1209 ----
CONSTANT SIZE = 199 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.07 MAIN 06/04/2004 18:36:52 PAGE 9
DATA SIZE = 33 4
IDATA SIZE = 117 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -