driver.lst
来自「用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245」· LST 代码 · 共 1,470 行 · 第 1/5 页
LST
1,470 行
278 3 TR1=1; //启动定时器1
279 3 }
280 2 }
281 1 else
282 1 {//timer 2
283 2 ET2=0;
284 2 TR2=0;
285 2 if(mode==1 || mode==3)
286 2 {
287 3 // tp = OSC/32;
288 3 // value = (unsigned int)(65536 - (tp/baudrate));
289 3 value = (unsigned int)(65536 - (Timer2Baudrate/baudrate));
290 3 RCAP2H = value>>8;
291 3 RCAP2L = value;
292 3 PCON &= 0xBF; //SMOD1 = 0,Only Bps=4800 or 9600 or 19200
293 3 T2MOD=1;
294 3 TR2 = 1; //启动定时器2
295 3 }
296 2 }
297 1 if(ch==0)
298 1 {
299 2 SCON = sconx | 0x10 ; //SET SM0,SM1,SM2;REN=1;TI=0;RI=0;TB8=0;RB8=0
300 2 // ES = 1; //开UART0中断
301 2 }
302 1 else
303 1 {
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 6
304 2 SCON2 = sconx | 0x10 ; //SET SM0,SM1,SM2;REN=1;TI=0;RI=0;TB8=0;RB8=0
305 2 // IEA |= 0x10; //开UART1中断,ES2 = 1;
306 2 }
307 1 }
308
309
310
311 void UartTxd(uint Len,uchar *str) //pc用 串口 uartc
312 {
313 1 COM1CS;
314 1 UARTB; //davey
315 1 //UARTC;
316 1 UART1_Mod1_Timer1_9600;
317 1 IEA &= 0xEF; //关UART2中断,ES2 = 0;
318 1 TxdNum=0;
319 1 TxdLen=Len;
320 1 while(TxdNum<TxdLen)
321 1 {
322 2 SBUF2 = str[TxdNum];
323 2 while((SCON2 & 0x02)==0);
324 2 SCON2 &= 0xFC;
325 2 TxdNum++;
326 2 }
327 1 // TR1=0;
328 1 }
329
330
331 void UartRxd(uint Len,uchar *str) //pc用 串口 uartc
332 {
333 1 COM1CS;
334 1 UARTB; //davey
335 1 //UARTC;
336 1 UART1_Mod1_Timer1_9600;
337 1 IEA &= 0xEF; //关UART2中断,ES2 = 0;
338 1 RxdNum=0;
339 1 RxdLen=Len;
340 1 while(RxdNum<RxdLen)
341 1 {
342 2 while((SCON2 & 0x01)==0);
343 2 SCON2 &= 0xFC;
344 2 str[RxdNum]=SBUF2;
345 2 RxdNum++;
346 2 //if(RxdNum==1)RxdLen=str[0]+1;
347 2 }
348 1 // TR1=0;
349 1 }
350
351
352
353 /*void ScanerIni() //条码扫描用 串口 uartA
354 {
355 UART1_Mod1_Timer1_9600;
356 UARTA;
357 COM1CS;
358 RxdNum=200;
359 RxdLen=215;
360 RxdFlg=0;
361 IEA |= 0x10; //开UART1中断,ES2 = 1;
362 }
363
364 */
365
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 7
366
367 #if RS485
void RS485Txd(uint Len,uchar *str) //RS485用 串口发送 uartD
{
UART1CS;
UARTD;
UART1_Mod1_Timer1_9600;
IEA &= 0xEF; //关UART2中断,ES2 = 0;
TxdNum=0;
TxdLen=Len;
while(TxdNum<TxdLen)
{
SBUF2 = str[TxdNum];
while((SCON2 & 0x02)==0);
SCON2 &= 0xFC;
TxdNum++;
}
}
void RS485Rxd(uint Len,uchar *str) //RS485用 串口接受 uartD
{
UART1CS;
UARTA;
UART1_Mod1_Timer1_9600;
IEA &= 0xEF; //关UART2中断,ES2 = 0;
RxdNum=0;
RxdLen=Len;
while(RxdNum<RxdLen)
{
while((SCON2 & 0x01)==0);
SCON2 &= 0xFC;
str[RxdNum]=SBUF2;
RxdNum++;
//if(RxdNum==1)RxdLen=str[0]+1;
}
}
#endif
404
405
406 //手写板用 uartB 未写
407
408 //---------------------------Uart End----------------------------------------------------
409
410
411
412
413
414
415
416 //---------------------------I2C Begin---------------------------------------------------------------
417
418 //************************************************************8
419 //* I2C 总线 驱动*
420 //**************************************************************
421 void I2cDelay()
422 {
423 1 uint i=1500; //ATMEL:500;ST:1500
424 1 while(--i);
425 1 }
426
427
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 8
428 void SendAck(void)
429 {
430 1 I2CSDA=0;
431 1 I2CSCK=1;
432 1 _nop_();
433 1 _nop_();
434 1 _nop_();
435 1 _nop_();
436 1 I2CSCK=0;
437 1 _nop_();
438 1 _nop_();
439 1 _nop_();
440 1 _nop_();
441 1 I2CSDA=1;
442 1 }
443
444
445 //应答信号:
446 //调用方式:SendNotAck();
447 void SendNotAck(void)
448 {
449 1 I2CSDA=1;
450 1 I2CSCK=1;
451 1 _nop_();
452 1 _nop_();
453 1 _nop_();
454 1 _nop_();
455 1 I2CSCK=0;
456 1 }
457
458 //----------------------------------------------
459 void I2cStart(void)
460 {
461 1 I2CSCK=0;
462 1 I2CSDA=1;
463 1 I2CSCK=1;
464 1 _nop_();
465 1 _nop_();
466 1 _nop_();
467 1 _nop_();
468 1 I2CSDA=0;
469 1 _nop_();
470 1 _nop_();
471 1 _nop_();
472 1 _nop_();
473 1 I2CSCK=0;
474 1 I2CSDA=1;
475 1 }
476
477
478 void I2cStop(void)
479 {
480 1 I2CSCK=0;
481 1 I2CSDA=0;
482 1 I2CSCK=1;
483 1 _nop_();
484 1 _nop_();
485 1 _nop_();
486 1 _nop_();
487 1 I2CSDA=1;
488 1 _nop_();
489 1 _nop_();
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 9
490 1 _nop_();
491 1 _nop_();
492 1 I2CSCK=0;
493 1 }
494
495
496 bit WaitAck(void)
497 {
498 1 uchar errtime=255;//因故障接收方无ACK,超时值为255。
499 1
500 1 I2CSDA=1;
501 1 I2CSCK=1;
502 1 while(I2CSDA)
503 1 {
504 2 errtime--;
505 2 if(!errtime)
506 2 {
507 3 I2cStop();
508 3 return 0;
509 3 }
510 2 }
511 1 I2CSCK=0;
512 1 return 1;
513 1 }
514
515
516 void I2cSendByte(uchar dat)
517 {
518 1 uchar i=8;
519 1 while (i--)
520 1 {
521 2 I2CSCK=0;
522 2 I2CSDA=(bit)(dat&0x80);
523 2 dat<<=1;
524 2 _nop_();
525 2 _nop_();
526 2 _nop_();
527 2 _nop_();
528 2 I2CSCK=1;
529 2 _nop_();
530 2 _nop_();
531 2 _nop_();
532 2 _nop_();
533 2 _nop_();
534 2 }
535 1 I2CSCK=0;
536 1 }
537
538
539
540 //接收一个字节
541 //调用方式:I2C_Receive_Byte();从SDA总线上读取一个字节的数据
542 uchar I2cReceiveByte(void)
543 {
544 1 uchar i=8;
545 1 uchar dat=0;
546 1 // I2CSDA=1;
547 1 while (i--)
548 1 {
549 2 dat<<=1;
550 2 I2CSCK=1;
551 2 _nop_();
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 10
552 2 _nop_();
553 2 _nop_();
554 2 _nop_();
555 2 dat|=I2CSDA;
556 2 _nop_();
557 2 _nop_();
558 2 _nop_();
559 2 _nop_();
560 2 I2CSCK=0;
561 2 _nop_();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?