FAQ FAQ  •  Buscar Buscar  •  Registrarse Registrarse  •  Entre para ver sus mensajes privados Entre para ver sus mensajes privados  • Login Login

Librerías .INC

Índice de los Foros Electronica Facil » FOROS ELECTRONICA » Microcontroladores PIC
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
AutorMensaje
Meta
Asunto: Librerías .INC MensajePublicado: 31 Dic, 2009 - 09:35
Experto
Experto


Registrado: 03 Sep, 2008
Mensajes: 125

Felices fiestas:

Quiero pasar una librería llamada EEPROM.INC del 16F84 al 16F88 y no me sale mucho.

Código
  1. <br />
  2. ;***************************** Librería &quot;EEPROM.INC&quot; **********************************
  3. <br />
  4. ;
  5. <br />
  6. ;    ====================================================================
  7. <br />
  8. ;      Del libro &quot;MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS&quot;.
  9. <br />
  10. ;      E. Palacios, F. Remiro y L. López.        <!-- w --><a href="http://www.pic16f84a.com" target="_blank">www.pic16f84a.com</a><!-- w -->
  11. <br />
  12. ;       Editorial Ra-Ma.  <!-- w --><a href="http://www.ra-ma.es" target="_blank">www.ra-ma.es</a><!-- w -->
  13. <br />
  14. ;    ====================================================================
  15. <br />
  16. ;
  17. <br />
  18. ; Estas subrutinas permiten realizar las tareas básicas de escritura y lectura de la
  19. <br />
  20. ; memoria EEPROM de datos del PIC.
  21. <br />
  22. ;
  23. <br />
  24. ; Subrutina &quot;EEPROM_LeeDato&quot; ------------------------------------------------------------
  25. <br />
  26. ;
  27. <br />
  28. ; El microcontrolador lee el dato que hay escrito en la posición de la EEPROM del PIC apuntada
  29. <br />
  30. ; por el contenido del registro de trabajo W. El resultado se proporciona en el mismo W.
  31. <br />
  32. ;
  33. <br />
  34. ; Entrada: En (W) la dirección de la memoria EEPROM a leer.
  35. <br />
  36. ; Salida :  En (W) el byte leído.
  37. <br />
  38.  
  39. <br />
  40. EEPROM_LeeDato
  41. <br />
  42.     bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 0.
  43. <br />
  44.     movwf    EEADR                ; Dirección a leer.
  45. <br />
  46.     bsf        STATUS,RP0            ; Banco 1.
  47. <br />
  48.     bsf        EECON1,RD            ; Orden de lectura.
  49. <br />
  50. EEPROM_SigueLeyendo
  51. <br />
  52.     btfsc    EECON1,RD            ; El PIC indica que ha terminado la lectura
  53. <br />
  54.     goto    EEPROM_SigueLeyendo    ; poniendo en bajo este bit.
  55. <br />
  56.     bcf        STATUS,RP0            ; Banco 0.
  57. <br />
  58.     movf    EEDATA,W            ; El byte leído al registro W.
  59. <br />
  60.     return
  61. <br />
  62.  
  63. <br />
  64. ; Subrutina &quot;EEPROM_EscribeDato&quot; --------------------------------------------------------
  65. <br />
  66. ;
  67. <br />
  68. ; Escribe el dato introducido en el registro de trabajo W en la posición de memoria EEPROM del
  69. <br />
  70. ; PIC apuntada por el registro EEADR.
  71. <br />
  72. ;
  73. <br />
  74. ; Como altera el valor del registro INTCON al posicionar el flag GIE, éste se debe guardar al
  75. <br />
  76. ; principio de la subrutina y restaurarlo al final.
  77. <br />
  78. ;
  79. <br />
  80. ; Entradas:    En el registro EEADR la dirección de la memoria EEPROM a escribir.
  81. <br />
  82. ;        En el registro W el byte a escribir.
  83. <br />
  84. ;
  85. <br />
  86.     CBLOCK
  87. <br />
  88.     EEPROM_GuardaINTCON
  89. <br />
  90.     ENDC
  91. <br />
  92.  
  93. <br />
  94. EEPROM_EscribeDato
  95. <br />
  96.     bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 0.
  97. <br />
  98.     movwf    EEDATA                ; El byte a escribir.
  99. <br />
  100.     movf    INTCON,W            ; Reserva el valor anterior de INTCON
  101. <br />
  102.     movwf    EEPROM_GuardaINTCON
  103. <br />
  104.     bsf        STATUS,RP0            ; Acceso al Banco 1.
  105. <br />
  106.     bcf        INTCON,GIE            ; Deshabilita todas las interrupciones.
  107. <br />
  108.     bsf        EECON1,WREN            ; Habilita escritura.
  109. <br />
  110. ;
  111. <br />
  112. ; El fabricante especifica que hay que seguir esta secuencia para escritura en EEPROM:
  113. <br />
  114. ;
  115. <br />
  116.     movlw    0x55
  117. <br />
  118.     movwf    EECON2
  119. <br />
  120.     movlw    0xAA
  121. <br />
  122.     movwf    EECON2
  123. <br />
  124.     bsf        EECON1,WR            ; Inicia la escritura.
  125. <br />
  126. EEPROM_TerminaEscribir
  127. <br />
  128.     btfsc    EECON1,WR            ; Comprueba que termina de escribir en la EEPROM.
  129. <br />
  130.     goto    EEPROM_TerminaEscribir
  131. <br />
  132.     bcf        EECON1,WREN            ; Desautoriza la escritura en EEPROM.
  133. <br />
  134.     bcf        EECON1,EEIF            ; Limpia este flag.
  135. <br />
  136.     bcf        STATUS,RP0            ; Acceso al Banco 0.
  137. <br />
  138.     movf    EEPROM_GuardaINTCON,W ; Restaura el valor anterior de INTCON.
  139. <br />
  140.     movwf    INTCON
  141. <br />
  142.     return
  143. <br />
  144.  
  145. <br />
  146. ;    ====================================================================
  147. <br />
  148. ;      Del libro &quot;MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS&quot;.
  149. <br />
  150. ;      E. Palacios, F. Remiro y L. López.        <!-- w --><a href="http://www.pic16f84a.com" target="_blank">www.pic16f84a.com</a><!-- w -->
  151. <br />
  152. ;       Editorial Ra-Ma.  <!-- w --><a href="http://www.ra-ma.es" target="_blank">www.ra-ma.es</a><!-- w -->
  153. <br />
  154. ;    ====================================================================
  155. <br />
  156.  
  157. <br />


