PIC16f877 simular espí código!

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 = 0;)uint 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);

)
 

Welcome to EDABoard.com

Sponsor

Back
Top