📄 vdipnew.lst
字号:
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 + -