Urgent!

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;

)

 
HI

Pour autant que je me souviens de la 8952 n'a pas esclave interface IC matériel.
I2C interface due to complicated trimming requirement for the slave

Il car il sera plus difficile ou à proximité de encourues pour écrire un esclave
I2C logiciels d'interface due à l'exigence de taille compliqué pour l'esclave

rapide seul contrôleur (comme le STM32 ou PIC24 ou PIC32 ou AVR) peut émuler un logiciel I2C esclave

Tous les meilleurs

Bobi
Le spécialiste de microcontrôleur
 
Eh bien, il pourrait être fait avec les interruptions ...en utilisant tous les deux ...
Alors, faut choisir celui qui sera le maître, et que l'on sera l'esclave ...

présentant les deux en tant que maître / esclave pouvait être très difficile (l'étoffe d'arbitrage, etc ...)

 
Salut,

Si vous avez intégré le protocole SPI dans votre microcontrôleur que cela fonctionnera comme un maître et esclave.
Il suffit de cocher pour cela.

Cordialement
Chanchal

 

Welcome to EDABoard.com

Sponsor

Back
Top