52
ASSEMBLER PARA MICROCONTROLADORES PIC POR: EULER DEZA FIGUEROA EULER DEZA FIGUEROA [email protected] SESIÓN COMPLETA

ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa [email protected] sesiÓn completa

  • Upload
    buicong

  • View
    261

  • Download
    17

Embed Size (px)

Citation preview

Page 1: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

ASSEMBLER PARA

MICROCONTROLADORES

PIC

POR: EULER DEZA FIGUEROA

EULER DEZA FIGUEROA

[email protected]

SESIÓN

COMPLETA

Page 2: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

El Registro PCL • Existe un registro, llamado PCL, ubicado en la posición 0x02 en el

banco de memoria, tiene mucho que ver con el flujo del programa,

puesto que le asigna un número a cada línea de código. Todo empieza

con la primera instrucción, esta tiene una posición indicada con un

número en el registro PCL, cuando accede a esa posición, se lee la

instrucción, se decodifica, y luego se ejecuta, una vez echo esto, el reloj

del micro incrementa al contador de programa (PCL) en un unidad, esto

hace que el PCL apunte a la segunda instrucción, ahora se lee esta

segunda instrucción, se decodifica y también se ejecuta. Nuevamente,

el reloj del sistema incrementa el PCL para que apunte a la tercera

instrucción, la decodifique y la ejecute. Este proceso se repite hasta que

termina el programa (es decir, cuando encuentra un END).

EULER DEZA FIGUEROA

[email protected]

Page 3: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

• Estos 2 registros, y en algunos

casos, junto al registro STATUS,

pueden trabajar en conjunto

para hacer un direccionamiento

indirecto de la memoria de

Datos (memoria RAM). Bien,

que es eso del direccionamiento

indirecto...?. Para entenderlo

mejor estudiemos estos

registros...

REFERENCIA:

http://perso.wanadoo.es/luis_ju/pic4/pic4

_07.html EULER DEZA FIGUEROA

[email protected]

Page 4: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

• Es el Registro selector de registros, es un puntero en realidad,

Recuerdas aquello de las interrupciones, pues bien, es la misma

dirección, la 0x04h, cuando se producía una interrupción, el contador

de programa apuntaba a esta dirección, y nosotros le decíamos por

donde continuar, o escribíamos ahí lo que debía hacer.

Ok. Ahora utilizaremos el registro contenido en esta dirección para

seleccionar otros registros.

Piensa, que si el FSR es un puntero de registros, pues, en un

momento, puede apuntar a uno y en otro momento a otro. Ahora, la

dirección del registro al que apunta, se copia en un registro

llamado INDF, y este último registro, se actualiza en cada cambio del

registro FSR, ahora... tienes una idea de lo que es el registro

INDF...???

EULER DEZA FIGUEROA

[email protected]

• Registro 04h (FSR)

Page 5: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

• Es el registro para direccionamiento indirecto de datos, a pesar

de no ser un registro disponible físicamente (esto lo dice la hoja

de datos); utiliza el contenido del registro FSR, para seleccionar

indirectamente la memoria de datos o RAM. Si la dirección a la

que apunta el FSR se copia en INDF, una instrucción aplicada a

INDF, determinará lo que se debe hacer con el registro al que

apunta.

Veamos un ejemplo, de como trabajan estos dos registros, en

colaboración el uno con el otro, y así lo entenderás mejor..

EULER DEZA FIGUEROA

[email protected]

• Registro 00h (INDF)

Page 6: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

El Registro 05 contiene el valor 10h

El Registro 06 contiene el valor 0Ah

Se Carga el valor 05 en el registro FSR (FSR = 05)

La lectura del registro INDF retornará el valor 10h

Se Incrementa el valor del registro FSR en 1 (FSR = 06)

La lectura del registro INDF retornará el valor 0Ah.

EULER DEZA FIGUEROA

[email protected]

• Ejemplo de direccionamiento indirecto

Page 7: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

EULER DEZA FIGUEROA

[email protected]

REFER:

http://perso.wanadoo.es/pictob/micropic16f84.htm#direccionamiento_indirecto

