Hur man gränssnitt I2C-EEPROM med 8051 Microcontroller

Prova Vårt Instrument För Att Eliminera Problem





Termen I2C eller IIC-förkortning är en inter integrerad krets och det kallas när jag kvadrerade C. I2C är en seriell datorbuss , som uppfanns av NXP-halvledare tidigare heter den som Philips halvledare. I2C-bussen används för att ansluta periferintegrerade kretsar med låg hastighet till mikrokontroller och processorer . För att implementera I2C-protokollet 2006 krävs ingen licensavgift. Men avgift krävs för att få I2C-slavadress tilldelad av NXP-halvledare.

Vissa konkurrenter som Texas Instruments, Siemens AG, NEC, Motorola, Intersil och STMicroelectronics har meddelat väl lämpade I²C-produkter till marknaden i mitten av 1990-talet. År 1995 definieras SMBus av Intel, det vill säga en undergrupp av I²C som anger att protokollen är strängare. Huvudsyftet med SMBus är att stödja interoperabilitet och robusthet. Därför innehåller nuvarande I²C-system regler och policyer från SMBus, ibland stöder det både I2C och SMBus med minimal omkonfigurering.




I2C-buss

I2C-buss

Gränssnitt I2C Bus-EEPROM med 8051 mikrokontroller

Vad är I2C-buss

I2c-bussen använder två dubbelriktade öppna dräneringslinjer som SDA (seriell dataledning) och SCl (seriell klocklinje) och dessa dras upp med motstånd. I2C-bussen tillåter en huvudenhet att starta kommunikation med en slavenhet. Data byts ut mellan dessa två enheter. Typiska spänningar som används är + 3,3 V eller + 5 V, även om system med extra spänningar är tillåtna.



I2C-gränssnitt

I2C-gränssnitt

EEPROM

Elektriskt raderbar programmerbar ROM (EEPROM) är en användarmodifierbar ROM som kan tas bort och omprogrammeras ofta genom tillämpning av högre än den normala elektriska spänningen. En EEPROM är ett slags icke-flyktigt minne som används i elektroniska enheter som datorer för att lagra små mängder data som ska sparas när strömmen kopplas bort.

8051 Slicker Board

8051 Slicker-kortet är speciellt utformat för att hjälpa tekniska studenter i området inbyggda system . Detta kit är utformat på ett sådant sätt att alla funktioner i 8051 mikrokontroller kommer eventuellt att användas av studenterna. Detta anslagstavla stöder ISP (In System Programming) som görs via den seriella porten. Denna sats och 8051 från NXP föreslås för att underlätta felsökningen av många konstruktioner kring hastighet 8- bit mikrokontroller.

Gränssnitt I2C - EEPROM

Följande bild visar gränssnitt mellan I2C-EEPROM och 8051 mikrokontroller. Här är I2C ett master-slave-protokoll som innehåller data tillsammans med klockpuls. Vanligtvis bytte masterenheten klocklinjen, SCL. Den här linjen beställer datatimingen som överförs på I2C-bussen. Om inte klockan körs överförs inga data. Alla slavar styrs av samma klocka, SCL.


Gränssnitt I2C - EEPROM

Gränssnitt I2C - EEPROM

I2C-buss stöder de olika enheterna där varje enhet identifieras av en unik adress oavsett om det är en LCD-drivrutin, ett minneskort, en mikrokontroller eller gränssnitt mellan tangentbordet som kan fungera som Tx eller Rx beror på hur enheten fungerar. Styrenheten är utformad för att styra EEPROM-enheten via I2C-protokollet. Här fungerar han I2C-protokollet som en masterenhet och reglerar EEPROM och det fungerar som en slav. R / W-operationerna är skickliga genom att överföra en uppsättning styrsignaler innefattande adressen OCH / ELLER databussen. Dessa signaler bör följas med lämpliga klocksignaler

Gränssnitt I2C Bus-EEPROM med 8051 mikrokontroller

Om du vill läsa, skriva och radera EEPROM med hjälp av I2C-bussen i 8051-anslagstavlan. Gränssnitt mellan I2 Bus-EEPROM och 8051 mikrokontroller är mycket enkel . Funktionen för denna gränssnitt är att skicka en signal som WRITE, följt av data och adressbuss. I den här operationen används EEPROM för att lagra data. I 8051-satsen regleras två antal EEPROM-linjer av drivrutiner som stöds av I2C. SCL och SDA är anslutna till den I2C-baserade seriella EEPROM IC.

Gränssnitt I2C Bus-EEPROM med 8051 mikrokontroller

Gränssnitt I2C Bus-EEPROM med 8051 mikrokontroller

Genom att använda SDA- och SCL I2C-linjer görs läs- och skrivoperationerna för EEPROM i 8051 Slicker Kit

