konzultovat: I2C pro pic16f877 a pcf8563 s C

K

kerden

Guest
to byl můj první písemné I2C pro pic,
tam musí být něco špatného, může některý zjistit, kde jsem odešel špatně.Nějakou radu by opravdu ocenípic16f877a Master a pcf8563 slave I2C fosc = 400KHZ.OSC = 8MHz

PCF8563 číst příkazem 0xA3, napište příkaz 0xA2;

/************************************************* ****************/
void i2c_int ()
(
SSPCON = 0x28, / /
enable I2C mistr
SSPSTAT = 0x00;
SSPADD = 0x04, / / 400kHZ, 8MHz
SSPCON2 = 0x00;
SSPIF = 0; / / jasné přerušíte bit

)

/************************************************* ******************

************************************************** *******************/
neplatný ACK ()
(
ACKDT = 0; / /
ACKEN = 1, / /

/************************************************* *****************/
void uznána ()
(
ACKDT = 1, / /
ACKEN = 1, / /
)
/************************************************* *****************/
void wait_i2c ()
(
while (SSPIF == 0);
SSPIF = 0;
)
/************************************************* *******************
read_control (pcf8563 pořadí) read_count (číst byte počítat) read_buff (čtení, na které array)

************************************************** *******************/
bit i2c_read (uchar read_control, uchar read_count, uchar * read_buff)
(
uchar i;
uchar j;

SEN = 1, / / start
u (j = 0x02; - j

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />

continue; / / zpoždění pro úspěšný start
dělat
(
RSEN = 1;
) while (SSPIF == 0);
SSPIF = 0;
SSPBUF = 0xA2; / / poslat pcf8563 napsat příkaz
wait_i2c ();

if (ACKSTAT)
return ERROR; / / ne ACK návrat

SSPBUF = read_control; / / poslat PCF8563 pořadí
wait_i2c ();

if (ACKSTAT)
return ERROR;

PEN = 1, / / stop
wait_i2c ();

RCEN = 1, / / restart
wait_i2c ();

SSPBUF = 0XA3; / / poslat číst příkazem
wait_i2c ();

if (ACKSTAT)
return ERROR;

PEN = 1, / / stop
wait_i2c ();

for (i = 0; i <read_count; i )// dostávat za read_count na read_buff
(
RCEN = 1, / / začít dostávat
wait_i2c ();
read_buff = SSPBUF; / / nahrát data
if (i! = read_count-1) / / pošle ACK, ale v poslední poslat uznána
(
ACK ();
wait_i2c ();
)
)

Uznána (); / / poslední dostávat NEJSOU ACK
wait_i2c ();

PEN = 1, / / stop
wait_i2c ();
)myslíte, že jste!

 

Welcome to EDABoard.com

Sponsor

Back
Top