Page 8: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

EULER DEZA FIGUEROA

[email protected]

• Veamos otro ejemplo pero en código. Lo que hace

este miniprograma, es borrar el contenido de la

memoria RAM entre 0x10-0x20 utilizando

direccionamiento indirecto.

Page 9: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

EULER DEZA FIGUEROA

[email protected]

• En la programación de los microcontroladores PIC la mayoría de las

instrucciones emplean direccionamiento

directo, pero también es posible que operen en un modo de

direccionamiento directo. Para el direccionamiento

indirecto se emplean dos registros especiales: el FSR y el INDF (este

último no es un registro físico). El

registro FSR se emplea para “señalar o apuntar” a una dirección de la

memoria RAM cuyo contenido puede

ser leído o escrito de forma indirecta empleando cualquier instrucción

que use como operando al registro

INDF.

Esta forma de direccionamiento es particularmente útil cuando se

manejan tablas o arreglos de datos.-

• REFER:

• Mis primeros programas en assembler [http://www.micros-

designs.com.ar/]

Page 10: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

DIRECCIONAMIENTO INDIRECTO

EULER DEZA FIGUEROA

[email protected]

• Directo vs indirecto

Page 11: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS

Esta memoria está basada en tecnología EEPROM, y tiene

una longitud de 8 bits, del mismo modo que la memoria de

datos. Su tamaño es de 64 bytes y está situada en un bloque

distinto y aislado de la de datos.

Los 64 bytes EEPROM de Memoria de Datos no forman

parte del espacio normal direccionable, y sólo es accesible en

lectura y escritura a través de dos registros, para los datos el

EEDATA que se encuentra en la posición 0008h del banco de

registros RAM y para las direcciones el EEADR en la 0009h.

Para definir el modo de funcionamiento de esta memoria se

emplean dos registros especiales, el EECON1 en la dirección

0088h y el EECON2 en 0089h.

EULER DEZA FIGUEROA

[email protected]

Page 12: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS

El PIC16F84 dispone de una zona de 64 bytes de memoria EEPROM, para

almacenar datos que no se pierden all desconectar la alimentación. Esto es

muy útil ya que permite guardar datos permanentemente

Como cualquier otra memoria EEPROM se pueden realiar dos tipos de

operaciones:

Operación de Lectura

Operación de Escritura o grabación

Un ciclo de grabacion en una posicion EEPROM de datos dura unoos 10ms,

un tiempo muy elevado para la velocidad del procesador, que se controla

mediante un temporizador interno. Al escribir en una posicion de memoria ya

ocupada automaticamente se borra el contenido que habia el nuevo dato, por

lo que no hay comendo de borrado

EULER DEZA FIGUEROA

[email protected]

Page 13: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS…

El PIC16F84 soporta de un millón de ciclos de escritura /borrado de

su memoria EEPROM de datos y es capaz de guardar la información

inalterada durante mas de 40 años

EULER DEZA FIGUEROA

[email protected]

Page 14: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS … Esta memoria no forma parte del espacion direccionable y solo es accesible para

lectura y ecritura a traves de registros. Los registros relacionados con esta memoria

EEPROM de datos son:

EEDATA [EEPROM Data Register-08h]. guarda el contenido de una posición de

la memoria EEPROM de datos antes de su escritura o después de su lectura,

según leamos o escribamos en ella. Para leerla se sigue un proceso especial que

se comentará mas adelante. Como ya sabemos la memoria EEPROM es bastante

lenta, dato que tendremos en cuenta cuando accedamos a ella para escribirla,

pues tarda unos 10 ms en completar el proceso

EEADR [EEPROM Address Register-09h]. El registro EEADR (Dirección de

EEPROM) guarda la dirección de la posición de memoria EEPROM cuando

queramos acceder a ella, bien para su lectura, o bien para su escritura. El igual

que con el registro anterior, veremos su uso más a fondo cuando lleguemos a las

instrucciones que lo utilizan.

El registro EEADR puede direcconar como máximo 256 bytes de los cuales

sólo los 64 primeros están disponibles, con lo que los dos bits de mayor peso han

