Programación Específica > Microcontroladores

 16f84 Y Eeprom 24c08!..

(1/4) > >>

eliza_marti:
Hola chicos.. :hola: ..alguien derrepente no tiene ejemplos para practicar el manejo de memorias externas 24c08 con un pic 16f84?... :rolleyes: ...en donde pueda darme cuenta de su interconección(circuito) y su comunicación(programa)..claro si no es mucha molestia.. :) ..
Cualquier aporte será bienvenido... :) .. :hola: ..seguiré buscando.. :comp:

Acor2:
En  www.ljlopez.com/Proteus.htm  he visto un ejemplo de conexión de un PIC16F84 y una 24LC256 que te puede servir. Además lo puedes bajar y simular en Proteus.

Saludos.

Huguen_aus_Tirol:
Hola! Aqui tengo algo de código, que escribí alla por el 2000, por lo que no recuerdo exactamente todos los detalles. Pero si recuerdo que me funcionó con una 24C02 y que, en parte, lo saqué de un manual de AN de Microchip.
Debería adaptarse muy bien a un 16F84 y a una 24C08. Solo hay que declarar bien las variables, los pines, etc... Pero creo que no hay problema con eso ;)
Espero que te sea útil :)

Saludos y suerte!


--- Código: Text ---;******************************************************************************;  RUTINAS DE COMUNICACION SERIE (MODULO I2C);******************************************************************************;; GENERA START BIT;START_I2C  BSF  SDA  &#59; dejo linea de datos en 1  BSF  RP0  &#59; banco 1  MOVLW  _TRISC  &#59; configuro SDA y SCL como salidas  ANDLW  b'11100111'&#59;   MOVWF  TRISC  &#59;   BCF  RP0  &#59; banco 0  BCF  SCL  &#59; bajo clock  NOP    &#59;   BSF  SCL  &#59; subo clock  GOTO  $+1  &#59;   GOTO  $+1  &#59;   GOTO  $+1  &#59;   NOP    &#59;   BCF  SDA  &#59; bajo datos  GOTO  $+1  &#59;   GOTO  $+1  &#59;   GOTO  $+1  &#59;   NOP    &#59;   BCF  SCL  &#59; y bajo clock para generar start bit  GOTO  $+1  &#59;   GOTO  $+1  &#59;   RETURN    &#59; ;; GENERA STOP BIT;STOP_I2C  BCF  SDA  &#59; dejo linea de datos en 0  BSF  RP0  &#59; banco 1  MOVLW  _TRISC  &#59; configuro SDA y SCL como salidas  ANDLW  b'11100111'&#59;   MOVWF  TRISC  &#59;   BCF  RP0  &#59; banco 0  BCF  SDA  &#59; bajo datos  GOTO  $+1  &#59;   GOTO  $+1  &#59;   BSF  SCL  &#59; subo clock  GOTO  $+1  &#59;   GOTO  $+1  &#59;   BSF  SDA  &#59; subo datos  GOTO  $+1  &#59;   GOTO  $+1  &#59;   BCF  SCL  &#59; bajo clock  GOTO  $+1  &#59;   GOTO  $+1  &#59;   RETURN    &#59; y retorno;; ENVIA UN BIT POR SDA;BITOUT_I2C  BSF  RP0  &#59; banco 1  MOVLW  _TRISC  &#59; configuro SDA y SCL como salidas  ANDLW  b'11100111'&#59;   MOVWF  TRISC  &#59;   BCF  RP0  &#59; banco 0  BTFSS  I2CDO  &#59; enviar un 1 ?  GOTO  I2CBLO  &#59; no, envio un 0...  BSF  SDA  &#59; pongo SDA en 1  GOTO  CLKOUT  &#59; I2CBLO  BCF  SDA  &#59; pongo SDA en 0CLKOUT  BSF  SCL  &#59; y clockeo  GOTO  $+1  &#59;   GOTO  $+1  &#59;   GOTO  $+1  &#59;   BCF  SCL  &#59;   RETURN    &#59; y salgo;; RECIBE UN BIT POR SDA;BITIN_I2C  BSF  I2CDI  &#59; asumo que llega un 1  BSF  RP0  &#59; banco 1  MOVLW  _TRISC  &#59; configuro SDA como entrada y SCL como salida  ANDLW  b'11100111'&#59;   IORLW  b'00010000'&#59;   MOVWF  TRISC  &#59;   BCF  RP0  &#59; banco 0  BSF  SCL  &#59; subo clock  GOTO  $+1  &#59;   GOTO  $+1  &#59;   GOTO  $+1  &#59;   BTFSS  SDA  &#59; recibio un 1 ?  BCF  I2CDI  &#59; no, es 0  BCF  SCL  &#59; bajo clock  RETURN    &#59; y salgo;; RUTINA DE TRANSMISION POR I2C;I2C_TX  MOVLW  .8  &#59; son 8 bits a contar  MOVWF  CNT  &#59; I2C_TXLP  BCF  I2CDO  &#59; asumo que sale un 0  BTFSC  I2CBUF,7&#59; sacar un 0 ?  BSF  I2CDO  &#59; no, sale un 1...  CALL  BITOUT_I2C&#59; envio bit  RLF  I2CBUF,F&#59; acomodo para sacar proximo bit  DECFSZ  CNT,F  &#59; salieron los 8 ?  GOTO  I2C_TXLP&#59; no, continuo sacando...  CALL  BITIN_I2C&#59; leo bit de acknowledge  BCF  I2CACKF  &#59; asumo que es 0  BTFSC  I2CDI  &#59; es 0 ?  BSF  I2CACKF  &#59; no, envio un 1  RETURN    &#59; y salgo;; RUTINA DE RECEPCION POR I2C;I2C_RX  CLRF  I2CBUF  &#59; borro buffer  MOVLW  .8  &#59; son 8 bits a leer  MOVWF  CNT  &#59;   BCF  C  &#59; borro flag de carryI2C_RXLP  RLF  I2CBUF,F&#59; roto un bit a la izquierda  CALL  BITIN_I2C&#59; y leo bit enviado  BTFSC  I2CDI  &#59; llego un 0 ?  BSF  I2CBUF,0&#59; no, escribo un 1 en el buffer  DECFSZ  CNT,F  &#59; llegaron los 8 bits ?  GOTO  I2C_RXLP&#59; no, sigo reciviendo...  BCF  I2CDO  &#59;   BTFSC  I2CACKF  &#59;   BSF  I2CDO  &#59;   CALL  BITOUT_I2C&#59; envio bit de acknowledge  RETURN    &#59; y salgo;; LECTURA DE LA MEMORIA 24Cxx;RD24CXX  CALL  START_I2C&#59; envio condicion de start  MOVLW  _24CADD  &#59; traigo direccion de esclavo  MOVWF  I2CBUF  &#59; y cargo en buffer  CALL  I2C_TX  &#59; direcciono memoria  MOVFW  ADD24C  &#59; traigo direccion a leer  MOVWF  I2CBUF  &#59;   CALL  I2C_TX  &#59; y envio a memoria  CALL  START_I2C&#59; envio condicion de start  MOVLW  _24CADD  &#59;   IORLW  0x01  &#59; direcciono memoria para lectura  MOVWF  I2CBUF  &#59;   CALL  I2C_TX  &#59; y envio  BCF  I2CACKF  &#59; preparo para acknowledge en 0  CALL  I2C_RX  &#59; y leo byte direccionado  CALL  STOP_I2C&#59; genero condicion de stop  MOVFW  I2CBUF  &#59; cargo dato leido en  MOVWF  DAT24C  &#59; registro de datos de memoria  RETURN    &#59; y salgo;; ESCRITURA DE LA MEMORIA 24Cxx;WR24CXX  CALL  START_I2C&#59; genero bit de start  MOVLW  _24CADD  &#59; cargo direccion del esclavo  MOVWF  I2CBUF  &#59; en buffer  CALL  I2C_TX  &#59; envio...  MOVFW  ADD24C  &#59; cargo direccion a escribir  MOVWF  I2CBUF  &#59; en buffer  CALL  I2C_TX  &#59; envio...  MOVFW  DAT24C  &#59; cargo dato a escribir  MOVWF  I2CBUF  &#59; en buffer  CALL  I2C_TX  &#59; envio...  CALL  STOP_I2C&#59; genero bit de stop  MOVLW  .60  &#59;   MOVWF  CNT1  &#59; WR24POLL  CALL  START_I2C&#59;   MOVLW  _24CADD  &#59;   MOVWF  I2CBUF  &#59;   CALL  I2C_TX  &#59;   BTFSS  SDA  &#59;   GOTO  WR24P_EXIT&#59;   DECFSZ  CNT1,F  &#59;   GOTO  WR24POLL&#59;   RETLW  0xFF  &#59; WR24P_EXIT;  MOVLW  .20  &#59; ;  MOVWF  DEL_TIME&#59; espero 10 mseg para dar tiempo a memoria;  CALL  DELAY  &#59;   RETLW  0x00  &#59; y salgo;;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*;  

eliza_marti:
Gracias Chicos por su gentil ayuda!.. :hola: ..practicaré y les contaré los resultados.. ;) ..
Nos vemos..bye.. :hola:  :sorcerer:

eliza_marti:
Hola Acor2!.. :hola: ..Intenté bajarme el ejercicio que dices...pero el zip está con clave.. :(  ...creo que tendré que comprar el libro!..
Gracias de todos Modos... :hola: ..seguiré practicando!... :comp:   :sorcerer:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa