3 dic 2012

EDATA (Escritura de Memoria EEPROM)


Sintaxis

EDATA Constante1 { ,...Constanten etc }  

Detalles


Almacena constantes o cadenas directamente en la memoria EEPROM de PICmicro.



 
Operators

  • Constante1, Constanten - valores a ser almacenados en la memoria EEPROM, los valores son almacenados  a partir de la dirección inicial 0. Esta instrucción no permite especificar la dirección de memoria de almacenamiento de los datos. Para almacenar en una dirección especifica diferente a la cero (0), es necesario usar el comando EWrite .
Ejemplo ' Almacena los datos 1000,20,255,15, y los valores ASCII para  
 ' H','e','l','l','o' en la memoria EEPROM iniciando en la dirección 0. 


   EDATA
1000 , 20 , $FF , 001111 , "Hello"



Nota

    Valores de 16-bit, 32-bit y punto flotante, pueden ser almacenados en la EEPROM, y estos son colocados  de manera tal que el byte menos significativo ocupe la primera dirección de memoria. 

    Por ejemplo,  si el valor a almacenar es 1000 con la sentencia Edata, entonces la instrucción seria la siguiente :

    EDATA 1000

Los datos en la EEPROM quedan así :  
232, 03  


Tabla de Direccionamiento  (EDATA)

     Los de la memoria EEPROM inicia en la dirección 0 y finaliza en un máximo de acuerdo a la capacidad de PICmicro.  En raras ocasiones la información almacenada en la EEPROM es una sola pieza continua de informacion, por el contrario, normamalmente es usada para almacenar valores o cadenas  de texto, de manera tal que acceder a cada uno de estos es esencial.  Considerando el siguiente codigo :
 EDATA "HOLA"
 EDATA 
"MUNDO"

      El texto "HOLA" sera almacenado a partir de la direccion, contiene 4 caracteres y cada uno ocupa un byte de la memoria EEPROM, de esta manera el texto "MUNDO" comienza a almacenarse a partir de la dirección 4, y contiene 5 caracteres; asi que la proxima cadena de texto a alamecenar estara localizada a partir de la direccion 9.   Para  acceder de manera separada a cada una de las cadenas de textos o valores es necesario mantener un registro  de la direccion de inicio o cabezera   y final de cada cadena de texto.

   Para esto un nombre de identificacion antes de la sentencia EDATA permite al compilador hacer el conteo de bytes. El compilador almacena las direcciones asociada a cada texto o valor, con un nombre de identificacion en la tabla.

 Por Ejemplo :

HOLA_TEXT  EDATA "HOLA"
MUNDO_TEXT EDATA 
"MUNDO"


  El nombre HOLA_TEXT is ahora reconocido por el compilado como una constante, y de ser la primera sentencia EDATA, esta tomara el valor  de 0, refiriendose a la direccion de inicio de la cadena "HOLA".

  

MUNDO_TEXT es una contante y mantendra un valor de 4, el cual se refiere a la direccion de inicio de la cadena d etexto "MUNDO".

Note que el identificador debe ser localizado en la misma linea que la directiva EDATA. 


Cualquier Directiva EDATA debe ser colocada en la cabecera del Programa, al igual que los simbolos, estos nombre son reconocidos en el resto del programa cada vez que estos aparezcan .



El ejemplo de abajo ilustra el uso del direccionamiento de la EEPROM:

' Muestra dos textos almacenados en la memoria EEPROM





 Include "PROTON_4.INC"      
  
 Dim
CHAR as Byte           ' Carácter
 Dim CHARPOS as Byte        
' Dirección 

HELLO EDATA
"HOLA ",0      ' Crea una cadena de Texto en la EEPROM. terminación.
WORLD EDATA "MUNDO",0       ' Crea una cadena de Texto en la EEPROM. terminación.

 Delayms
200                 ' retardo 200 ms
 Cls                        
' Limpia LCD
 CHARPOS = HELLO   
          ' CHARPOS <= direccion de inicio del texto "HOLA"
 Gosub DISPLAY_TEXT  
        ' Muestra el  texto "HOLA"
 CHARPOS = WORLD             CHARPOS <= direccion de inicio del texto "MUNDO"
 Gosub DISPLAY_TEXT  
        ' Muestra el  texto "MUNDO"
 Stop     
                   ' Fin

' subrutina pata leer y mostrar el texto almacenado en la dirección correspondiente al valor de CHARPOS

DISPLAY_TEXT:
 While
1 = 1                 ' Bucle infinito
 
CHAR = EREAD CHARPOS        ' Lee EEPROM
 If
CHAR = 0 Then Break      ' Sale del Bucle cuando CHAR = 0   (terminación)
 Print
CHAR                  ' Muestra el caracter
 Inc CHARPOS                
' Incrementa CHARPOS
 Wend                       
' Cierra bucle While
 Return                     
' Sale de la subrutina




EWRITE (Escritura de Memoria EEPROM interna)

EWRITE

Sintaxis


