Autor Tema: Ejemplo de utilizacion del Modulo I2C del 16F877a  (Leído 42747 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Ejemplo de utilizacion del Modulo I2C del 16F877a
« en: 21 de Marzo de 2006, 20:36:00 »
Buenas...
Aca posteo lo que programe(he sudado bastante pa lograrlo) para leer y escribir una EEPROM de 8kbits(24LC08B) desde un 16F877A en Assembler a FOSC = 20Mhz utilizando el modulo I2C de este PIC.

Lo que hace es grabar un dato en la posicion 0 de la EEPROM , y luego leerlo y mostrar el dato leido en el PuertoB del PIC.

<span class="texto_mini">Codigo:</span>[hr /
]

;Made by Bruno Fascendini
;bipus24hs@hotmail.com


      LIST      P=PIC16F877A
      #include   <p16F877a.INC>
      ERRORLEVEL   -302

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; CONSTANTES:
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define      CLOCK         D"0"
#define      STROBE         D"2"
#define      SCL         D"3"
#define      SDA         D"4"

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;Memoria EEPROM
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; MACROS
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

BANK0      MACRO
      BCF   STATUS,RP0
      BCF   STATUS,RP1
      ENDM

BANK1      MACRO
      BSF   STATUS,RP0
      BCF   STATUS,RP1
      ENDM

BANK2      MACRO
      BSF   STATUS,RP1
      BCF   STATUS,RP0
      ENDM

BANK3      MACRO
      BSF   STATUS,RP1
      BSF   STATUS,RP0
      ENDM

;GPR: GENERAL PURPOSE REGISTERS

;0x20 -> 0x47 Reservados Memoria cartel.

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DIRL      EQU   0X20
DIRH      EQU   0X21   
DATO      EQU   0X22   ;temporar. byte a enviar/dato leido
flag      EQU   0X24
cuenta      EQU   0X25
CONTA0      EQU   0X26
CONTA1      EQU   0X27
DATASSP      EQU      0x70

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



      ORG   0X0000
      GOTO   INICIO

      ORG   0X0004
      return

      ORG   0X0020

INICIO      BANK0
      BSF   STATUS,RP0
      MOVLW   0x06       ;PINS DEL PUERTO A Y PUERTO E TODOS DIGITALES.
      MOVWF   ADCON1
      CLRW
      MOVWF TRISA

      BANK0
      CLRF   PORTA
      BSF      STATUS,RP0
      MOVLW   0X00
      MOVWF   TRISB

      BANK0
      CLRF   PORTB
      BSF      STATUS,RP0
      MOVLW   B"00011000"
      MOVWF   TRISC
   
      BANK0
      MOVLW   B"00010000"
      MOVWF   PORTC
      BSF   STATUS,RP0
      MOVLW   0X00
      MOVWF   TRISD

      BANK0
      CLRF   PORTD
      BSF      STATUS,RP0
      MOVLW   0X00
      MOVWF   TRISE
   
      BANK0
      CLRF   PORTE

      call   i2c_init   ;configurar y encender I2C
      clrf   DIRH      ;cargar paginas de 24LC08B en las cuales escribir
      clrf   DIRL      ;cargar direccion de 24LC08B en las cuales escribir      
      movlw   0xA0
      movwf   DATASSP      ;cargar dato a escribir en la 24LC08B
      call   WriteI2CByte
      btfss   flag,0
      goto   errorcom

      call   DEMORA      ;dar 10ms a que termine la escritura

      clrf   DIRH      ;cargar paginas de 24LC08B de las cuales leer
      clrf   DIRL      ;cargar direccion de 24LC08B de las cuales leer
      call   ReadI2CByte
      btfss   flag,0
      goto   errorcom

      movlw   .1      ;escritura y lectura OK. encender RA0, mostrar dato leido en PuertoB y loop eterno
      movwf   PORTA
      movf   DATO,w
      movwf   PORTB
      nop
      goto   $-1

errorcom   movlw   .3      ;error de escritura o lectura, encender RA0 y RA1 y loop eterno
      movwf   PORTA
      nop
      goto   $-1


;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DEMORA
   movlw   .55
   movwf   CONTA0
RET1
   movlw   .181
   movwf   CONTA1
RET2
   nop
   nop
   decfsz   CONTA1,1
   goto   RET2
   decfsz   CONTA0,1
   goto   RET1
   return


;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_init

   movlw       b"00011000"
   banksel       TRISC         ;banco 1
   iorwf       TRISC,F
   movlw       b"00001011"      ;.11 para 400khz @ 20 mhz
   movwf       SSPADD         ;400 khz @ 20 mhz   
   clrf       SSPSTAT
   movlw      b"00101000"
   bcf      STATUS,RP0      ;banco 0
   movwf       SSPCON
   CLRF      PIR1
   call      i2c_idle
   return


;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_idle

   bsf      STATUS,RP0      ;banco 1
   btfsc       SSPSTAT,R_W
   goto       $-1

   movf       SSPCON2,w
   andlw       0x1F
   btfss       STATUS,Z
   goto       $-3

   bcf      STATUS,RP0      ;banco 0
   return

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_start
   call      i2c_idle
   bsf      STATUS,RP0      ;banco 1
   bsf       SSPCON2,SEN
   btfsc       SSPCON2,SEN
   goto       $-1

   bcf      STATUS,RP0      ;banco 0
   btfss      PIR1,SSPIF
   goto      $-1

   bcf      PIR1,SSPIF
   return

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_restart

   bsf      STATUS,RP0      ;banco 1
   bsf       SSPCON2,RSEN
   btfsc       SSPCON2,RSEN
   goto       $-1

   bcf      STATUS,RP0      ;banco 0
   return

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_read

   call      i2c_idle   
   bsf      STATUS,RP0      ;banco 1   
   bsf       SSPCON2,RCEN      ;activar modo lectura
   btfsc       SSPCON2,RCEN      ;termino la recepcion?
   goto       $-1         ;no, esperar

   btfss      SSPSTAT,BF      ;dato disponible en SSPBUF para ser leidos?
   goto      $-1         ;no, esperar

   bcf      STATUS,RP0      ;banco 0
   movf      SSPBUF,W
   movwf      DATO
   return

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_write

   bcf      flag,0         ;inicializar flag como "error"
   call      i2c_idle
   movf      DATO,w         ;mover DATO a W
   movwf       SSPBUF         ;cargar dato en buffer I2C
   bsf      STATUS,RP0      ;banco 1
   btfsc       SSPSTAT,R_W      ;esperar a que termine el envio
   goto       $-1

   btfss      SSPCON2,ACKSTAT    ;checkear ack
   goto      okack

   bsf       SSPCON2,PEN      ;error ack. enviar STOP
   bcf      STATUS,RP0      ;banco 0
   return               ;volver con flag= 0 error

okack   bcf      STATUS,RP0      ;banco 0
   btfss      PIR1,SSPIF      ;esperar finalizacion del noveno clock
   goto      $-1

   bcf      PIR1,SSPIF
   bsf      flag,0         ;volver con flag = 1 OK!
   return
   
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_sendack

   bsf      STATUS,RP0      ;banco 1
   bcf       SSPCON2,ACKDT
   bsf       SSPCON2,ACKEN
   bcf      STATUS,RP0      ;banco 0
   return

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_sendnack

   bsf      STATUS,RP0      ;banco 1
   bsf       SSPCON2,ACKDT
   bsf       SSPCON2,ACKEN
   bcf      STATUS,RP0      ;banco 0
   return

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i2c_stop
   bsf      STATUS,RP0      ;banco 1
   bsf       SSPCON2,PEN      ;enviar STOP
   bcf      STATUS,RP0      ;banco 0
   return

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;WriteI2CByte
;DIRH<1:0>               ;paginas de la eeprom en las cuales grabar
;DIRL                  ;direccion baja de la posicion de eeprom en las cuales grabar
;DATASSP               ;dato a grabar
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

WriteI2CByte

   call      i2c_start      ;enviar START, esperar a que se libere el BUS
   rlf      DIRH,W
   andlw      b"00000110"      ;solo 2 bits de paginas admitidas para esta eeprom. Asegurar bit0 =0 (write)
   iorlw      b"10100000"      ;insertar identificador de la EEPROM(1010) en el mensaje
   movwf      DATO         ;cargar byte en variable a enviar(DATO)
   call      i2c_write
   btfss      flag,0
   return               ;volver. error de escritura

   movf      DIRL,w
   movwf      DATO
   call      i2c_write
   btfss      flag,0
   return               ;volver. error de escritura

   movf      DATASSP,w
   movwf      DATO         ;cargar en DATO
   call      i2c_write
   btfss      flag,0
   return               ;volver. error de escritura

   call      i2c_stop
   return               ;flag = 1 OK!

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;ReadI2CByte
;DIRH<1:0>               ;paginas de la eeprom de las cuales leer
;DIRL                  ;direccion baja de la posicion de eeprom de las cuales leer

;devuelve:
;DATO                  ;dato leido
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ReadI2CByte
   
   call      i2c_start      ;enviar START, esperar a que se libere el BUS
   rlf      DIRH,W   
   andlw      b"00000110"      ;solo 2 bits de paginas admitidas para esta eeprom. Asegurar bit0 =0 (write)
   iorlw      b"10100000"      ;insertar identificador de la EEPROM(1010) en el mensaje
   movwf      DATO         ;cargar byte en variable a enviar(DATO)
   call      i2c_write
   btfss      flag,0
   return               ;volver. error de escritura

   movf      DIRL,w
   movwf      DATO
   call      i2c_write
   btfss      flag,0
   return               ;volver. error de escritura

   call      i2c_restart      ;enviar RESSTART
   rlf      DIRH,W   
   andlw      b"00000110"      ;solo 2 bits de paginas admitidas para esta eeprom.
   iorlw      b"10100001"      ;insertar identificador de la EEPROM(1010) en el mensaje. Asegurar bit0 =1 (Read)
   movwf      DATO         ;cargar byte en variable a enviar(DATO)
   call      i2c_write
   btfss      flag,0
   return               ;volver. error de escritura

   call      i2c_read
   call      i2c_sendnack
   call      i2c_stop
   return               ;flag = 1 OK!

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   END





Espero les sea de utilidad. Exitos!
« Última modificación: 14 de Mayo de 2008, 17:15:51 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #1 en: 22 de Marzo de 2006, 06:43:00 »
Me consta que a sudado, Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas Muchas risas


Un saludo

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #2 en: 11 de Mayo de 2008, 17:19:30 »
hola,el mplab no me compila tu programa. me parece que tienes un error en esta linea:

movf      DATASSP,w

ya que DATASSP la has definido como un valor y aqui la has utilizado como un registro.

esta en el subprograma WriteI2CByte.

creo que deberia poner :movf   SSPBUF,w

saludos
« Última modificación: 11 de Mayo de 2008, 17:34:23 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #3 en: 11 de Mayo de 2008, 19:43:31 »
Hola groundman!

Si. es un error(y grave) ya que estaria trabajando sobre el registro del TMR0

Igualmente deberia compilar pese a eso.

Saludos y gracias.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #4 en: 12 de Mayo de 2008, 22:35:18 »
Que tal amigos!
BrunoF muy bueno el ejemplo yo hice algo similar ya hace tiempo utilizando para ello el i2c por hardware del pic16f876A.  :D

Una observacion que pudiese facilitar las cosas a la hora de seleccionar los bancos  :mrgreen:
Veo que creaste varios macros para la seleccion de los bancos ,pero, hay una instruccion que trae el mplab que se llama BANKSEL que te facilita enormemente el manejo de los bancos  :mrgreen:

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #5 en: 13 de Mayo de 2008, 01:49:03 »
Que tal amigos!
BrunoF muy bueno el ejemplo yo hice algo similar ya hace tiempo utilizando para ello el i2c por hardware del pic16f876A.  :D

Una observacion que pudiese facilitar las cosas a la hora de seleccionar los bancos  :mrgreen:
Veo que creaste varios macros para la seleccion de los bancos ,pero, hay una instruccion que trae el mplab que se llama BANKSEL que te facilita enormemente el manejo de los bancos  :mrgreen:

Saludos

Bueno, si...existe BANKSEL y BANKSELW para la selección de bancos en MPLAB, pero si te fijas en el programa, solo uso las macros al inicio del programa y no en el resto del código. Se podría cambiar. Gracias.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #6 en: 13 de Mayo de 2008, 15:32:00 »
  Me creo que hayas sudado para escribirlo, yo sudo para leerlo y entenderlo.
Gracias Bruno me va a ser de utilidad.


saludos

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #7 en: 14 de Mayo de 2008, 11:01:42 »
a mi me pasa igual,me esta costando entenderlo.pero ya estoy poniendo texto de informacion en la ineas del programa y leyendolo muchas vezes.y tambien utilizando BANKSEL.

saludos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #8 en: 14 de Mayo de 2008, 16:33:17 »
hola,BrunoF.me esta siendo de gran utilidad tu programa,pero todabia no he podido hacerlo funcionar.
y es que creo que tiene varios errores.

he encontrado otro si no me equivoco,en la linea.

movwf   DATASSP      ;cargar dato a escribir en la 24LC08B

deberia poner : movwf DATO    ;?????
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #9 en: 14 de Mayo de 2008, 17:18:09 »
Hola!

Bueno, estuve mirando cómo había aplicado el módulo I2C en uno de los proyectos en los cuales lo he utilizado y esta distinto. No se porque lo he posteado mal aqui. Se ve que era alguna prueba en la que no habia visto ese detalle....Fijate que la mejor opcion es redefinir DATASSP.
Modifique el primer post de este hilo para que vean cómo debería quedar(es importante destacar que he elegido la posición de memoria 0x70 para DATASSP por ser accesible desde cualquiera de los 4 bancos de esta serie de 16F. Esto hace que uno se despreocupe de andar seleccionando banco a la hora de leer o escribir en DATASSP).

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #10 en: 14 de Mayo de 2008, 17:20:09 »
Y debería funcionar...Al menos ha funcionado en muchos productos que he diseñado y actualmente se venden y utilizan...

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #11 en: 14 de Mayo de 2008, 19:03:47 »
gracias por rectificarlo.

quiero modificarlo para utilizarlo en un 16f876.y la eeprom 24lc256.
pero las modificaciones que he hecho no han dado los resultados que queria.no se si sera porque este programa no vale para el direccionamiento de esta memoria,o porque he hecho algo mal.

tendre que tirarme todo el sabado y el domingo para intentar comprender el programa y hacerlo funcionar.

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #12 en: 14 de Mayo de 2008, 19:33:27 »
gracias por rectificarlo.

quiero modificarlo para utilizarlo en un 16f876.y la eeprom 24lc256.
pero las modificaciones que he hecho no han dado los resultados que queria.no se si sera porque este programa no vale para el direccionamiento de esta memoria,o porque he hecho algo mal.

tendre que tirarme todo el sabado y el domingo para intentar comprender el programa y hacerlo funcionar.



Bueno, yo he usado en un proyecto precisamente el 16F876A con una 24lc256 y si...hay que cambiar unas cositas...

Reemplaza las funciones por estas que son las que use para las 24lc256..

;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;WriteI2CByte
;DIRH<1:0>                  ;paginas de la eeprom en las cuales grabar
;DIRL                     ;direccion baja de la posicion de eeprom en las cuales grabar
;DATASSP                  ;dato a grabar
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

WriteI2CByte

   call      i2c_start      ;enviar START, esperar a que se libere el BUS
   movlw      b'10100000'      ;"1010"= identificador EEPROM. "000" = numero EEPROM "0"= Write
   movwf      DATO
   call      i2c_write
   btfss      flag,OK
   return

   movf      DIRH,W
   andlw      b'01111111'      ;solo 7 bits de paginas admitidas para esta eeprom.
   movwf      DATO         ;cargar byte en variable a enviar(DATO)
   call      i2c_write
   btfss      flag,OK
   return                  ;volver. error de escritura

   movf      DIRL,W
   movwf      DATO
   call      i2c_write
   btfss      flag,OK
   return                  ;volver. error de escritura
   
   movf      DATASSP,W
   movwf      DATO         ;cargar en DATO
   call      i2c_write
   btfss      flag,OK
   return                  ;volver. error de escritura

   call      i2c_stop
   return                  ;flag = 1 OK!


;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;ReadI2CByte
;DIRH<1:0>               ;paginas de la eeprom de las cuales leer
;DIRL                  ;direccion baja de la posicion de eeprom de las cuales leer

;devuelve:
;DATASSP                  ;dato leido
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ReadI2CByte
   
   call      i2c_start      ;enviar START, esperar a que se libere el BUS

   movlw      b'10100000'      ;1010=identificador EEPROM 000= numero EEPROM 0=write
   movwf      DATO         ;cargar byte en variable a enviar(DATO)
   call      i2c_write
   btfss      flag,OK
   return                  ;volver. error de escritura

   movf      DIRH,W
   andlw      b'01111111'      ;solo 7 bits admitidos para esta EEPROM
   movwf      DATO
   call      i2c_write
   btfss      flag,OK
   return

   movf      DIRL,W
   movwf      DATO
   call      i2c_write
   btfss      flag,OK
   return                  ;volver. error de escritura

   call      i2c_restart      ;enviar RESSTART

   movlw      b'10100001'      ;1010=identificador EEPROM 000= numero EEPROM 1=read
   movwf      DATO         ;cargar byte en variable a enviar(DATO)
   call      i2c_write
   btfss      flag,OK
   return                  ;volver. error de escritura

   call      i2c_read
   call      i2c_sendnack
   call      i2c_stop
   return                  ;flag = 1 OK!


;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

CurrentI2CRead

   call      i2c_start      ;enviar START, esperar a que se libere el BUS

   movlw      b'10100001'      ;1010=identificador EEPROM 000= numero EEPROM 1= read
   movwf      DATO         ;cargar byte en variable a enviar(DATO)
   call      i2c_write
   btfss      flag,OK
   return                  ;volver. error de escritura

   call      i2c_read
   call      i2c_sendnack
   call      i2c_stop
   return                  ;flag = 1 OK!
;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #13 en: 15 de Mayo de 2008, 18:24:37 »
hola,queria preguntarte que valor asignar al OK de estas lineas:

btfss      flag,OK   

ya que no puedo compilar.debido a que esta variable no esta declarada.

saludos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ejemplo de utilizacion del Modulo I2C del 16F877a
« Respuesta #14 en: 15 de Mayo de 2008, 18:32:16 »
Hola groundman! Perdon x eso...

#define    OK            D'0'

Igual funcionaría con cualquier valor entre 0 y 7 ;)

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.