(232) escrito en 24C04 para 89C51 - puede ayudar a alguien

R

ronydc

Guest
Hola amigos,
puede que alguien me guíe a escribir la serie de datos procedentes de PC.a la EEPROM como 24C04 ..?im usando 89C51 MCU de Atmel y el uso de KAIL UV-2 para programar en "C"
Puedo tomar los datos en serie a cabo en los puertos ..pero estoy atrapado en la forma de escribir a la EEPROM como 24C04 y leer de nuevo ..el puerto serie .. (en PC).
plz help me plz y me sugieren la solución en BCS c "no soy mucho familier de 8051 de la Asamblea.
gracias de antemano.

-Rony.

 
Creo que necesita el controlador para 24C04 primero.Hay un montón de hilos en este foro con el conductor completamente de trabajo.

John

 
24XX512.h
# include "i2c.h" / * Necesidad de bus I2C * /

# define EEPROMS_ID 0xA0 / * Microchip 24xx512 * /

unsigned char EEPROM_get (addr unsigned int)
(
dat unsigned char;

I2c_start (); / * Inicio de bus I2C * /

I2c_write (EEPROMS_ID); / * Conectar a la EEPROM * /
I2c_write (addr & 0xF0); / * Solicitud de dirección de RAM (byte Alta) * /
I2c_write (addr & 0x0F); / * Solicitud de dirección de RAM (byte bajo) * /

I2c_start (); / * Inicio de bus I2C * /

I2c_write (EEPROMS_ID 1); / * Conectar a la EEPROM para leer * /
= dat I2C_read (); / * Recepción de datos * /

I2C_noack ();

I2c_stop (); / * Parada de bus I2C * /

dat de retorno;
)

void EEPROM_set (addr unsigned int, unsigned char val)
(
I2c_start ();

I2c_write (EEPROMS_ID); / * Conectar a la EEPROM * /
I2c_write (addr & 0xF0); / * Solicitud de dirección de RAM (byte Alta) * /
I2c_write (addr & 0x0F); / * Solicitud de dirección de RAM (byte bajo) * /

I2c_write (val); / * Escribir la SEC en la dirección de RAM especificado * /

I2c_stop (); / * Parada de bus I2C * /
)

i2c.h
# define SDA P2_2 / * Establecer P2.7 = SDA * /
# define SCL P2_3 / * Establecer P2.6 = SCL * /
# define 0x0F I2C_DELAY / * Para retrasar bus I2C * /

void I2C_delay (void)
(
unsigned char i;

for (i = 0; i <I2C_DELAY; i );
)

void I2C_clock (void)
(
I2C_delay ();

SCL = 1; / * reloj de inicio * /

I2C_delay ();

SCL = 0; / * SCL abierto * /
)

void i2c_start (void)
(
if (SCL)
SCL = 0; / * SCL abierto * /

SDA = 1; / * Establecer SDA * /
SCL = 1; / * Establecer SCL * /

I2C_delay ();

SDA = 0; / SDA * abierto * /

I2C_delay ();

SCL = 0; / * SCL abierto * /
)

void i2c_stop (void)
(
if (SCL)
SCL = 0; / * SCL abierto * /

SDA = 0; / SDA * abierto * /
I2C_delay ();

SCL = 1; / * Establecer SCL * /

I2C_delay ();

SDA = 1; / * Establecer SDA * /
)

poco i2c_write (DAT unsigned char)
(
data_bit bits;
unsigned char i;

for (i = 0; i <8; i ) / * Para bucle 8 tiempo (enviar datos de 1 byte) * /
(
= dat & 0x80; / data_bit * Filtro bits MSB mantener data_bit * /
SDA = data_bit; / * Enviar data_bit a SDA * /

I2C_clock (); / * Convocatoria para enviar datos al bus I2C * /

dat = dat <<1;
)

SDA = 1; / * Establecer SDA * /

I2C_delay ();

SCL = 1; / * Establecer SCL * /

I2C_delay ();

= data_bit SDA / * Check reconocer * /
SCL = 0; / * SCL abierto * /

I2C_delay ();

data_bit retorno; / * Si send_bit = 0 i2c es válida * /
)

unsigned char I2C_read (void)
(
rd_bit bits;
unsigned char i, dat;

dat = 0x00;

for (i = 0; i <8; i ) / * Para leer los datos del bucle de 1 byte * /
(
I2C_delay ();

SCL = 1; / * Establecer SCL * /

I2C_delay ();

= rd_bit SDA; / * Mantenga facturación reconocer * /
dat = dat <<1;
dat = dat | rd_bit; / * Mantenga los datos de bits en dat * /

SCL = 0; / * SCL abierto * /
)

dat de retorno;
)

void I2C_ack ()
(
SDA = 0; / SDA * abierto * /

I2C_delay ();

I2C_clock (); / * Convocatoria para enviar datos al bus I2C * /

SDA = 1; / * Establecer SDA * /
)

void I2C_noack ()
(
SDA = 1; / * Establecer SDA * /

I2C_delay ();

I2C_clock (); / * Convocatoria para enviar datos al bus I2C * /

SCL = 1; / * Establecer SCL * /
)
principal# include <AT89X51.H>
# include <24xx512.h>

unsigned int del, i, x, temp;

getCharacter char (void)
(
chr char / / variable para almacenar el nuevo carácter
while (RI! = 1) (;)
= chr SBUF;
RI = 0;
return (CDH);
)
void enviar (char a)
(
SBUF = a;
while (TI! = 1);
TI = 0;
)

void main (void) (
chr char;
int i = 0, j = 0, count = 0, inc = 47; / / inc = 47
int index = 0;
P1 = 0x00;
P2 = 0x00;

SCON = 0x50, / / Modo 1, 8-bit UART, permiten receptor
TMOD = 0x20; / / temporizador 1, modo 2, 8-bit recarga
TH1 = 0xE6; / / 1200
TL1 = 0xE6;
TR1 = 1;
TI = 0;
SBUF = 0;

while (1) (su código

) / / Fin de mientras

) / / fin de los principales
Last edited by besthabit el 26 de enero 2009 6:06, editado 3 veces en total,

 
ronydc escribió:

Hola amigos,

puede que alguien me guíe a escribir la serie de datos procedentes de PC.
a la EEPROM como 24C04 ..?
im usando 89C51 MCU de Atmel y el uso de KAIL UV-2 para programar en "C"

Puedo tomar los datos en serie a cabo en los puertos ..
pero estoy atrapado en la forma de escribir a la EEPROM como 24C04 y leer de nuevo ..
el puerto serie .. (en PC).

plz help me plz y me sugieren la solución en BCS c "no soy mucho familier de 8051 de la Asamblea.

gracias de antemano.-Rony.
 

Welcome to EDABoard.com

Sponsor

Back
Top