Mirando el Data Sheet del 16F88 tengo en cuenta los bancos de memoria que siempre debo cambiar, lo he intentado con BANKSEL y con bsc STATUS,RP1.

Ver código modificado para el 16F88.
Código
  1. <br />
  2. ;***************************** Librería &quot;EEPROM_16F88.INC&quot;
  3. <br />
  4. ;
  5. <br />
  6. ;
  7. <br />
  8. ; Estas subrutinas permiten realizar las tareas básicas de escritura y lectura de la
  9. <br />
  10. ; memoria EEPROM de datos del PIC.
  11. <br />
  12. ;
  13. <br />
  14. ; Subrutina &quot;EEPROM_LeeDato&quot; ------------------------------------------------------------
  15. <br />
  16. ;
  17. <br />
  18. ; El microcontrolador lee el dato que hay escrito en la posición de la EEPROM del PIC apuntada
  19. <br />
  20. ; por el contenido del registro de trabajo W. El resultado se proporciona en el mismo W.
  21. <br />
  22. ;
  23. <br />
  24. ; Entrada: En (W) la dirección de la memoria EEPROM a leer.
  25. <br />
  26. ; Salida :  En (W) el byte leído.
  27. <br />
  28.  
  29. <br />
  30. EEPROM_LeeDato
  31. <br />
  32.     bsf        STATUS,RP1            ; Asegura que trabaja con el Banco 2.
  33. <br />
  34.     bcf        STATUS,RP0
  35. <br />
  36.     movwf    EEADR                ; Dirección a leer.
  37. <br />
  38.     bsf        STATUS,RP1            ; Banco 3.
  39. <br />
  40.     bsf        STATUS,RP0
  41. <br />
  42.     bsf        EECON1,RD            ; Orden de lectura.
  43. <br />
  44. EEPROM_SigueLeyendo
  45. <br />
  46.     btfsc    EECON1,RD            ; El PIC indica que ha terminado la lectura
  47. <br />
  48.     goto    EEPROM_SigueLeyendo    ; poniendo en bajo este bit.
  49. <br />
  50.     bsf        STATUS,RP1            ; Banco 2.
  51. <br />
  52.     bcf        STATUS,RP0
  53. <br />
  54.     movf    EEDATA,W            ; El byte leído al registro W.
  55. <br />
  56.     return
  57. <br />
  58.  
  59. <br />
  60. ; Subrutina &quot;EEPROM_EscribeDato&quot; --------------------------------------------------------
  61. <br />
  62. ;
  63. <br />
  64. ; Escribe el dato introducido en el registro de trabajo W en la posición de memoria EEPROM del
  65. <br />
  66. ; PIC apuntada por el registro EEADR.
  67. <br />
  68. ;
  69. <br />
  70. ; Como altera el valor del registro INTCON al posicionar el flag GIE, éste se debe guardar al
  71. <br />
  72. ; principio de la subrutina y restaurarlo al final.
  73. <br />
  74. ;
  75. <br />
  76. ; Entradas:    En el registro EEADR la dirección de la memoria EEPROM a escribir.
  77. <br />
  78. ;        En el registro W el byte a escribir.
  79. <br />
  80. ;
  81. <br />
  82. ;-------------------------------+
  83. <br />
  84. ;    Bancos de memoria 16F88    |
  85. <br />
  86. ;                               |
  87. <br />
  88. ;        RP1:PP0            Banco   |
  89. <br />
  90. ;         0      0              0     |
  91. <br />
  92. ;        0   1            1     |
  93. <br />
  94. ;        1   0            2     |
  95. <br />
  96. ;         1   1            3     |
  97. <br />
  98. ;                               |
  99. <br />
  100. ;-------------------------------+
  101. <br />
  102.  
  103. <br />
  104.     CBLOCK
  105. <br />
  106.     EEPROM_GuardaINTCON
  107. <br />
  108.     ENDC
  109. <br />
  110.  
  111. <br />
  112. EEPROM_EscribeDato
  113. <br />
  114.     bsf        STATUS,RP1
  115. <br />
  116.     bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 2.
  117. <br />
  118.     movwf    EEDATA                ; El byte a escribir.
  119. <br />
  120.     movf    INTCON,W            ; Reserva el valor anterior de INTCON
  121. <br />
  122.     movwf    EEPROM_GuardaINTCON
  123. <br />
  124.     bsf        STATUS,RP1            ; Acceso al Banco 3.
  125. <br />
  126.     bsf        STATUS,RP0
  127. <br />
  128.     bcf        INTCON,GIE            ; Deshabilita todas las interrupciones.
  129. <br />
  130.     bsf        EECON1,WREN            ; Habilita escritura.
  131. <br />
  132. ;
  133. <br />
  134. ; El fabricante especifica que hay que seguir esta secuencia para escritura en EEPROM:
  135. <br />
  136. ;
  137. <br />
  138.     movlw    0x55
  139. <br />
  140.     movwf    EECON2
  141. <br />
  142.     movlw    0xAA
  143. <br />
  144.     movwf    EECON2
  145. <br />
  146.     bsf        EECON1,WR            ; Inicia la escritura.
  147. <br />
  148. EEPROM_TerminaEscribir
  149. <br />
  150.     btfsc    EECON1,WR            ; Comprueba que termina de escribir en la EEPROM.
  151. <br />
  152.     goto    EEPROM_TerminaEscribir
  153. <br />
  154.     bcf        EECON1,WREN            ; Desautoriza la escritura en EEPROM.
  155. <br />
  156.     bcf        EECON1,EEIF            ; Limpia este flag.
  157. <br />
  158.     bsf        STATUS,RP1            ; Acceso al Banco 2.
  159. <br />
  160.     bcf        STATUS,RP0
  161. <br />
  162.     movf    EEPROM_GuardaINTCON,W ; Restaura el valor anterior de INTCON.
  163. <br />
  164.     movwf    INTCON
  165. <br />
  166.     return
  167. <br />
