I2C (TWI) Schnittstelle Emulator – 8051 Mikrocontroller AT89C5131A

I2C (TWI) Schnittstelle Emulator - 8051 Mikrocontroller AT89C5131A

Diese API emuliert eine I2C (TWI) Schnittstelle und ermöglicht das Senden und Empfangen der Daten über die I2C (TWI) Schnittstelle eines 8051 AT89C5131A Mikrocontrollers.
  • Programmiersprache: ANSI C
  • Mikrocontroller: AT89C5131A - 8051 Mikrocontroller
  • IDE: µVision 4
  • Compiler: Cx51 V9.5

API Beschreibung

Diese API emuliert eine I2C (TWI) Schnittstelle und ermöglicht das Senden und Empfangen der Daten über die I2C (TWI) Schnittstelle eines 8051 AT89C5131A Mikrocontrollers.
Programmiersprache: ANSI C
Mikrocontroller: AT89C5131A - 8051 MK
IDE: µVision 4
Compiler: Cx51 V9.5


Dateien

  • emuI2C.c - Datei mit C-Funktionen
  • emuI2C.h - Header Datei
  • emuI2C_config.h - Konfiguration Datei

Einstellungen der Port Pins für SCL und SDA

Standartmäßig sind die SCL Leitung dem Port 4_0 und die SDA Leitung dem Port 4_1 zugewiesen. Diese Einstellung ist vollkompatibel mit den Steckplätzen der stack2Learn Mikrokontroller Boards.

Es ist möglich die Port Pins für SDA und SCL Leitungen zu ändern. Um das zu machen öffnen Sie die emuI2C_config.h Datei. Suchen Sie die Zeilen mit dem folgenden Code:
//--Konfiguration-----------------------------------------------------------
// I2C Parameter
// Standard Werte sind:
// scl = P4^0;
// sda = P4^1;
sbit scl = P4^0;
sbit sda = P4^1;
//------Ende Konfiguration---------------------------------------------------
Ändern Sie je nach Bedarf die Port Pins für SCL und SDA Signale um.

Beispiel

Die SCL Leitung soll auf dem Port 1 Pin 2 liegen und SDA Leitung am Port 2 Pin 7. Der Code soll wie folgt geändert werden:
sbit scl = P1^2;
sbit sda = P2^7;

Funktions-Deklarationen

// Sende Daten ueber I2C
errorCodeEmuI2C_t EmuI2C_SendData(unsigned char* , unsigned char );

// Empfange Daten ueber I2C
errorCodeEmuI2C_t EmuI2C_ReceiveData(unsigned char* , unsigned char );

Konstanten

Error Code errorCodeEmuI2C_t
// Error Code der I2C Schnittstelle
typedef enum _errorCodeEmuI2C {
EMU_I2C_SUCCESS = 0,
EMU_I2C_BUSY = 1,
EMU_I2C_TRANSMISSION_FAIL = 2
} errorCodeEmuI2C_t;

Funktionen

errorCodeEmuI2C_tEmuI2C_SendData (unsigned char* pData, unsigned char size);

Diese Funktion sendet ein Array über die I2C (TWI) Schnittstelle.

An diese Funktion wird ein Array "pData" mit Daten übergeben. Die Slave Adresse des I2C Bausteins soll in dem Arrayindex [0] stehen. Die weiteren Daten zum Senden stehen in anderen Indizes des Arrays.

Die Variable "size" teilt der Funktion die Anzahl der Bytes mit, die gesendet werden müssen.erden müssen.

Funktionstyp
errorCodeEmuI2C_t - gibt den Status der Übertragung wieder. Mögliche Werte sind:

Konstanten Name Wert Beschreibung
EMU_I2C_SUCCESS 0x00 Übertragung erfolgreich
EMU_I2C_BUSY 0x01 Unbekannter Fehler
EMU_I2C_TRANSMISSION_FAIL 0x02 Übertragung fehlgeschlagen

Übergabeparameter
unsigned char* pData - Array mit Daten zum Senden

unsigned char size - Anzahl der Bytes zum Senden

errorCodeEmuI2C_t EmuI2C_ReceiveData (unsigned char* pData, unsigned char size);

Diese Funktion empfängt Daten über die I2C (TWI) Schnittstelle.

An diese Funktion wird ein Array "pData" mit Daten übergeben. Die Slave Adresse + 1 (R/W - Bit) des I2C Bausteins soll in dem Arrayindex [0] stehen.

Die Variable "size" teilt der Funktion die Anzahl der Bytes mit, die empfangen werden müssen. Die empfangenen Bytes werden in den gleichen Array "pData"ab Index [0] gespeichert.

Funktionstyp
errorCodeEmuI2C_t - gibt den Status der Übertragung wieder. Mögliche Werte sind:

Konstanten Name Wert Beschreibung
EMU_I2C_SUCCESS 0x00 Übertragung erfolgreich
EMU_I2C_BUSY 0x01 Unbekannter Fehler
EMU_I2C_TRANSMISSION_FAIL 0x02 Übertragung fehlgeschlagen

Übergabeparameter
unsigned char* pData - Array für empfangene Daten

unsigned char size - Anzahl der Bytes zum Senden

Beispiel

#include "emuI2C.h" // Emulator I2C Header

#define ADC_ADRESS	0xAA


void main (void){
unsigned char test[3] ={0x00};

// sende Daten ueber I2C
test[0] = ADC_ADRESS; // Slave Adresse
test[1] = 0x01; // Datenbyte 1
test[2] = 0x02; // Datenbyte 2
EmuI2C_SendData (test, 3);	// Daten senden via I2C

// empfange Daten ueber I2C
test[0] = ADC_ADRESS + 1;	// Slave Adresse
EmuI2C_ReceiveData(test, 3); // Daten empfangen via I2C

while(1);
}