¿Cómo utilizar IIC-24C04? ¿Alguien tiene instrucciones detalladas para este chip?
/****************************************** **********/
/*Programa de demostración de lectura y escritura EEPROM */
/*Dispositivo de destino: AT89S51 */
/ *Oscilador de cristal: 11.0592MHZ */
/********************************* ******* *******************************************
Función Función:Programa principal
Parámetros de entrada:
Parámetros de salida:
********** *********** **************************************** ************ ******/
/*void main(void)
{
int eepromdata =0; //Datos leídos del espacio de almacenamiento EEPROM
SDA = 1;
SCL = 1;
write_byte(0x01, 0x55); 0x55(85) para dirigir 0x01 Datos
delayms(250);
write_byte(0x02, 0xAA); //Escribir datos 0xAA(170) para dirigir 0x02
delayms(250 );
delayms(250);
eepromdata= read_random(0x02); // Lee los datos en una de las direcciones para verificar
demorams(250 );
mientras(1);
}*/
/*************** ***** **********************************/
#ifndef __I2C_H__
#define __I2C_H__
/********************************* ****incluye archivos de encabezado* *******************************/
#include " at89x51.h"
#include "intrins.h"
/************************ ******** *Definición de datos************************************/ p>
#define OP_READ 0xa1 // Dirección del dispositivo y operación de lectura
#define OP_WRITE 0xa0 // Dirección del dispositivo y operación de escritura
//0xa0 se puede utilizar para escribir el 256 bytes de la primera página de 24C04, luego se usa 0xa2 para escribir la segunda página
/************************ ******** *Definición de puerto************************************/ p>
bit SDA = P3^ 3;
bit SCL = P3^4;
/****************** ************ **************************************** ************
Función: Subrutina de retardo
Entrada
Parámetros: ms
Parámetros de exportación:
****************************** ***********************************************/
retrasos vacíos(ms sin firmar)
{
caracteres sin firmar i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
/*** ** ************************************************* *** **********************
Función: Señal de inicio
Parámetros de entrada:
Parámetros de exportación:
*************************************** ** ************************************/
inicio vacío() p>
{
SDA = 1;
SCL = 1;
_nop_();
_nop_(
SDA = 0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;
}
/****************** ** ************************************************* *** ********
Función: Señal de parada
Parámetros de entrada:
Parámetros de salida:
* ** ************************************************* *** *************************/
parada nula()
{
SDA = 0;
_nop_();
_nop_();
SCL = 1;
_nop_() ;
p>_nop_();
_nop_();
_nop_();
SDA = 1;
}
/*************************************** ***** *************************************
Función: Leer datos
Parámetro de entrada:
Parámetro de salida: read_data
********************* ******** ******************************************* ********* */
char shin sin firmar()
{
char i sin firmar,read_data;
for(i = 0; i < 8; i++)
{
SCL = 1;
read_data <<= 1;
read_data |= (carácter sin firmar) SDA;
SCL = 0;
}
retorno(
read_data);
}
/********************************* *** ********************************************** p>
Función: escribir datos en EEPROM
Parámetro de entrada: write_data
Parámetro de salida: ack_bit
************ ** ************************************************* *** *******************/
bit gritar(unsigned char write_data)
{
carácter sin firmar i;
p>bit ack_bit;
for(i = 0; i < 8; i++)
{
SDA = (bit)(write_data & 0x80);
_nop_();
SCL = 1;
_nop_();
_nop_();
SCL = 0;
write_data <<= 1;
}
SDA = 1; /p>
_nop_() ;
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ack_bit = SDA // Leer respuesta
SCL = 0;
return ack_bit; // Devuelve el bit de reconocimiento AT24Cxx
}
/**************** ******** ******************************************* ********* **
Función: escribir datos en la dirección especificada
Parámetros de entrada: addr, write_data
Parámetros de salida:
*** ******************************************* ********** *************************/
void write_byte(dirección de caracteres sin firmar, char sin firmar write_data)
{
start();
gritar(OP_WRITE);
gritar(addr);
gritar(write_data);
detener();
delayms(10);
}
/** ************ **************************************** ************ *************
Función: Leer datos de la dirección actual
Parámetros de entrada: p>
Parámetros de salida: read_data p>
************************************ ************** *******************************/
carácter sin firmar read_current()
{
sin firmar
char read_data;
start();
gritar(OP_READ);
read_data = shin();
stop();
return read_data;
}
/************************ ************************************************** * **
Función: leer datos en la dirección especificada
Parámetro de entrada: random_addr
Parámetro de salida: read_data
** ** ************************************************* *** *************************/
carácter sin firmar read_random(carácter sin firmar random_addr)
{
start();
gritar(OP_WRITE);
gritar(random_addr);
return(read_current());
}
#endif
Lo anterior es un archivo de encabezado. Por cierto, eres demasiado tacaño y no te recompensará. un solo punto. Si no lo guardé. Si tienes un código que hayas escrito antes, no podrás responderlo.