Gränssnittet mellan I2C är så enkelt och i varje enskild data läs / skriv i EEPROM. Fördröjningen beror på kompilatorn hur det förbättrar slingorna så snart du gör ändringar i valen fördröjningen varierar.

Källkod för I2C-gränssnitt

#omfatta
#omfatta
#omfatta

#define ACK 1
#define NO_ACK 0

osignerad char i
osignerad char EData [5]
osignerad char Data
ogiltigt InitSerial (ogiltigt)
ogiltiga DelayMs (osignerad int)
ogiltigt WriteI2C (osignerad karaktär)
ogiltig Start (ogiltig)
ogiltigt Stopp (ogiltigt)
ogiltigt ReadBYTE (osignerad int)
ogiltig WriteBYTE (osignerad int)
osignerad röd ReadI2C (bit)

sbit SCL = P2 ^ 0 // anslut till SCL-stift (klocka)
sbit SDA = P2 ^ 1 // anslut till SDA-stift (Data)

// ——————————————
// Huvudprogram
// ——————————————
ogiltig huvud (ogiltig)
{
InitSerial () // Initiera seriell port
putchar (0x0C) // rensa hyper terminal
DelayMs (5)
SkrivBYTE (0x0000)
WriteI2C (‘A’) // Skriv data här
SkrivI2C (‘B’)
WriteI2C (‘C’)
SkrivI2C (‘D’)
SkrivI2C (‘E’)
SkrivI2C (‘F’)
Sluta()
DelayMs (10)

ReadBYTE (0x0000)
EData [0] = ReadI2C (NO_ACK)
EData [1] = ReadI2C (NO_ACK)
EData [2] = ReadI2C (NO_ACK)
EData [3] = ReadI2C (NO_ACK)
EData [4] = ReadI2C (NO_ACK)
EData [5] = ReadI2C (NO_ACK)

för (i = 0i<6i++)
{
printf (“värde =% c n”, EData [i]) // visa data * /
DelayMs (100)
}

medan (1)
}

// ——————————————
// Initiera seriell port
// ——————————————
ogiltigt InitSerial (ogiltigt)
{
SCON = 0x52 // konfigurera seriell portkontroll
TMOD = 0x20 // hårdvara (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 på
}

// ———————————-
// starta I2C
// ———————————-
ogiltig Start (ogiltig)
{
SDA = 1
SCL = 1
_knapp _ () _ nop_ ()
SDA = 0
_knapp _ () _ nop_ ()
SCL = 0
_knapp _ () _ nop_ ()
}

// ————————————-
// stoppa I2C
// ———————————-
ogiltigt Stopp (ogiltigt)
{
SDA = 0
_knapp _ () _ nop_ ()
SCL = 1
_knapp _ () _ nop_ ()
SDA = 1
}

// ———————————-
// Skriv I2C
// ———————————-
ogiltig WriteI2C (osignerad char Data)
{

för (i = 0i<8i++)
{
SDA = (Data & 0x80)? 1: 0
SCL = 1 SCL = 0
Data<<=1
}

SCL = 1
_knapp _ () _ nop_ ()
SCL = 0

}

// ———————————-
// Läs I2C
// ————————————-
osignerad röd ReadI2C (bit ACK_Bit)
{

Start()
SkrivI2C (0xA1)

SDA = 1
för (i = 0i<8i++)

SCL = 1
Data<<= 1
Datum = (Datum

om (ACK_Bit == 1)
SDA = 0 // Skicka ACK
annan
SDA = 1 // Skicka NO ACK

_knapp _ () _ nop_ ()
SCL = 1
_knapp _ () _ nop_ ()
SCL = 0
Sluta()
returnera data
}

// ————————————-
// Läs 1 byteformulär I2C
// ———————————-
ogiltig ReadBYTE (osignerad int Addr)
{
Start()
SkrivI2C (0xA0)
WriteI2C ((osignerad karaktär) (Addr >> 8) & 0xFF)
WriteI2C ((osignerad karaktär) Addr & 0xFF)
}

// ———————————-
// Skriv 1 byte till I2C
// ————————————-
ogiltig WriteBYTE (osignerad int Addr)
{
Start()
SkrivI2C (0xA0)
WriteI2C ((osignerad karaktär) (Addr >> 8) & 0xFF) // skicka adress hög
WriteI2C ((osignerad karaktär) Addr & 0xFF) // skicka adress låg
}

// ——————————————
// Fördröja mS-funktionen
// ——————————————
ogiltiga DelayMs (osignerad inträkning)
{// mSec Delay 11.0592 Mhz
osignerad int i // Keil v7.5a
medan (räkna)
{
i = 115
medan (i> 0) i–
räkna-
}
}

Således handlar det här om implementeringen av I2C-gränssnittet. Vi hoppas att du har fått en bättre förståelse för detta koncept. Dessutom är alla frågor angående detta koncept eller gränssnittsanordningar vänligen ge dina värdefulla förslag genom att kommentera i kommentarfältet nedan.