Resumen de aprendizaje del bus serie I2C

  

señal de inicio (la línea del reloj es alta, la línea de datos se cambia de alta a baja): nula AT24C04_Start () {SDA = 1; //pull high data line SCL = 1; Línea de reloj Delay5us (); //retraso SDA = 0; //generar un flanco descendente Delay5us (); //retraso SCL = 0; //bajar la línea de reloj} señal final: (la línea de reloj es alta, la línea de datos es De bajo a alto) vacío AT24C04_Stop () {SDA = 0; //Tire de la línea de datos baja SCL = 1; //Tire de la línea de reloj alta Delay5us (); //Delay SDA = 1; //Genere el flanco ascendente Delay5us (); //retraso} transferencia de bytes: (8 bits por byte, un byte con un bit correspondiente) Enviar datos: nula AT24C04_SendByte (BYTE dat) {BYTE i; para (i = 0; i < 8; i ++ //contador de 8 bits {dat < < = 1; //eliminar el bit de datos más alto SDA = CY; //enviar el puerto de datos SCL = 1; //tirar de la línea del reloj Delay5us (); //delay SCL = 0; //Baje la línea del reloj Delay5us (); //delay} AT24C04_RecvACK ();} Reciba los datos: BYTE AT24C04_RecvByte () {BYTE i; BYTE dat = 0; SDA = 1; //Habilitar el pull-up interno Listo para leer datos para (i = 0; i < 8; i ++) //Contador de 8 bits {dat < < = 1; SCL = 1; //tire de la línea del reloj Delay5u s (); //demora dat | = SDA; //leer datos SCL = 0; //bajar la línea del reloj Delay5us (); //delay} return dat;} respuesta de datos: cada vez que la transmisión de datos es exitosa, el dispositivo receptor envía una señal de respuesta, cuando el noveno La generación de la señal es que el dispositivo que genera la señal de reconocimiento baja a SDA. Después de recibir la condición de inicio y la dirección del esclavo, responda y seleccione la operación de lectura /escritura. Para una operación de escritura, cada vez que se recibe un byte, 24c02 envía una señal de acuse de recibo. La operación de lectura, después de enviar un byte, libera el bus y espera una señal de respuesta. La recepción de la señal de respuesta continúa transmitiendo datos, recibe una señal de no acuse de recibo y espera la señal de final de recepción. Envíe la señal de respuesta al leer datos nulos AT24C04_SendACK (bit ack) {SDA = ack; //escriba la señal de respuesta SCL = 1; //levante la línea del reloj Delay5us (); //retardo SCL = 0; //baje la línea del reloj Delay5us (); //delay} Recibir el bit de señal de respuesta AT24C04_RecvACK () {SCL = 1; //Línea de reloj alta Delay5us (); //Delay CY = SDA; //Leer la señal de respuesta SCL = 0 //Baje la línea del reloj Delay5us (); //Retardo de retorno CY;} Programa de escritura y lectura de la página: void AT24C04_WritePage () {BYTE i; AT24C04_Start (); //Señal de inicio AT24C04_SendByte (0xa0); //Enviar dirección del dispositivo + escribir señal AT24C04_SendByte (0x00); //Enviar dirección de ubicación de memoria para (i = 0; i < 16 + i ++) {AT24C04_SendByte (TESTDATA [i]);} AT24C04_Stop (); //señal de parada}

Copyright © Conocimiento de Windows All Rights Reserved