de tener el valor de '0' EULER DEZA FIGUEROA

[email protected]

Page 15: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS … EECON1[EEPROM Control Register-88h]. Este registro contiene

configuraciones importantes acerca de la escritura y la lectura de la EEPROM de

datos. En concreto tiene 5 bits de control, cuya distribución y significado es el

siguiente.

• U (Unimplemented), No implementado. Se lee como 0.

• Bit 4 (flag): EEIF. Bit de interrupción de escritura en la memoria

EEPROM ( EEPROM Interrupt Flag)

• 1: Este bit se pone a uno al terminar la operación de escritura en la EEPROM,

y debe ponerse a cero por software

• 0: No se ha completado la operación de escritura o no ha empezado.

EULER DEZA FIGUEROA

[email protected]

Page 16: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS … • Bit 3 (flag), WRERR. Bit de error de escritura (Write Error)

• 1: Este bit se pone a 1 si se produce un error de escritura de forma prematura

(Reset o Watchdog). En este caso, los contenidos de EEADR y EEDATA no

varían, de manera que el proceso pueda ser repetido correctamente.

• 0: Se ha completado la operación de escritura.

• Bit 2, WREN. Bit de habilitación de escritura. (Write Enable)

• 1: Este bit debe ser habilitado para poder escribir en la EEPROM

• 0: Deshabilita la escritura de datos en la memoria EEPROM.

• Bit 1, WR. Bit de control de escritura (Write Data)

• 1: Indica que se ha iniciado una operación de escritura. Este bit debe ponerse

a uno para escribir un dato.

• 0: Indica que se ha completado una operación de escritura. El PIC lo pone

automáticamente a cero

• Bit 0, RD. Bit de control de lectura (Read Data)

• 1: Inicia una lectura de la memoria EEPROM. Este bit debe ponerse a uno para

poder leer un dato.

• 0: No se ha iniciado una lectura de la EEPROM. El PIC lo pone

automáticamente a cero EULER DEZA FIGUEROA

[email protected]

Page 17: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS … En el registro EECON1, los tres primeros bits no están implementados por los que su

lectura es '0'. Los bits de control RD y WR inician operaciones de lectura y escritura

respectivamente. Estos bits sólo pueden ser puestos a '1' por software, nunca a '0'.

Son puestos a '0' cuando se completa la operación de lectura o escritura.

Para leer una posición de memoria, se debe escribir la dirección en el registro EEADR

y colocar a '1' el bit de control RD. El dato estará disponible en un próximo ciclo de

instrucción, normalmente en el siguiente, en el registro EEDATA hasta que se lea otro

o se escriba en este registro.

Para escribir un dato en la EEPROM, se debe primero colocar la dirección en el

registro EEADR y el dato en el registro EEDATA. Luego. Después se debe seguir una

secuencia específica para comenzar a escribir cada byte, para garantizar no escribir

datos en la EEPROM por error. La secuencia es:

MOVLW 55h

MOVWF EECON2 ; Escribe 55h en EECON2

MOVLW AAH

MOVWF EECON2 ; Escribe AAh en EECON2

BSF EECON1,WR ; Pone WR a 1 para comenzar la escritura

Además, el bit WREN del registro EECON1 debe estar puesto a '1' para habilitar la

operación de escritura.

EULER DEZA FIGUEROA

[email protected]

Page 18: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS … EECON2 [EEPROM Control Register 2-89h].

Este registro no está implementado físicamente, por lo cual no se puede leer. Tan

sólo sirve para un proceso de protección de escritura que consiste en copiar en él

unos datos específicos, con el fin de evitar que un programa por error pueda

programar la EEPROM, manipulando simplemente los bits del EECON1.

EULER DEZA FIGUEROA

[email protected]

Page 19: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS …

Esta memoria no emplea ningún recurso externo de

alimentación. Puede grabarse desde un programador

de PIC al igual que el código de programa.

La lectura de una posición de la memoria se obtiene

en el registro EEDATA en el próximo ciclo de reloj, si

bien podría tardar algo mas.

La escritura es mucho mas lenta, tardándose del