EWRITE Dirección , [ Variable {, Variable…etc } ]  
Detalles

Escribe  datos en la memoria EEPROM del PICmicro.

 
Operadores

  • Direccion :  constante, variable ó  expresión, que contiene la direccion  que se desea escribir.
  • Variable:  definida por el usuario y del tipo bit, byte, byte array, word, word array, dword, float or a constant value.

Ejemplo
 DEVICE 16F628   


 DIM VAR1 as BYTE
 DIM WRD1 as WORD
 DIM DIRECCION as BYTE 


 VAR1 =
200
 WRD1=
2456
 DIRECCION =
0    ' Point to address 0 within the eeprom


 EWRITE DIRECCION , [ WRD , VAR1 ] ' Escribe un dato de 16 bits y luego uno de 8   
                                     bits.
 
Notas

    Si en la instrucción la variable usada en la escritura de la EEPROM es del tipo wordentonces serán usadas cuatro (02) bytes de la memoria EEPROM,  y estos corresponderán a las direcciones de memoria consecuentes.

    Si en la instrucción la variable usada en la lectura  es del tipo float ó  wordentonces cuatro (04) bytes serán escritas en  la memoria EEPROM.

   
   Si se desearan almacenar datos de 16 bits consecutivamente la dirección debe ser incrementada en dos (02) cada escritura, como se muestra en el siguiente codigo :

 
 FOR Dirección = 0 TO 64 STEP
  EWRITE Dirección , [ WRD ]
 NEXT
 

Vea también

EDATA
EREAD

EREAD (Lectura de Memoria EEPROM interna)

Sintaxys

Variable = EREAD Direccion
 
Detalles

Lee  informacion de la memoria EEPROM interna del microPIC.


 
Operators

Ejemplo

 DEVICE 16F84   
 DIM VAR1 as BYTE
 DIM WRD1 as WORD
 DIM DWRD1 as DWORD  
 VAR1  = EREAD 0        'Lee valor de 8-bit a partir de la dirección  0
 WRD1  = EREAD 1        'Lee valor de 8-bit a partir de la dirección  1
 DWRD1 = EREAD
3        'Lee valor de 8-bit a partir de la dirección  3


Nota
    Si en la instrucción la variable usada en la asignación es del tipo float float ó dwordentonces cuatro (04) bytes serán leídos de la memoria EEPROM,  y estos corresponderán a las direcciones de memoria consecuentes.

    Si en la instrucción la variable usada en la asignación es del tipo float wordentonces cuatro (04) bytes serán leídos de la memoria EEPROM.

   
Ejemplo:  


Direccion          Dato 
   Hex               Hex

    00                 0A
    01                 0B
    02                 0C 
    03                 0D
    04                 0E 
    05                 0F
    06                 1A
    07                 1B
    08                 1C
    09                 2D
    0A                 2E
    0B                 2F
    0C                 3A 
    0D                 3B
    0E                 3C 
    0F                 3D


CASO 1:

DIM VAR1 AS WORD

VAR1 = EREAD 0        ' LA ASIGNACION SERA   VAR1 <= $0A0B

    En este caso VAR1 es del tipo WORD (16 bits) por lo cual la dirección "0" corresponde a la parte baja y la dirección  "1" a la parte alta.



CASO 2: 

DIM VAR1 AS DWORD

VAR1 = EREAD 3        ' LA ASIGNACIÓN SERA   VAR1 <= $0D0E0F1A


    En este caso VAR1 es del tipo DWORD (32 bits) y la asignación usa las direcciones de memoria 03-04-05-06.
    

Vea Tambien :

INKEY (Manejo De Teclado Matricial)



Sintaxys

Variable = INKEY
 
Detalles 

Realiza un scan al teclado y devuelve el resultado a una variable.


 
Operadores



La Variable puede se definida del tipo bit, byte, byte array, word, word array, dword or float.


Ejemplo

 DIM VAR1 as BYTE
 VAR1 = INKEY      '
Scanea el teclado
 DELAYMS
50        ' Antirrebote/50ms
 PRINT @VAR1 ,
" " ' Muestra el resultado en el LCD .



Notas
INKEY devuelve un valor entre  0 y 16.  Si ninguna tecla es presionada el valor devuelto  es 16. 


Usando el comando LOOKUP,  los valores devueltos pueden se cambiados de acuerdo a los caracteres presentes en el teclado físicamente.

Ejemplo
 
 VAR1 = INKEY
 KEY = LOOKUP VAR1, [
255,1,4,7,"*",2,5,8,0,3,6,9,"#",0,0,0

 Los valores del ejemplo son solo demostración por lo que deben ser ajustados de acuerdo a los caracteres impresos en cada tecla del mismo.

 
Declaciones DECLARE KEYPAD_PORT PORT    Asigna el puerto a ser utilizado por la instrucción.




     
La rutina INKEY requiere resistores pull_up, por lo cual el mejor puerto para ello es el puerto B,  ya que este posee  estos internamente.    En caso de seleccionar otro puerto esta consideración debe ser tomada en cuenta.