Me da este resultado.
Cita----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F88 "RS232_11_16F88.asm" /l"RS232_11_16F88.lst" /e"RS232_11_16F88.err" /d__DEBUG=1
Message[302] H:\PIC16F84A\16F88\RS232_11_16F88.ASM 52 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\RS232_11_16F88.ASM 215 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\LCD_4BIT.INC 96 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\LCD_4BIT.INC 110 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 23 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 26 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 28 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 32 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 64 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 70 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 75 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 77 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 78 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 80 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 82 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] H:\PIC16F84A\16F88\EEPROM.INC 83 : Register in operand not in bank 0. Ensure that bank bits are correct.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\mplink.exe" /p16F88 "RS232_11_16F88.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"RS232_11_16F88.cof" /M"RS232_11_16F88.map" /W /x
MPLINK 4.35, Linker
Copyright (c) 2009 Microchip Technology Inc.
Errors : 0

Loaded H:\PIC16F84A\16F88\RS232_11_16F88.cof.
----------------------------------------------------------------------
Debug build of project `H:\PIC16F84A\16F88\PicRS232_16F88.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Preprocessor symbol `__DEBUG' is defined.
Thu Dec 31 20:21:43 2009
----------------------------------------------------------------------
BUILD SUCCEEDED





Mirando la hoja de datos lo he intetado mirando los ejemplos de la página 31. 16F88.


Código
  1. <br />
  2. ; Leer EEPROM.
  3. <br />
  4. EEPROM_LeeDato
  5. <br />
  6.     BANKSEL EEADR ; Select Bank of EEADR
  7. <br />
  8.     MOVF ADDR, W ;
  9. <br />
  10.     MOVWF EEADR ; Data Memory Address
  11. <br />
  12.     ; to read
  13. <br />
  14.     BANKSEL EECON1 ; Select Bank of EECON1
  15. <br />
  16.     BCF EECON1, EEPGD; Point to Data memory
  17. <br />
  18.     BSF EECON1, RD ; EE Read
  19. <br />
  20.     BANKSEL EEDATA ; Select Bank of EEDATA
  21. <br />
  22.     MOVF EEDATA, W ; W = EEDATA
  23. <br />
  24.     return
  25. <br />
  26.  
  27. <br />
  28.  
  29. <br />
  30.  
  31. <br />
  32.  
  33. <br />
  34.  
  35. <br />
  36.  
  37. <br />
  38.  
  39. <br />
  40.  
  41. <br />
  42.  
  43. <br />
  44.  
  45. <br />
  46.  
  47. <br />
  48. ; Escribir EEPROM.
  49. <br />
  50.  
  51. <br />
  52.  
  53. <br />
  54.  
  55. <br />
  56.     CBLOCK
  57. <br />
  58.     EEPROM_GuardaINTCON
  59. <br />
  60.     ENDC
  61. <br />
  62.  
  63. <br />
  64. EEPROM_EscribeDato
  65. <br />
  66.     BANKSEL EECON1 ; Select Bank of
  67. <br />
  68.     ; EECON1
  69. <br />
  70.     BTFSC EECON1, WR ; Wait for write
  71. <br />
  72.     GOTO $-1 ; to complete
  73. <br />
  74.     BANKSEL EEADR ; Select Bank of
  75. <br />
  76.     ; EEADR
  77. <br />
  78.     MOVF ADDR, W ;
  79. <br />
  80.     MOVWF EEADR ; Data Memory
  81. <br />
  82.     ; Address to write
  83. <br />
  84.     MOVF VALUE, W ;
  85. <br />
  86.     MOVWF EEDATA ; Data Memory Value
  87. <br />
  88.     ; to write
  89. <br />
  90.     BANKSEL EECON1 ; Select Bank of
  91. <br />
  92.     ; EECON1
  93. <br />
  94.     BCF EECON1, EEPGD ; Point to DATA
  95. <br />
  96.     ; memory
  97. <br />
  98.     BSF EECON1, WREN ; Enable writes
  99. <br />
  100.     BCF INTCON, GIE ; Disable INTs.
  101. <br />
  102.     MOVLW 55h ;
  103. <br />
  104.     MOVWF EECON2 ; Write 55h
  105. <br />
  106.     MOVLW AAh ;
  107. <br />
  108.     MOVWF EECON2 ; Write AAh
  109. <br />
  110.     BSF EECON1, WR ; Set WR bit to
  111. <br />
  112.     ; begin write
  113. <br />
  114.     BSF INTCON, GIE ; Enable INTs.
  115. <br />
  116.     BCF EECON1, WREN ; Disable writes
  117. <br />



Saludo.
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
Mostrar mensajes anteriores:     
Cambiar a:  
Todas las horas son GMT
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
 Índice de los Foros Electronica Facil » FOROS ELECTRONICA »  Microcontroladores PIC
powered by phppowered by MySQLPOWERED BY APACHEPOWERED BY CentOS© 2004 - 2025Información Legalpoliticas de cookiesipv6 ready