K
kerden
Guest
hola,
pic16f877 tiene un espí interior, pero quiero comunicar a simular EEPROM 93LC46B (64 * de 16 bits no es lo mismo que 93lc46A). follow.but como mi código no es de los datos.¿qué te pasa?
gracias.
Código://--------------------------------------
PIC chip y 93LC46B;
//==================================# include "pic.h"# define uchar unsigned char
# define uint unsigned int# define CS RB1
# define SCK RB2
IDE # define RB4
# define SDO RB5# define NOP () asm ( "nop")
# define SomeNOP (); NOP (); NOP (); NOP (); NOP ();vacío spi_init ();
vacío spi_lck ();
vacío spi_start_bit ();
vacío spi_ewen ();
vacío spi_ewds ();
vacío spi_send_8bit (uchar send_data);
vacío write93LC46 (uchar write_add, WRITE_DATA uint);
uint read93LC46 (uchar read_add);vacío spi_lck ()
(
SCK = 1;
SomeNOP ();
SCK = 0;
)vacío spi_start_bit ()
(
CS = 1;
SDO = 1 / / comenzar con 1
spi_lck ();
)vacío spi_ewen ()
(
uchar i = 8;
uchar salida = 0x30; / / 0011xxxxxspi_start_bit ();
while (i -)
(
SDO = (bit) (salida y 0x80);
spi_lck ();
salida <<= 1;
)
CS = 0;
)vacío spi_ewds ()
(
uchar i = 8;spi_start_bit ();
SDO = 0;
while (i -)
(
spi_lck ();
)
CS = 0;
)vacío spi_send_8bit (uchar send_data)
(
uchar i = 8;
while (i -)
(
SDO = (bit) (send_data y 0x80);
spi_lck ();
send_data <<= 1;
)
)vacío write93LC46 (uchar write_add, uint WRITE_DATA)
(
uchar comd_add = 0x40;
uchar i = 16;spi_ewen ();
spi_start_bit ();write_add & = 0x3F ;//// 6 bits dirección, 01XXXXXX y 2bit opcode
comd_add | = write_add;
spi_send_8bit (comd_add);while (i -)
(
SDO = (bit) (WRITE_DATA y 0x8000);
/ / 64 x 16 bits organización (93LC46B) debe escribir de dos bytesspi_lck ();
WRITE_DATA <<= 1;
)
while (! RB4); / / esperar escribir completa
CS = 0uint read93LC46 (uchar read_add)
(
uchar comd_add = 0x80;
uchar i = 16;
uint read_data;spi_ewen ();
spi_start_bit ();read_add & = 0x3F; / / 6 bits dirección, 10XXXXXX
comd_add | = read_add;
spi_send_8bit (comd_add);read_data = 0x0000 / / 64 x 16 bits organización (93LC46B) deberán enviar dos byteswhile (i -)
(
spi_lck ();
read_data | = (uint) IDE;
if (i! = 0) / / la chica del tiempo no se ejecutan
(
read_data <<= 1;
)
)
CS = 0;
read_data retorno;
)vacío spi_init ()
(
TRISB = 0x10; / / IDE "1", SDO / SCK / CS "0"
PORTB = 0; / / CS = 0, SCK = 0;
RBPU = 0;
)main ()
(
uint datos;
spi_init ();
write93LC46 (0x05, 0x5555);
de datos = read93LC46 (0x05);
while (1);
)
pic16f877 tiene un espí interior, pero quiero comunicar a simular EEPROM 93LC46B (64 * de 16 bits no es lo mismo que 93lc46A). follow.but como mi código no es de los datos.¿qué te pasa?
gracias.
Código://--------------------------------------
PIC chip y 93LC46B;
//==================================# include "pic.h"# define uchar unsigned char
# define uint unsigned int# define CS RB1
# define SCK RB2
IDE # define RB4
# define SDO RB5# define NOP () asm ( "nop")
# define SomeNOP (); NOP (); NOP (); NOP (); NOP ();vacío spi_init ();
vacío spi_lck ();
vacío spi_start_bit ();
vacío spi_ewen ();
vacío spi_ewds ();
vacío spi_send_8bit (uchar send_data);
vacío write93LC46 (uchar write_add, WRITE_DATA uint);
uint read93LC46 (uchar read_add);vacío spi_lck ()
(
SCK = 1;
SomeNOP ();
SCK = 0;
)vacío spi_start_bit ()
(
CS = 1;
SDO = 1 / / comenzar con 1
spi_lck ();
)vacío spi_ewen ()
(
uchar i = 8;
uchar salida = 0x30; / / 0011xxxxxspi_start_bit ();
while (i -)
(
SDO = (bit) (salida y 0x80);
spi_lck ();
salida <<= 1;
)
CS = 0;
)vacío spi_ewds ()
(
uchar i = 8;spi_start_bit ();
SDO = 0;
while (i -)
(
spi_lck ();
)
CS = 0;
)vacío spi_send_8bit (uchar send_data)
(
uchar i = 8;
while (i -)
(
SDO = (bit) (send_data y 0x80);
spi_lck ();
send_data <<= 1;
)
)vacío write93LC46 (uchar write_add, uint WRITE_DATA)
(
uchar comd_add = 0x40;
uchar i = 16;spi_ewen ();
spi_start_bit ();write_add & = 0x3F ;//// 6 bits dirección, 01XXXXXX y 2bit opcode
comd_add | = write_add;
spi_send_8bit (comd_add);while (i -)
(
SDO = (bit) (WRITE_DATA y 0x8000);
/ / 64 x 16 bits organización (93LC46B) debe escribir de dos bytesspi_lck ();
WRITE_DATA <<= 1;
)
while (! RB4); / / esperar escribir completa
CS = 0uint read93LC46 (uchar read_add)
(
uchar comd_add = 0x80;
uchar i = 16;
uint read_data;spi_ewen ();
spi_start_bit ();read_add & = 0x3F; / / 6 bits dirección, 10XXXXXX
comd_add | = read_add;
spi_send_8bit (comd_add);read_data = 0x0000 / / 64 x 16 bits organización (93LC46B) deberán enviar dos byteswhile (i -)
(
spi_lck ();
read_data | = (uint) IDE;
if (i! = 0) / / la chica del tiempo no se ejecutan
(
read_data <<= 1;
)
)
CS = 0;
read_data retorno;
)vacío spi_init ()
(
TRISB = 0x10; / / IDE "1", SDO / SCK / CS "0"
PORTB = 0; / / CS = 0, SCK = 0;
RBPU = 0;
)main ()
(
uint datos;
spi_init ();
write93LC46 (0x05, 0x5555);
de datos = read93LC46 (0x05);
while (1);
)