B
balaece07
Guest
Hi everyone,89s52[/b] Microcontroller Using I2C..I tried So many Times....But Didnt get the output..
BALA Here.I staram się przekazać Dwa
89s52 [/ b] Microcontroller Korzystanie I2C .. próbowałem tyle razy .... Ale nie zrobił dostać wyjścia ..
Oto jestem w tym mój kod .. Pls znaleźć błąd i Pomóż mi ..
Tahnks w Advance
Kod:
# include <AT898252.h>
# include <intrins.h>
unsigned char readI2c (bit ACK_Bit);
void writei2c (unsigned char W_Byte);
void writemc (unsigned char addr, unsigned char data1);
void readmc (unsigned char addr);
sbit SDA = P0 ^ 1 / / móc przypiąć SDA (Data)
sbit SCL = P0 ^ 0 / / połączyć się SCL pin (zegar)
opóźnienia ();
void main ()
(
writemc (0x24, 0x55);
readmc (0x24);
)
//-------------------------------
/ / Start I2C
//-------------------------------
void Start (void)
(
SDA = 1;
SCL = 1;
_nop_ (); _nop_ ();
SDA = 0;
_nop_ (); _nop_ ();
SCL = 0;
_nop_ (); _nop_ ();
)
//-------------------------------
/ / Stop I2C
//-------------------------------
void stop (void)
(
SDA = 0;
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SDA = 1;
)
//-------------------------------
/ / Write I2C
//-------------------------------
void writei2c (unsigned char Data)
(
unsigned char i;
for (i = 0; i <8; i )
(
SDA = (Data & 0x80)?1:0;
SCL = 1;
SCL = 0;
Dane <<= 1;
opóźnienia ();
)
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
)
//-------------------------------
/ / Read I2C
//-------------------------------
unsigned char readI2c (bit ACK_Bit)
(
unsigned char data = 0;
unsigned char i;
SDA = 1;
for (i = 0; i <8; i )
(
SCL = 1;
Dane <<= 1;
Dane = (danych | SDA);
SCL = 0;
_nop_ ();
opóźnienia ()
if (ACK_Bit == 1)
SDA = 0 / / Wyślij ACK
w przeciwnym razie
SDA = 1; / / Wyślij NO ACK
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
Data powrotu;
)
void writemc (unsigned char 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;
)
opóźnienia () / * One Second Delay * /
(
T2MOD = 0x03;
TL2 = 0xFC;
TH2 = 0xFE;
TR2 = 1;
while (TF2! = 1);
TR2 = 0;
TF2 = 0;
)
BALA Here.I staram się przekazać Dwa
89s52 [/ b] Microcontroller Korzystanie I2C .. próbowałem tyle razy .... Ale nie zrobił dostać wyjścia ..
Oto jestem w tym mój kod .. Pls znaleźć błąd i Pomóż mi ..
Tahnks w Advance
Kod:
# include <AT898252.h>
# include <intrins.h>
unsigned char readI2c (bit ACK_Bit);
void writei2c (unsigned char W_Byte);
void writemc (unsigned char addr, unsigned char data1);
void readmc (unsigned char addr);
sbit SDA = P0 ^ 1 / / móc przypiąć SDA (Data)
sbit SCL = P0 ^ 0 / / połączyć się SCL pin (zegar)
opóźnienia ();
void main ()
(
writemc (0x24, 0x55);
readmc (0x24);
)
//-------------------------------
/ / Start I2C
//-------------------------------
void Start (void)
(
SDA = 1;
SCL = 1;
_nop_ (); _nop_ ();
SDA = 0;
_nop_ (); _nop_ ();
SCL = 0;
_nop_ (); _nop_ ();
)
//-------------------------------
/ / Stop I2C
//-------------------------------
void stop (void)
(
SDA = 0;
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SDA = 1;
)
//-------------------------------
/ / Write I2C
//-------------------------------
void writei2c (unsigned char Data)
(
unsigned char i;
for (i = 0; i <8; i )
(
SDA = (Data & 0x80)?1:0;
SCL = 1;
SCL = 0;
Dane <<= 1;
opóźnienia ();
)
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
)
//-------------------------------
/ / Read I2C
//-------------------------------
unsigned char readI2c (bit ACK_Bit)
(
unsigned char data = 0;
unsigned char i;
SDA = 1;
for (i = 0; i <8; i )
(
SCL = 1;
Dane <<= 1;
Dane = (danych | SDA);
SCL = 0;
_nop_ ();
opóźnienia ()
if (ACK_Bit == 1)
SDA = 0 / / Wyślij ACK
w przeciwnym razie
SDA = 1; / / Wyślij NO ACK
_nop_ (); _nop_ ();
SCL = 1;
_nop_ (); _nop_ ();
SCL = 0;
Data powrotu;
)
void writemc (unsigned char 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;
)
opóźnienia () / * One Second Delay * /
(
T2MOD = 0x03;
TL2 = 0xFC;
TH2 = 0xFE;
TR2 = 1;
while (TF2! = 1);
TR2 = 0;
TF2 = 0;
)