orden de unos 8 ms. Esta se controla mediante un

temporizador interno

EULER DEZA FIGUEROA

[email protected]

Page 20: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

MEMORIA EEPROM DE DATOS …

Resumen de características:

Memoria de datos de 64 bytes.

Lectura rápida de un byte (en el tiempo de uno o varios ciclos de

instrucción).

Escritura de un byte en unos 8 ms.

Se genera una interrupción cuando se completa la escritura de

la memoria.

1.000.000 de ciclos de borrado/escritura.

40 años de retención de datos.

Tecnología de baja potencia y alta velocidad CMOS

Cuando el dispositivo está protegido por código, la CPU puede

continuar leyendo y escribiendo en la memoria EEPROM, pero el

programador del dispositivo ya no puede acceder esta memoria.

EULER DEZA FIGUEROA

[email protected]

Page 21: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

A continuación veremos a fondo cuales son los procesos más

usuales de escritura y de lectura en la EEPROM.

Lectura de la memoria EEPROM.

Para leer de la memoria EEPROM han de seguirse los siguientes

pasos:

Escritura de la dirección que hay que leer en el registro

EEADR.

Poner a 1 el bit RD del registro EECON, para habilitar la

lectura.

Lectura del dato leído y espera a que termine la operación.

El dato está disponible en el registro EEDATA.

EULER DEZA FIGUEROA

[email protected]

Page 22: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

Veamos dos ejemplos práctico. El primero (LECTURA1) presupone

que el dato en EEDATA estará disponible rápidamente, y el

segundo (LECTURA2) espera hasta confirmarlo

LECTURA1 BCF STATUS,RP0 ; Selecciona banco 0

MOVLW MEM1 ; Dirección a leer de

MOVWF EEADR ; la EEPROM

BSF STATUS,RP0 ; Selecciona banco 1

BSF EECON1,RD ; Activar lectura

BCF STATUS,RP0 ; Selecciona banco 0

MOVF EEDATA,W ; W se carga con el valor

; leído en eeprom.

EULER DEZA FIGUEROA

[email protected]

Page 23: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

(LECTURA2) espera hasta confirmarlo

LECTURA2 BCF STATUS,RP0 ; Selecciona banco 0

MOVLW MEM1 ; Dirección a leer de

MOVWF EEADR ; la EEPROM

BSF STATUS,RP0 ; Selecciona banco 1

BSF EECON1,RD ; Activar lectura

ESPERA BTFSC EECON1,RD ; Espera final de lectura

GOTO ESPERA ; a que baje la bandera

BCF STATUS,RP0 ; Selecciona banco 0

MOVF EEDATA,W ; W se carga con el valor

; leído en eeprom

La memoria EEPROM es bastante lenta, por lo cual es importante

esperar a que el ciclo de lectura termine, aunque algunas veces se omita.

Pero es aún más importante esta espera en el ciclo de escritura, ya que

la EEPROM puede tardar en ser escrita hasta 10 ms. EULER DEZA FIGUEROA

[email protected]

Page 24: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

Escritura de la memoria EEPROM.

El proceso de escritura es aún más complejo ya que deberemos hacer

todo lo anterior y además escribir un código especial de protección.

Estos pasos los vemos en las siguientes líneas:

Poner a 1 (si no lo estaba) el bit WREN del registro EECON1 para

habilitar la operación de escritura.

Cargar en EEADR la dirección de la posición a escribir.

Cargar en el registro EEDATA el valor a grabar.

Ejecutar la siguiente secuencia que inicia la escritura de cada byte y

además sirve de protección frente a errores eventuales. Esta secuencia

siempre es la misma y ha de ejecutarse siempre.

MOVLW 55H

MOVWF EECON2 ; Escribe 55h en EECON2

MOVLF AAH

MOVWF EECON2 ; Escribe AAh en EECON2

BSF EECON1,WR ; Coloca a 1 el bit de escritura

EULER DEZA FIGUEROA

[email protected]

Page 25: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

Escritura de la memoria EEPROM….

Esta última instrucción inicia el proceso de escritura. Cuando se

