raadplegen: I2C voor pic16f877 en pcf8563 met C

K

kerden

Guest
Het was mijn eerste keer schriftelijk i2c voor pic,
er moet iets mis mee is, kan een ieder zien waar ik heb fout gegaan.Een advies zou echt worden gewaardeerdpic16f877a kapitein en pcf8563 slaaf i2c fosc = 400KHZ.OSC = 8MHZ

PCF8563 gelezen commando 0xA3, schrijf commando 0xA2;

/************************************************* ****************/
void i2c_int ()
(
SSPCON = 0x28; / /
enable i2c kapitein
SSPSTAT = 0x00;
SSPADD = 0x04; / / 400kHZ, 8MHZ
SSPCON2 = 0x00;
SSPIF = 0; / / duidelijke onderbreken bits

)

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

************************************************** *******************/
void ACK ()
(
ACKDT = 0; / /
ACKEN = 1; / /

/************************************************* *****************/
void NACK ()
(
ACKDT = 1; / /
ACKEN = 1; / /
)
/************************************************* *****************/
void wait_i2c ()
(
while (SSPIF == 0);
SSPIF = 0;
)
/************************************************* *******************
read_control (pcf8563 volgorde) read_count (lees byte count) read_buff (lees waarop array)

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

SEN = 1; / / start
for (j = 0x02; - J

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

blijven; / / vertraging voor het begin succesvol
doen
(
RSEN = 1;
) while (SSPIF == 0);
SSPIF = 0;
SSPBUF = 0XA2 / / stuurt pcf8563 schrijven commando
wait_i2c ();

if (ACKSTAT) return FOUT; / / geen ACK terug

SSPBUF = read_control / / stuurt PCF8563 bestelling
wait_i2c ();

if (ACKSTAT) return FOUT;

PEN = 1 / / stoppen
wait_i2c ();

RCEN = 1; / / herstarten
wait_i2c ();

SSPBUF = 0XA3 / / verzenden gelezen commando
wait_i2c ();

if (ACKSTAT) return FOUT;

PEN = 1 / / stoppen
wait_i2c ();

for (i = 0; i <read_count; i )// ontvangen voor read_count te read_buff
(
RCEN = 1; / / start ontvangen
wait_i2c ();
read_buff = SSPBUF / / laden van gegevens
if (i! = read_count-1) / / ACK sturen, maar op het laatste sturen NACK
(
ACK ();
wait_i2c ();
)
)

NACK (); / / laatste ontvangt NIET ACK
wait_i2c ();

PEN = 1 / / stoppen
wait_i2c ();
)denk je!

 

Welcome to EDABoard.com

Sponsor

Back
Top