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 + -
显示快捷键?