termina, el bit EEIF está a 1 y, si ha sido habilitada la interrupción de

EEPROM haciendo uso del bit EEIE del registro INTCON, esta

interrupción se genera.

Mediante software es necesario poner a cero el bit EEIF.

EULER DEZA FIGUEROA

[email protected]

Page 26: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

Veamos un ejemplo de escritura típico que no utiliza

interrupciones: ESCRITURA ; Establecer EEADR y EEDATA

MOVLW DIRMEN1

MOVWF EEADR ; Escribe la dirección en EEADR

MOVLW DATO1

MOVWF EEDATA ; Se escribe el dato en EEDATA

BSF STATUS,RP0 ; Selecciona el banco 1

BSF EECON1,WREN ; Permiso de escritura activado

;Comienzo de la secuencia de escritura

MOVLW 0x55

MOVWF EECON2 ; Se escribe el dato 55 h en EECON2

MOVLW 0xAA

MOVWF EECON2 ; Se escribe AA h en EECON2

BSF EECON1,WR ; Comienza la escritura

BCF EECON1,WREN ; Permiso de escritura desactivado

ESPERA BTFSC EECON1,WR ; Espera a que termine la escritura

GOTO ESPERA

BCF STATUS,R0 ; Selecciona el banco 0

.

EULER DEZA FIGUEROA

[email protected]

Page 27: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

La escritura de cada byte no se iniciará si la secuencia de introducir 55 y

AA en EECON2, y activar el bit WR no se sigue exactamente.

Considerándo lo anterior, es recomendable que durante la secuencia de

inicio de escritura se deshabiliten las interrupciones, con el fin de evitar

errores no deseados y habilitarlas posteriormente si van a ser utilizadas.

Adicionalmente, el bit WREN de EECON1 debe ser activado para habilitar

la escritura. Para evitar errores, también es recomendable que el bit WREN

esté desactivado durante todo el programa excepto en el momento de la

escritura. Debemos tener en cuenta que este bit no se pone a cero

automáticamente mediante hardware. Una vez iniciado el ciclo de escritura,

si ponemos a cero WREN, esto no afectará a el ciclo de escritura iniciado.

En este caso el bit WR estará inhibido y no se podrá poner a uno

. Después del ciclo, el bit WR es puesto a cero por hardware y el EEIF es

puesto a uno (si EEIE lo está). Si EEIE, está habilitado, EEIF debe ser

puesto a cero por software.

EULER DEZA FIGUEROA

[email protected]

Page 28: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM Veamos un ejemplo de escritura típico que utiliza interrupciones:

ESCRITURA BCF STATUS,RP0 ; Selecciona el banco 0

; Establecer EEADR y EEDATA

MOVLW MEN1

MOVWF EEADR ; Escribe la dirección en EEADR

MOVLW DATO1

MOVWF EEDATA ; Se escribe el dato en EEDATA

BSF STATUS,RP0 ; Selecciona el banco 1

BSF EECON1,WREN ; Permiso de escritura activado

BCF INTCON, GIE ; Deshabilita interrupciones.

;Comienzo de la secuencia de escritura

MOVLW 0x55

MOVWF EECON2 ; Se escribe el dato 55 h en EECON2

MOVLW 0xAA

MOVWF EECON2 ; Se escribe AA h en EECON2

BSF EECON1,WR ; Comienza la escritura

BSF INTCON,GIE ; Habilita las interrupciones.

BCF EECON1,WREN ; Permiso de escritura desactivado

BCF STATUS,R0 ; Selecciona el banco 0

. EULER DEZA FIGUEROA

[email protected]

Page 29: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

Verificación de la escritura

Dependiendo de la aplicación, la experiencia en

programación dice que los datos escritos en la EEPROM

deben ser verificados comparándolos con el dato que se

acaba de escribir. Esto debe usarse en aplicaciones en

las que un bit de la EEPROM sufre ciclos de

lectura/escritura hasta rozar el límite de las

especificaciones. Generalmente el fallo de escritura en

un bit de la EEPROM será un bit que se escribe como un

0 lógico pero devuelve un 1 debido a la pérdida de ese

