📄 i2c.lst
字号:
320 2 break;
321 2 // 主发送器数据字节已发送收到NACK
322 2 // 从器件不应答发送STOP + START 重试
323 2 case SMB_MTDBNACK:
324 2 STO = 1; STA = 1;
325 2 break;
326 2 // 主发送器竞争失败
327 2 // 不应出现如果出现重新开始传输过程
328 2 case SMB_MTARBLOST:
329 2 STO = 1; STA = 1;
330 2 break;
331 2
332 2 // 主接收器从地址 + READ 已发送,收到ACK
333 2 case SMB_MRADDACK:
334 2 AA = 1; // 在应答周期ACK
335 2 if (!BYTE_NUMBER)
336 2 {
337 3 STO = 1; SM_BUSY = 0; // 释放SMBus
338 3 }
339 2 break;
340 2 // 主接收器从地址 + READ 已发送收到NACK
341 2 // 从器件不应答发送重复起始条件重试
342 2 case SMB_MRADDNACK:
343 2 STA = 1;
344 2 break;
345 2 // 收到数据字节ACK 已发送
346 2 // 该状态不应出现因为AA 已在前一状态被清0 如果出现发送停止条件
347 2 case SMB_MRDBACK:
348 2 if (BYTE_NUMBER)
349 2 {
350 3 *I2CDataBuff=revolve(SMB0DAT);
351 3 I2CDataBuff++;
352 3 BYTE_NUMBER--;
353 3 }
354 2 if (!BYTE_NUMBER) AA= 0;
355 2 break;
356 2 // 收到数据字节NACK 已发送
357 2 // 读操作已完成读数据寄存器后发送停止条件
358 2 case SMB_MRDBNACK:
359 2 STO = 1;
360 2 SM_BUSY = 0; // 释放SMBus
361 2 break;
362 2 // 在本应用中所有其它状态码没有意义通信复位
363 2 default:
364 2 STO = 1; // 通信复位
365 2 SM_BUSY = 0;
C51 COMPILER V6.23a I2C 12/20/2002 12:46:27 PAGE 7
366 2 break;
367 2 }
368 1 SI=0; // 清除中断标志
369 1 }
370 /*
371 {
372 switch (SMB0STA){ // Status code for the SMBus (SMB0STA register)
373 case SMB_START:
374 SMB0DAT = COMMAND; // COMMAND should hold slave address + R.
375 break;
376 case SMB_MTADDNACK:
377 STO = 1;
378 STA = 1;
379 break;
380 case SMB_RP_START:
381 // SMB0DAT = COMMAND; // COMMAND should hold slave address + R.
382 // STA = 0;
383 // break;
384 case SMB_MTADDACK:
385 case SMB_MTDBACK:
386 if (BYTE_NUMBER)
387 {
388 if (COMMAND & 0x01) // If R/W=READ,
389 {
390 STA = 1;
391 }
392 else
393 {
394 SMB0DAT = *I2CDataBuff; // If R/W=WRITE, load byte to write.
395 I2CDataBuff++;
396 BYTE_NUMBER--;
397 }
398 }
399 else
400 {
401 STO = 1;
402 SM_BUSY = 0; // Free SMBus
403 }
404 break;
405
406 // Master Transmitter: Data byte transmitted. NACK received.
407 // Slave not responding. Send STOP followed by START to try again.
408 case SMB_MTDBNACK:
409 STO = 1;
410 STA = 1;
411 break;
412
413 // Master Transmitter: Arbitration lost.
414 // Should not occur. If so, restart transfer.
415 case SMB_MTARBLOST:
416 STO = 1;
417 STA = 1;
418 break;
419
420 // Master Receiver: Slave address + READ transmitted. NACK received.
421 // Slave not responding. Send repeated start to try again.
422 case SMB_MRADDNACK:
423 STA = 1;
424 break;
425
426 // Data byte received. ACK transmitted.
427 // State should not occur because AA is set to zero in previous state.
C51 COMPILER V6.23a I2C 12/20/2002 12:46:27 PAGE 8
428 // Send STOP if state does occur.
429 case SMB_MRDBACK:
430 STO = 1;
431 SM_BUSY = 0;
432 break;
433
434 // Master Receiver: Slave address + READ transmitted. ACK received.
435 // Set to transmit NACK after next transfer since it will be the last (only) byte.
436 case SMB_MRADDACK:
437 // AA = 0; // NACK sent on acknowledge cycle.
438 // break;
439
440 // Data byte received. NACK transmitted.
441 // Read operation has completed. Read data register and send STOP.
442 case SMB_MRDBNACK:
443 if (BYTE_NUMBER)
444 {
445 if (COMMAND & 0x01) // If R/W=READ,
446 {
447 *I2CDataBuff=SMB0DAT;
448 I2CDataBuff++;
449 }
450 BYTE_NUMBER--;
451 }
452 else
453 {
454 STO = 1;
455 SM_BUSY = 0; // Free SMBus
456 }
457 break;
458 // All other status codes meaningless in this application. Reset communication.
459 default:
460 STO = 1; // Reset communication.
461 SM_BUSY = 0;
462 break;
463 }
464
465 SI=0; // clear interrupt flag
466 }
467 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 807 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 2
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -