K
kerden
Guest
salut,
pic16f877 intérieure a un spi, mais je tiens à simuler de communiquer EEPROM 93LC46B (64 * 16 bits de ne pas le même que 93lc46A). follow.but mon code comme il ne sont pas les données.quel
est le problème?
merci.
Code://--------------------------------------
PIC puce et 93LC46B;
//==================================# include "pic.h"# define uchar unsigned char
# define uint unsigned int# define CS RB1
# define SCK RB2
# define SDI RB4
# define SDO RB5# define NOP () asm ( "nop")
# define SomeNOP (); NOP (); NOP (); NOP (); NOP ();void spi_init ();
void spi_lck ();
void spi_start_bit ();
void spi_ewen ();
void spi_ewds ();
void spi_send_8bit (uchar send_data);
void write93LC46 (uchar write_add, uint WRITE_DATA);
uint read93LC46 (uchar read_add);void spi_lck ()
(
SCK = 1;
SomeNOP ();
SCK = 0;
)void spi_start_bit ()
(
CS = 1;
SDO = 1; / / commencer avec 1
spi_lck ();
)void spi_ewen ()
(
uchar i = 8;
uchar output = 0x30 / / 0011xxxxxspi_start_bit ();
while (i -)
(
SDO = (bit) (output & 0x80);
spi_lck ();
sortie <<= 1;
)
CS = 0;
)void spi_ewds ()
(
uchar i = 8;spi_start_bit ();
SDO = 0;
while (i -)
(
spi_lck ();
)
CS = 0;
)void spi_send_8bit (uchar send_data)
(
uchar i = 8;
while (i -)
(
SDO = (bit) (send_data & 0x80);
spi_lck ();
send_data <<= 1;
)
)void write93LC46 (uchar write_add, uint WRITE_DATA)
(
uchar comd_add = 0x40;
uchar i = 16;spi_ewen ();
spi_start_bit ();write_add & = 0x3f ;//// 6 bits adresse, 01XXXXXX et 2bit Opcode
comd_add | = write_add;
spi_send_8bit (comd_add);while (i -)
(
SDO = (bit) (WRITE_DATA & 0x8000);
/ / 64 x 16 bits organisation (93LC46B) doivent écrire deux octetsspi_lck ();
WRITE_DATA <<= 1;
)
while (! RB4) / / écrire attendre complète
CS = 0
uint read93LC46 (uchar read_add)
(
uchar comd_add = 0x80;
uchar i = 16;
uint lecture de;spi_ewen ();
spi_start_bit ();read_add & = 0x3f, / / 6 bits adresse, 10XXXXXX
comd_add | = read_add;
spi_send_8bit (comd_add);lecture de = 0x0000, / / 64 x 16 bits organisation (93LC46B) devrait envoyer deux octetswhile (i -)
(
spi_lck ();
lecture de | = (uint) SDI;
if (i! = 0) / / la fille du temps ne fonctionnent pas
(
lecture de <<= 1;
)
)
CS = 0;
lecture de retour;
)void spi_init ()
(
TRISB = 0x10 / / SDI "1", SDO / SCK / CS "0"
PORTB = 0; / / CS = 0, SCK = 0;
RBPU = 0;
)principal ()
(
uint données;
spi_init ();
write93LC46 (0x05, 0x5555);
data = read93LC46 (0x05);
tout (1);
)
pic16f877 intérieure a un spi, mais je tiens à simuler de communiquer EEPROM 93LC46B (64 * 16 bits de ne pas le même que 93lc46A). follow.but mon code comme il ne sont pas les données.quel
est le problème?
merci.
Code://--------------------------------------
PIC puce et 93LC46B;
//==================================# include "pic.h"# define uchar unsigned char
# define uint unsigned int# define CS RB1
# define SCK RB2
# define SDI RB4
# define SDO RB5# define NOP () asm ( "nop")
# define SomeNOP (); NOP (); NOP (); NOP (); NOP ();void spi_init ();
void spi_lck ();
void spi_start_bit ();
void spi_ewen ();
void spi_ewds ();
void spi_send_8bit (uchar send_data);
void write93LC46 (uchar write_add, uint WRITE_DATA);
uint read93LC46 (uchar read_add);void spi_lck ()
(
SCK = 1;
SomeNOP ();
SCK = 0;
)void spi_start_bit ()
(
CS = 1;
SDO = 1; / / commencer avec 1
spi_lck ();
)void spi_ewen ()
(
uchar i = 8;
uchar output = 0x30 / / 0011xxxxxspi_start_bit ();
while (i -)
(
SDO = (bit) (output & 0x80);
spi_lck ();
sortie <<= 1;
)
CS = 0;
)void spi_ewds ()
(
uchar i = 8;spi_start_bit ();
SDO = 0;
while (i -)
(
spi_lck ();
)
CS = 0;
)void spi_send_8bit (uchar send_data)
(
uchar i = 8;
while (i -)
(
SDO = (bit) (send_data & 0x80);
spi_lck ();
send_data <<= 1;
)
)void write93LC46 (uchar write_add, uint WRITE_DATA)
(
uchar comd_add = 0x40;
uchar i = 16;spi_ewen ();
spi_start_bit ();write_add & = 0x3f ;//// 6 bits adresse, 01XXXXXX et 2bit Opcode
comd_add | = write_add;
spi_send_8bit (comd_add);while (i -)
(
SDO = (bit) (WRITE_DATA & 0x8000);
/ / 64 x 16 bits organisation (93LC46B) doivent écrire deux octetsspi_lck ();
WRITE_DATA <<= 1;
)
while (! RB4) / / écrire attendre complète
CS = 0
(
uchar comd_add = 0x80;
uchar i = 16;
uint lecture de;spi_ewen ();
spi_start_bit ();read_add & = 0x3f, / / 6 bits adresse, 10XXXXXX
comd_add | = read_add;
spi_send_8bit (comd_add);lecture de = 0x0000, / / 64 x 16 bits organisation (93LC46B) devrait envoyer deux octetswhile (i -)
(
spi_lck ();
lecture de | = (uint) SDI;
if (i! = 0) / / la fille du temps ne fonctionnent pas
(
lecture de <<= 1;
)
)
CS = 0;
lecture de retour;
)void spi_init ()
(
TRISB = 0x10 / / SDI "1", SDO / SCK / CS "0"
PORTB = 0; / / CS = 0, SCK = 0;
RBPU = 0;
)principal ()
(
uint données;
spi_init ();
write93LC46 (0x05, 0x5555);
data = read93LC46 (0x05);
tout (1);
)