B
balaece07
Guest
Bonjour à tous,89s52[/b] Microcontroller Using I2C..I tried So many Times....But Didnt get the output..
BALA here.I j'essaie de communiquer Deux
89s52 [/ b] Utilisation de micro-I2C .. J'ai essayé tant de fois .... mais on n'a pas obtenir la sortie ..
Ici, je suis y compris mon code .. Pls trouver l'erreur et à m'aider ..
Tahnks à l'avance
code:
# Include <AT898252.h>
# Include <intrins.h>
unsigned char readI2c (bit ACK_Bit);
void writei2c (unsigned char W_Byte);
void writemc (char unsigned addr, unsigned char data1);
void readmc (char unsigned addr);
sbit SDA = 1 ^ P0; / / Connexion à la broche SDA (données)
sbit SCL = ^ P0 0; / / Connexion à la broche SCL (horloge)
retard ();
void main ()
(
writemc (0x24, 0x55);
readmc (0x24);
)
//-------------------------------
/ / Start I2C
//-------------------------------
Premier vide (void)
(
SDA = 1;
SCL = 1;
_nop_ (); _nop_ ();
SDA = 0;
_nop_ (); _nop_ ();
SCL = 0;
_nop_ (); _nop_ ();
)
//-------------------------------
/ / Arrêt I2C
//-------------------------------
void Stop (void)
(
SDA = 0;
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SDA = 1;
)
//-------------------------------
/ / Écriture I2C
//-------------------------------
void writei2c (unsigned char de données)
(
unsigned char i;
for (i = 0; i <8; i )
(
SDA = (Data & 0x80)?01h00;
SCL = 1;
SCL = 0;
Data <<= 1;
retard ();
)
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
)
//-------------------------------
/ / Lire I2C
//-------------------------------
unsigned char readI2c (bit ACK_Bit)
(
unsigned char de données = 0;
unsigned char i;
SDA = 1;
for (i = 0; i <8; i )
(
SCL = 1;
Data <<= 1;
= Données (Data | SDA);
SCL = 0;
_nop_ ();
retard ()
if (ACK_Bit == 1)
SDA = 0; / / Envoyer ACK
d'autre
SDA = 1; / / ne pas envoyer ACK
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
renvoyer des données;
)
void writemc (char unsigned addr, unsigned char data1)
(
Start ();
writei2c (0xC0);
writei2c (addr);
writei2c (data1);
Stop ();
)
void readmc (unsigned char addr1)
(
unsigned char rdata;
Start ();
writei2c (0xC0);
writei2c (addr1);
Start ();
writei2c (0xC1);
rdata = readI2c ();
Stop ();
P2 = rdata;
)
retard () / * Une seconde de retard * /
(
T2MOD = 0x03;
= TL2 0xFC;
TH2 = 0xFE;
TR2 = 1;
while (TF2! = 1);
TR2 = 0;
TF2 = 0;
)
BALA here.I j'essaie de communiquer Deux
89s52 [/ b] Utilisation de micro-I2C .. J'ai essayé tant de fois .... mais on n'a pas obtenir la sortie ..
Ici, je suis y compris mon code .. Pls trouver l'erreur et à m'aider ..
Tahnks à l'avance
code:
# Include <AT898252.h>
# Include <intrins.h>
unsigned char readI2c (bit ACK_Bit);
void writei2c (unsigned char W_Byte);
void writemc (char unsigned addr, unsigned char data1);
void readmc (char unsigned addr);
sbit SDA = 1 ^ P0; / / Connexion à la broche SDA (données)
sbit SCL = ^ P0 0; / / Connexion à la broche SCL (horloge)
retard ();
void main ()
(
writemc (0x24, 0x55);
readmc (0x24);
)
//-------------------------------
/ / Start I2C
//-------------------------------
Premier vide (void)
(
SDA = 1;
SCL = 1;
_nop_ (); _nop_ ();
SDA = 0;
_nop_ (); _nop_ ();
SCL = 0;
_nop_ (); _nop_ ();
)
//-------------------------------
/ / Arrêt I2C
//-------------------------------
void Stop (void)
(
SDA = 0;
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SDA = 1;
)
//-------------------------------
/ / Écriture I2C
//-------------------------------
void writei2c (unsigned char de données)
(
unsigned char i;
for (i = 0; i <8; i )
(
SDA = (Data & 0x80)?01h00;
SCL = 1;
SCL = 0;
Data <<= 1;
retard ();
)
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
)
//-------------------------------
/ / Lire I2C
//-------------------------------
unsigned char readI2c (bit ACK_Bit)
(
unsigned char de données = 0;
unsigned char i;
SDA = 1;
for (i = 0; i <8; i )
(
SCL = 1;
Data <<= 1;
= Données (Data | SDA);
SCL = 0;
_nop_ ();
retard ()
if (ACK_Bit == 1)
SDA = 0; / / Envoyer ACK
d'autre
SDA = 1; / / ne pas envoyer ACK
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
renvoyer des données;
)
void writemc (char unsigned addr, unsigned char data1)
(
Start ();
writei2c (0xC0);
writei2c (addr);
writei2c (data1);
Stop ();
)
void readmc (unsigned char addr1)
(
unsigned char rdata;
Start ();
writei2c (0xC0);
writei2c (addr1);
Start ();
writei2c (0xC1);
rdata = readI2c ();
Stop ();
P2 = rdata;
)
retard () / * Une seconde de retard * /
(
T2MOD = 0x03;
= TL2 0xFC;
TH2 = 0xFE;
TR2 = 1;
while (TF2! = 1);
TR2 = 0;
TF2 = 0;
)