bit. La siguiente porción de código es un ejemplo de

verificación del dato escrito:

EULER DEZA FIGUEROA

[email protected]

Page 30: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Uso de la EEPROM

Veamos un ejemplo de escritura típico que utiliza interrupciones:

BCF STATUS,RP0 ; Nos situamos en el banco 0

MOVF EEDATA,W ; Debemos estar en el banco 0

BSF STATUS,RP0 ; Cambiamos al banco 1

BSF EECON1,RD ; Leemos el dato que se guarda en

BCF STATUS,RP0 ; EEDATA, y cambiamos a banco 0

; A continuación se comprueba que los datos en W en EEDATA son los mismos

SUBWF EEDATA,W ; Restamos ambos valores

BTFSS STATUS,Z ; Si la operación es cero, son iguales

GOTO ERR_ESCRIT ; Si no son iguales, saltamos a ERR_ESCRIT

..... ; Si son iguales, seguimos con el programa.

EULER DEZA FIGUEROA

[email protected]

Page 31: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Rutinas EEPROM A continuación se presentan dos rutinas para escribir y leer en la EEPROM:

;**************************************************************

; EEPROM_W:

; Graba un byte en la EEPROM de datos. La dirección será la contenida

; en EEADR y el dato se le supone previamente introducido en EEDATA

;

EEPROM_W

bsf STATUS,RP0 ;Selecciona banco 1

bsf EECON1,WREN ;Permiso de escritura

movlw b'01010101' ;Secuencia de escritura

movwf EECON2

movlw b'10101010'

movwf EECON2

bsf EECON1,WR ;Orden de escritura

bcf EECON1,WREN ;Desconecta permiso de escritura

ESPERA

btfss EECON1,EEIF ;Comprobar bandera de fin de escritura

goto ESPERA

bcf EECON1,EEIF ;Reponer flag de fin de escritura

bcf STATUS,RP0 ;Selección banco 0

return

;************************************************************** EULER DEZA FIGUEROA

[email protected]

Page 32: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Rutinas EEPROM

;**************************************************************

; EEPROM_R:

; Lee un byte de la EEPROM. Se supone al registro EEADR cargado

; con la dirección a leer. En EEDATA aparecerá el dato leído.

;

EEPROM_R

bsf STATUS,RP0 ;Selección de banco 1

bsf EECON1,RD ;Orden de lectura

bcf STATUS,RP0 ;Selección de banco 0

return

;**************************************************************

EULER DEZA FIGUEROA

[email protected]

Page 33: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Rutinas EEPROM – PIC16F873

EULER DEZA FIGUEROA

[email protected]

Page 34: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Rutinas EEPROM – PIC16F873…

EULER DEZA FIGUEROA

[email protected]

Page 35: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Rutinas EEPROM – PIC16F873…

EULER DEZA FIGUEROA

[email protected]

Page 36: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Rutinas EEPROM – PIC16F873…

EULER DEZA FIGUEROA

[email protected]

Page 37: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

Rutinas EEPROM – PIC16F873…

EULER DEZA FIGUEROA

[email protected]

Referencia:

http://es.slideshare.net/daveteslandaz/

microcontroladores-asm

Page 38: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

TMR0

EULER DEZA FIGUEROA

[email protected]

Page 39: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

INTCON

EULER DEZA FIGUEROA

[email protected]

Page 40: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

INTCON

EULER DEZA FIGUEROA

[email protected]

Page 41: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

INTCON

EULER DEZA FIGUEROA

[email protected]

Page 42: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

INTCON

EULER DEZA FIGUEROA

[email protected]

Page 43: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

INTCON

EULER DEZA FIGUEROA

[email protected]

Page 44: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

INTCON

EULER DEZA FIGUEROA

[email protected]

Page 45: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa
Page 46: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

TIMER0

EULER DEZFIGUEROA

[email protected]

El bloque funcional TIMER0/WATCHDOG es un contador (registro) de

8 bits, incrementado por hardware y programable. La cuenta máxima

es de 255(el incremento es constante e independiente).

CONTADOR: Cuenta los eventos externos(a través del pin

RA4/TOCK1)

TEMPORIZADOR: Cuenta los pulsos internos del reloj

Se puede insertar un prescaler, es decir, un divisor de frecuencia

programable que puede dividir por 2, 4, 8, 16, 32, 64, 128 o 256.

La frecuencia de reloj (fosc/4). Posteriormente, con el uso del

prescaler se puede dividir la frecuencia.

El bloque del TIMER0 puede funcionar como WATCHDOG, lo que

permite que durante el funcionamiento normal del microcontrolador,

un desbordamiento (o timeout) del Watchdog provoque un reset

(Watchdog Timer Reset). Para evitar el desbordamiento se debe, cada

cierto tiempo y antes de que llegue el limite, ejecutar una instrucción

CLRWDT que borra el Watchdog y que hace comenzar un nuevo

conteo desde cero

Page 47: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

TIMER0 …

EULER DEZFIGUEROA

[email protected]

Se basa en un oscilador RC interno, independiente del oscilador

del microcontrolador y que no requiere ningún componente

externo. El Wachdog cuenta incluso si el reloj conectado a

OSC1/CLK1 y/o OSC2/CLK2 esta parado, por ejemplo por la

ejecucion de una instrucicion SLEEP o por un defecto del cristal

oscilador

Los regisros implicados en la configuracion del TIMER0/WDT son

los siguientes:

OPTION_REG: configura el «hardware» del TIMER0/WDT.

INTCON: permite trabajar con la interrupcion el TIMER0/WDT

TRISA: habilita la patilla RA4.

Page 48: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

PROGRAMAS EN CCS COMPILER

REGISTRO OPTION_REG (DIRECCION RAM : 81H,/181H) [pic16f877]

EULER DEZA FIGUEROA

[email protected]

Page 49: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

PROGRAMAS EN CCS COMPILER

REGISTRO OPTION_REG (DIRECCION RAM : 81H,/181H) [pic16f877]

EULER DEZA FIGUEROA

[email protected]

Page 50: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

PROGRAMAS EN CCS COMPILER

REGISTRO OPTION_REG (DIRECCION RAM : 81H,/181H) [pic16f877]

EULER DEZA FIGUEROA

[email protected]

TOCS: Procedencia de las señales

1= RA4/TOCK1

0=Reloj interno

TOSE: Tipo de flanco en el TOCK1/RA4:

1= Flanco descendente

0=Flanco ascendente

PSA: Asignacion del divisor de frecuencias:

1= WDT

0=TMR0

Page 51: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

PROGRAMAS EN CCS COMPILER

REGISTRO OPTION_REG (DIRECCION RAM : 81H,/181H) [pic16f877]

EULER DEZA FIGUEROA

[email protected]

PS2:PS1:PS0: Determina el divisor de frecuencias a actuar

según la siguiente tabla

El tiempo de desbordamiento del TIMER0 se calcula según la siguiente

ecuación:

Donde TCM es el ciclo maquina que se puede calcular mediante la

ecuacion:

TCM = 4/FOSC

T =TCM . Prescaler.(256 – Carga TMR0 )

Page 52: ASSEMBLER PARA MICROCONTROLADORES PIC · assembler para microcontroladores pic por: euler deza figueroa euler deza figueroa euler_df28@hotmail.com sesiÓn completa

PROGRAMAS EN CCS COMPILER

Bibliografía

"MICROCONTROLADOR PIC16F84. DESARROLLO DE

PROYECTOS". DE E. Palacios, F. Remiro y L. López.

CCS C Compiler Manual – PCD – CCS INC – FEBREO 2015

CCS C Compiler Manual – PCB/PCM/PCH– CCS INC – FEBREO

2015

Compilador C CCS y simulador PROTEUS para

Microcontroladores PIC – Eduardo García Breijo

Diseño y simulacion de Sistemas microcontrolados en lenguaje

C – Juan Ricardo Clavijo Mendoza

Programacion en CCS para Microcontroladores PIC – Aaron

Castro Bazua

Datasheets

EULER DEZA FIGUEROA

[email protected]

ING. EULER DEZA FIGUEROA

[email protected]