⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vdipnew.lst

📁 interfacing of vdip module with 89c52
💻 LST
📖 第 1 页 / 共 3 页
字号:
 194   1              {
 195   2              P3_3=0;
 196   2              }
 197   1              ES = 1;                                                      /* Enable serial interrupt */
 198   1              EA = 1;                                              /* Enable global interrupt */      
 199   1      }
 200          
 201          //*****************************************************************************************
 202          //  
 203          //  Read a byte out of the receive FIFO buffer
 204          //  
 205          //*****************************************************************************************
 206          void serial_readfromrxfifo(char * RX_FIFO_BYTE)
 207          {
 208   1              if (RX_FIFO_COUNT == 0)                                                                 // If FIFO is empty
 209   1              {
 210   2                      return;                                                                                         // Exit - no data to read
 211   2              }
 212   1              ES = 0;                                                      /* Enable serial interrupt */
 213   1              EA = 0;                                              /* Enable global interrupt */
 214   1              *RX_FIFO_BYTE = *RX_FIFO_TAIL_PTR++;                                    // Read a byte from the FIFO at position given by RX_FIFO_TAIL_P
             -TR and then increment tail pointer
 215   1              RX_FIFO_COUNT--;                                                                                // Decrement byte count 
 216   1              
 217   1              if (RX_FIFO_TAIL_PTR >= RX_FIFO_END)                                    // If tail pointer is greater than allocated FIFO end address
 218   1              {
 219   2                      RX_FIFO_TAIL_PTR = RX_FIFO_START;                                       // Wrap-around buffer to start address again (circuluar FIFO)
 220   2              }
 221   1              ES = 1;                                                      /* Enable serial interrupt */
 222   1              EA = 1;                                              /* Enable global interrupt */
 223   1              if ((RX_FIFO_COUNT < RX_FIFO_LOWER_LIMIT) && (FLOW_CONTROL_ENABLED == 0x01))    // If using flow control
 224   1              {
 225   2                      P3_3=0;
 226   2              }
 227   1      }
 228          ///////////////////////////////////////////////////////////////////////////////////////////
 229          ///////////////////////////////////////////////////////////////////////////////////////////
 230          //  
 231          //  VNC1L VDAP commands go here
 232          //  
 233          ///////////////////////////////////////////////////////////////////////////////////////////
 234          ///////////////////////////////////////////////////////////////////////////////////////////
 235          
 236          
C51 COMPILER V7.20   VDIPNEW                                                               02/23/2009 14:04:45 PAGE 5   

 237          //*****************************************************************************************
 238          //  
 239          //  Echo command using E - same for short command set or long command set
 240          //  
 241          //*****************************************************************************************
 242          void VNC1L_Big_E()
 243          {
 244   1              serial_sendbyte('E');                                                                   // Send 'E'
 245   1              serial_sendbyte(0x0D);                                                                  // Send carriage return
 246   1      }
 247          //*****************************************************************************************
 248          //  
 249          //  Echo command using e - same for short command set or long command set
 250          //  
 251          //*****************************************************************************************
 252          void VNC1L_Small_e()
 253          {
 254   1              serial_sendbyte('e');                                                                   // Send 'e'
 255   1              serial_sendbyte(0x0D);                                                                  // Send carriage return
 256   1      }
 257          //*****************************************************************************************
 258          //  
 259          //  Synchronise to the VNC1L using the e and E echo commands
 260          //  
 261          //*****************************************************************************************
 262          char VNC1L_Sync()
 263          {
 264   1              char LoopCount = 0x00;
 265   1              char FIFOByte1 = 0x00;
 266   1              char FIFOByte2 = 0x00;
 267   1              char Got_Big_E = 0x00;
 268   1              char Got_Small_e = 0x00;
 269   1      
 270   1              serial_resetrxfifo();                                                                   // Reset FIFO before synchronising
 271   1      
 272   1              while ((Got_Big_E == 0x00) && (LoopCount < 0xFF))
 273   1              {
 274   2                      VNC1L_Big_E();                                                                          // Send Big E echo
 275   2                      LoopCount++;                                                                            // Increment loop count
 276   2                      while (RX_FIFO_COUNT < 0x02)
 277   2                      {
 278   3                              delay_ms(100);                                                                  // Wait for 2 byte response
 279   3                      }                                               
 280   2      
 281   2                      if (RX_FIFO_COUNT > 0x00)                                                       // If data is available
 282   2                      {
 283   3                              while (RX_FIFO_COUNT > 0x02)                                    // Read all data available except last 2 bytes
 284   3                              {
 285   4                                      serial_readfromrxfifo(&FIFOByte1);                      // If more than 2 bytes available, read surplus ones
 286   4                                              
 287   4                              }
 288   3                              serial_readfromrxfifo(&FIFOByte1);                              // Check that remaining 2 bytes are 'E' and 0x0D
 289   3                              serial_readfromrxfifo(&FIFOByte2);
 290   3                              if ((FIFOByte1 == 'E') && (FIFOByte2 == 0x0D))
 291   3                              {
 292   4                                      Got_Big_E = 0x01;
 293   4                              }
 294   3                              else
 295   3                              {
 296   4                                      delay_ms(10);                                                           // Wait a bit and retry synchronisation
 297   4                              }
 298   3                      }       
C51 COMPILER V7.20   VDIPNEW                                                               02/23/2009 14:04:45 PAGE 6   

 299   2              }
 300   1              
 301   1              if (Got_Big_E == 0x01)
 302   1              {
 303   2                      VNC1L_Small_e();
 304   2                      while (RX_FIFO_COUNT < 0x02)
 305   2                      {
 306   3                              delay_ms(10);                                                                   // Wait for 2 byte response
 307   3                      }
 308   2                      serial_readfromrxfifo(&FIFOByte1);                                      // Check that remaining 2 bytes are 'e' and 0x0D
 309   2                      serial_readfromrxfifo(&FIFOByte2);
 310   2                      if ((FIFOByte1 == 'e') && (FIFOByte2 == 0x0D))
 311   2                      {
 312   3                              Got_Small_e = 0x01;                                                             // If small e found, then synchronised
 313   3                      }
 314   2                      
 315   2              }
 316   1              
 317   1              return Got_Small_e;
 318   1      
 319   1      }
 320          
 321          
 322          
 323          
 324          
 325          
 326          //*****************************************************************************************
 327          //  
 328          //  Look for disk - assumes long command set being used
 329          //  
 330          //*****************************************************************************************
 331          char VNC1L_FindDisk()                                                                           // Return 0x01 if disk is found, else return 0x00
 332          {
 333   1              char FIFOByte1 = 0x00;
 334   1              char FIFOByte2 = 0x00;
 335   1              char FIFOByte3 = 0x00;
 336   1              char FIFOByte4 = 0x00;
 337   1              char FIFOByte5 = 0x00;
 338   1      
 339   1              serial_sendbyte(0x0D);                                                                  // Send carriage return
 340   1              while (RX_FIFO_COUNT < 0x05);                                                   // Wait until at least 5 bytes in the Rx FIFO
 341   1              serial_readfromrxfifo(&FIFOByte1);                                              // Read bytes out of Rx FIFO
 342   1              serial_readfromrxfifo(&FIFOByte2);
 343   1              serial_readfromrxfifo(&FIFOByte3);
 344   1              serial_readfromrxfifo(&FIFOByte4);
 345   1              serial_readfromrxfifo(&FIFOByte5);
 346   1              
 347   1              if ((FIFOByte1 == 'D') && (FIFOByte2 == ':') && (FIFOByte3 == 0x5C) && (FIFOByte4 == '>') && (FIFOByte5 =
             -= 0x0D)) // Check for prompt
 348   1              {
 349   2                      return 0x01;                                                                            // If prompt found, then return disk available
 350   2              }
 351   1              else
 352   1              {
 353   2                      while (RX_FIFO_COUNT > 0x00)
 354   2                      {
 355   3                              serial_readfromrxfifo(&FIFOByte1);                              // Read any additional bytes out of the FIFO
 356   3                      }
 357   2                      return 0x00;                                                                            // Return no disk available
 358   2              }
 359   1              
C51 COMPILER V7.20   VDIPNEW                                                               02/23/2009 14:04:45 PAGE 7   

 360   1      }
 361          
 362          
 363          
 364          
 365          
 366          //*****************************************************************************************
 367          //  
 368          //  Open file for write command (OPW) using long command set
 369          //  
 370          //*****************************************************************************************
 371          void VNC1L_OpenFile()
 372          {
 373   1              char FIFOByte = 0x00;
 374   1      
 375   1              serial_sendbyte('O');                                                                   // Send 'O'
 376   1              serial_sendbyte('P');                                                                   // Send 'P'
 377   1              serial_sendbyte('W');                                                                   // Send 'W'
 378   1              serial_sendbyte(' ');                                                                   // Send ' '
 379   1              serial_sendbyte('h');                                                                   // Send 'h'
 380   1              serial_sendbyte('e');                                                                   // Send 'e'
 381   1              serial_sendbyte('l');                                                                   // Send 'l'
 382   1              serial_sendbyte('l');                                                                   // Send 'l'
 383   1              serial_sendbyte('o');                                                                   // Send 'o'
 384   1              serial_sendbyte('.');                                                                   // Send '.'
 385   1              serial_sendbyte('t');                                                                   // Send 't'
 386   1              serial_sendbyte('x');                                                                   // Send 'x'
 387   1              serial_sendbyte('t');                                                                   // Send 't'
 388   1              serial_sendbyte(0x0D);                                                                  // Send carriage return
 389   1              while (RX_FIFO_COUNT < 0x05)                                                    // Wait until at least 5 bytes in the Rx FIFO
 390   1              {
 391   2                      delay_ms(10);                                                                           // Wait for 5 byte response("D:\>" + 0x0D)
 392   2              }
 393   1              while (RX_FIFO_COUNT > 0x00)
 394   1              {
 395   2                      serial_readfromrxfifo(&FIFOByte);                                       // Read response bytes form FIFO
 396   2              }
 397   1      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -