Teoriapic16f84a Uch

Curso: Microprocesadores Escuela Academico Profesional de Ingenieria Electronica EL MICROCONTROLADOR PIC16F84A Caracte

Views 83 Downloads 4 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

EL MICROCONTROLADOR PIC16F84A Características Técnicas Repertorio de 35 Instrucciones. Todas las instrucciones se ejecutan en un solo ciclo excepto las de salto que necesitan dos. Versiones de 4 MHz (PIC16F84A-04) y 20 MHz (PIC16F84A - 20). Memoria de programa FLASH de 1 K x 14 Bits. Memoria de datos RAM de 68 bytes. Memoria de datos EEPROM de 64 bytes. Pin 1: -----RA2 Pin 2: -----RA3 Pin 3: -----RA4/TOCKI Pin 4: -----Reset Pin 5: -----Tierra (GND) Pin 6: -----RB0/INT Pin 7: -----RB1 Pin 8: -----RB2 Pin 9: -----RB3 Pin 10:-----RB4 Pin 11:-----RB5 Pin 12:-----RB6 Pin 13:-----RB7 Pin 14:-----Vcc Pin 15:-----Osc2 Pin 16:-----Osc1 Pin 17:-----RA0 Pin 18:-----RA1

RA2

1

18

RA1

RA3

2

17

RA0

RA4/TOCKI

3

16

OSC1/CLKIN

MCLR

4

15

OSC2/CLKOUT

PIC16F84A Vss

5

14

VDD

RB0/INT

6

13

RB7

RB1

7

12

RB6

RB2

8

11

RB5

RB3

9

10

RB4

.

-------------------------------------------------------Any I/O Pin Port A Port B -------------------------------------------------------Sink current 25mA 80mA 150mA Source current 20mA 50mA 100mA ING. JOSE ESTRADA MONTES

15 registros de funciones especiales. STACK (Pila) con 8 niveles de profundidad. Modos de direccionamiento inmediato, directo, indirecto y relativo. 4 fuentes de interrupciones: A través de una señal aplicada al pin 6 (RB0/INT). Por desbordamiento del temporizador TMR0. Por cualquier cambio en RB4 a RB7 del Puerto B. Fin de la escritura de la memoria EEPROM. 10,000 ciclos de borrado/escritura de la memoria FLASH. 10’000,000 ciclos de borrado/escritura de la memoria EEPROM. 40 años de retención de la memoria EEPROM como mínimo. 13 pines de E/S control individual de la dirección. Contador / Temporizador TMR0 de 8 Bits con divisor programable. Docente: Ing. José Estrada Montes

1

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

Power-on Reset (POR). Power-up Timer (PWRT). Oscillator Start-up Timer (OST). Watchdog Timer (WDT). Protección de código. Modo de bajo consumo SLEEP. Puede operar bajo 4 modos diferentes de oscilador. Programación en serie a través de dos pines. Tecnología de baja potencia y alta velocidad CMOS Flash/EEPROM. Rango de alimentación: 2.0 a 6.0 V. Consumo típico de 2 mA a 5 V y 4 MHz y de 1µA en modo SLEEP a 2V. Arquitectura Interna Las altas prestaciones de los microcontroladores PIC derivan de las características de su arquitectura. Están basados en una arquitectura tipo HARVARD que posee buses y espacios de memoria por separado para el programa y los datos, lo que hace que sean más rápidos que los microcontroladores basados en la arquitectura tradicional de VON NEUMANN. MEMORIA DE DATOS

MEMORIA DE CODIGO BUS DE DIRECCION DE INSTRUCCION INSTRUCCIONES 1k x 14

14

BUS DE DIRECCION DE DATOS PROCESADOR

BUS DE INSTRUCCIONES

8

90 x 8

BUS DE DATOS

ING. JOSE ESTRADA MONTES

Otra característica es su juego de instrucciones reducido (35 instrucciones) RISC, donde la mayoría (33) se ejecutan en un solo ciclo de reloj excepto las instrucciones de salto que necesitan dos. Posee una ALU (Unidad Aritmético Lógica) de 8 Bits capaz de realizar operaciones de desplazamientos, lógicas, sumas y restas. Posee un Registro de Trabajo (W) no direccionable que se usa a través de instrucciones en operaciones con la ALU. Dependiendo de la instrucción ejecutada, la ALU puede afectar a los Bits de Acarreo (C ), Acarreo Digital (DC) y Cero (Z) del Registro de Estado (STATUS Register). La pila es de 8 niveles. No existe ningún señalizador ó bandera (Flag) que indique que esté llena, por lo que será el programador el que deberá controlar que no se produzca su desbordamiento. Siendo: RISC (Reduced Instruction Set Computer). CISC (Complex Instruction Set Computer). Docente: Ing. José Estrada Montes

2

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

Este microcontrolador posee características especiales para reducir componentes externos con lo que se reducen los costos y se disminuye el consumo. Posee 4 diferentes modos de oscilador, desde el simple circuito oscilador RC con lo que se disminuyen los costos hasta la utilización de un oscilador a cristal (XTAL). En el modo SLEEP el consumo se reduce significativamente y puede “despertarse (WAKE UP)” al microcontrolador utilizando tanto interrupciones internas como externas y señal de reset. Además posee un temporizador llamado Watchdog Timer (Perro Guardián) que protege al microcontrolador de “colgarse”’ debido a fallos en el software producidos por bucles infinitos. MEMORIA DE PROGRAMA La memoria de programa está organizada con palabras de 14 Bits con un total de 1 K, es de tipo FLASH, que durante el funcionamiento es de solo lectura, sólo se ejecutará la instrucción contenida en esta memoria, pudiendo almacenar en ella una cantidad limitada de datos. En una sola instrucción se agrupa el código de la instrucción y el operando o su dirección. MEMORIA DE PROGRAMA 0000 H

VECTOR RESET

0004 H

VECTOR INTERRUPCIÓN

1K FLASHRAM

12

0 PC

STACK NIVEL 1

" " " " " "

03FF H 0400 H

NO IMPLEMENTADO PILA

STACK NIVEL 8

1FFF H 13

0

12

ING. JOSE ESTRADA MONTES

Docente: Ing. José Estrada Montes

3

0

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

El vector de Reset se encuentra en la posición 0000h y el vector de Interrupción en la 0004h. Puede decirse que la Memoria de Programa en realidad comienza en la posición 0005h y termina en 03FFh.

MEMORIA DE DATOS (MEMORIA DE REGISTROS) Está organizada en dos bancos de registros, cada banco se divide a su vez en dos áreas. La primera es la de SFR (Registros de Funciones Especiales) que controlan el funcionamiento del dispositivo, estos se emplean para el control del funcionamiento de la CPU y de los periféricos.

SFR

MEMORIA DE DATOS 00h

INDF

INDF

80h

01h

TMR0

OPTION

81h

02h

PCL

PCL

82h

03h

STATUS

STATUS

83h

04h

FSR

FSR

84h

05h

PORTA

TRIS A

85h

06h

PORTB

TRIS B

86h 87h

07h 08h

EEDATA

EECON1

88h

09h

EEADR

EECON2

89h

0Ah

PCLATH

PCLATH

8Ah

INTCON

8Bh

0Bh

GPR

0Ch

4Fh

INTCON . 68 REGISTROS PROPÓSITO GENERAL (SRAM)

8Ch MAPEADOS EN EL BANCO 0 CFh

50h

D0h

7Fh

FFh BANCO 0

BANCO 1

ING. JOSE ESTRADA MONTES

La segunda área (68 bytes SRAM) es la de GPR (Registros de Propósito General), y puede accederse a ellos tanto directa como indirectamente.

Docente: Ing. José Estrada Montes

4

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

Estas dos áreas están divididas en dos bancos, el banco 0 y el banco 1. Para cambiar de banco se utiliza un Bit que esta en la posición 5 del registro STATUS (RP0). Para direccionar la Memoria de Datos se emplean dos modos de direccionamiento, el directo y el indirecto. En el direccionamiento directo, los 7 Bits de menos peso del código OP de la instrucción proporcionan la dirección en la posición de la página, mientras que el Bit RP0 de STATUS selecciona el banco. En el direccionamiento indirecto el operando de la instrucción hace referencia al registro IDNF, que ocupa la posición 00h del área de datos. Se accede a la posición que apunta el registro FSR 04h del banco 0. Los 7 Bits de menos peso de FSR seleccionan la posición y su Bit de más peso, seleccionan el banco. CONTADOR DE PROGRAMA (Program Counter - PC) Tal como se presenta en la Figura, el rango de direcciones que cubre el PIC16F84A en su memoria de programa llega desde la 0000h a la 03FFh, ó sea un total de 1,024 posiciones. Se ignoran normalmente los 3 Bits de más peso de una posición, cuando se apunta a una dirección como por ejemplo a 20h a través de una instrucción, traslapándose con 420h, 820h, C20h, 1020h, 1420h ó 1C20h, debe tenerse cuidado asignando apropiadamente dichos 3 Bits. Los PIC 16F84A tienen 1K palabras de 14 Bits, en la Memoria de Programa y aunque el Contador de Programa (PC) dispone de 13 Bits, en el direccionamiento de la misma solo emplea los 10 Bits de menos peso. Al igual que todos los registros específicos que controlan la actividad del procesador, el Contador de Programa está implementado sobre un par de posiciones de la memoria RAM. Cuando se escribe el Contador de Programa como resultado de una operación de la ALU, los 8 Bits de menos peso del PC residen en el registro PCL, que ocupa, repetido, la posición 2 de los dos bancos de la memoria de datos. Los Bits de más peso, PC, residen en los 5 Bits de menos peso del registro PCLATH, que ocupa la posición 0Ah ó 8Ah de los dos bancos de la memoria RAM. En las instrucciones GOTO y CALL de la gama media los 11 Bits de menos peso del PC provienen del código de la instrucción y los otros dos de los Bits PCLATH . Con los 11 Bits que se cargan en el PC desde el código de las instrucciones GOTO y CALL, se puede direccionar una página de 2 K de la memoria. Los Bits restantes PC tienen la misión de apuntar uno de los 4 bancos del mapa de memoria y, en los modelos de PIC que alcanzan ese tamaño, dichos Bits proceden de PCLATH. La Pila (STACK) es una zona aislada de las memorias de instrucciones y datos. Tiene una estructura LIFO, en la que el último valor guardado es el primero que sale. Tiene 8 niveles de profundidad cada uno con 13 Bits. Funciona como un “buffer” circular, de manera que el valor que se obtiene al realizar el noveno “desenpilado (pop)” es igual al que se obtuvo en el primero.

Docente: Ing. José Estrada Montes

5

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

La instrucción CALL y las interrupciones originan la carga del contenido del PC en el nivel superior o «cima» de la Pila. El contenido del nivel superior se saca del STACK al ejecutar las instrucciones RETURN, RETLW y RETFIE. El contenido del registro PCLATH no es afectado por la entrada o salida de información del STACK. Los PIC no disponen de instrucciones específicas (push y pop) para manejar directamente al STACK, tampoco se dispone de ningún Flag (señalizador) que indique cuando se produce el desborde de los 8 niveles de la Pila.

12

PCH 10 9

11

PCL (ADDRESS 02h, 82h) 8

7

0

Incl ui do e n el cod ig o de op eraci on (OP CODE) d efi ni do hasta 2K , au nqu e so lo h ay 1K e n la me moria de p ro grama de l PIC1 6F8 4A.

Pa ra p arte s mayores a 2 K(1 pa gi na) de memo ri a de p ro grama

7

6

PCLATH (0Ah, 8Ah) 5 4 3 2 1

X

X

X

0

Pa ra p arte s mayores a 2 K(1 pa gi na) de memo ri a de p ro grama

12

11

PCH 10 9

PCL 8

7

0

Re sul tado d el ALU

De PCLATH

ING. JOSE ESTRADA MONTES

REGISTROS PORTA, PORTB, TRISA Y TRISB Los puertos de entrada/salida son PORTA (5 pines - posición 05h) y PORTB (8 pines – posición 06h) y sus registros de configuración son: TRISA(posicion85h) y TRISB (posición 86h), Dichas posiciones son de la memoria de datos. En la siguiente figura como se configuran los puertos como entrada ó salida.

Docente: Ing. José Estrada Montes

6

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

MICROCONTROLADOR

PINES DE ENTRADA/ SALIDA

0

1

REGISTRO PORT_

1

0

1

0

1

1

REGISTRO TRIS_

REGISTROS: PORTA PORTB TRISA TRISB

ING. JOSE ESTRADA MONTES

CONFIGURACION DE PINES EN EL MICROCONTROLADOR PIC16F84A

REGISTRO DE ESTADO El registro de Estado (STATUS) contiene varios Bits de estado de la unidad central, el estado aritmético de la ALU, el estado del reset y un par de Bits de selección de página denominados RP1 y RP0. Ocupa la posición 03h del banco 0 y la 83h del banco 1. REGISTRO STATUS 7 6 5 4 ADDRESS 03h, 83h IRP

RP1

RP0

T0

3

2

1

PD

Z

DC

0 C

POR = 00011XXX Flag Carry /Borrow Para las instrucciones ADDWF, ADDLW SUBLW y SUBWF

Seleccion de Banco 0 (00h-7Fh) 1 (80h-FFh)

Flag Digit Carry /Borrow Para las instrucciones ADDWF, ADDLW SUBLW y SUBWF Flag Cero(Zero) 0 = Si no es Cero 1 = Si el resultado de una operacion aritmetica o logica es Cero

Mantenga en "0"

Bit Power Down 0 = Por ejecucion de instruccion SLEEP 1 = Despues de conectar la alimentacion o por la ejecucion de instruccion CLRWDT Bit Time-Out (Desbordamiento) 0 = Un desbordamiento de WDT ha ocurrido 1 = Despues de conectar la alimentacion y ejecucion de la instruccion CLRWDT o SLEEP

ING. JOSE ESTRADA MONTES

Docente: Ing. José Estrada Montes

7

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

IRP: Register Bank Select. No se emplea en el PIC16F84A, manténgalo a cero. RP0 y RP1: Register Bank Select. Selección de banco de la memoria de registros y datos con direccionamiento directo. Cada banco contiene 128 bytes. En el PIC16F84A sólo se usa RP0, RP1 debe mantenerse a “0”. TO: Time Out 1 = Tras conectar la alimentación Vdd ó ejecutar CLRWDT o SLEEP 0 = Desbordamiento del Perro Guardián WDT. PD: Power Down 1 = Tras conectar la alimentación Vdd ó ejecutar CLRWDT. 0 = Al ejecutar la instrucción SLEEP. Z: Cero 1 = El resultado de una operación aritmética ó lógica es 0. 0 = El resultado es distinto de 0. DC (Digit Carry) – Acarreo en el 4º Bit de menos peso. C (Carry) – Acarreo en el 8º Bit. Es el Bit de acarreo (carry) en operaciones de suma ADDWF y ADDLW y borrow en operaciones de sustracción SUBWF y SUBLW. También los emplean las instrucciones RLF y RRF de rotación de Bits. 1 = Acarreo en la suma en el Bit de mayor peso. 0 = Acarreo (borrow) en la resta y no en la suma. Grabación del Microcontrolador PIC16F84A. INICIO ESTRUCTURA CODIGO FUENTE

ENSAMBLADO

SIMULACION

F

¿ERRORES?

V

GRABACION DEL MICROCONTROLADOR

FIN ING. JOSE ESTRADA MONTES

Docente: Ing. José Estrada Montes

8

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

Formato de un Programa en Lenguaje Ensamblador para PIC

Dir e ctiv a Asse mble r Encabe za do

Etique ta

Est o e s Equat e

Dir e ccion He x o Nume ro

Equat e s ( EQU)

Orige n ( ORG)

Etique ta

Instruc cion

Dato o Comentario Etique ta

Progr ama

Est e e s e l Fin END

Fin ( END)

ING. JOSE ESTRADA MONTES

EL CONJUNTO DE INSTRUCCIONES DE LENGUAJE ENSAMBLADOR MPASM PARA EL MICROCONTROLADOR PIC16F84A (GAMA MEDIA) El microcontrolador PIC16F84A tiene 35 instrucciones. El Set de instrucciones se presenta clasificado por el tipo de funcionamiento. Las instrucciones usadas contienen el código binario de la operación y la dirección binaria o dato. Las instrucciones tienen 14 Bits de tamaño. Nos enfocaremos en las instrucciones del lenguaje ensamblador.

Docente: Ing. José Estrada Montes

9

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

INSTRUCCIONES DE MOVIMIENTO O DEFINICIÓN DE DATOS movlw Sintaxis: Operandos:

movlw k 0 f 255

Operación: Flags afectados: Código de OP:

k → (W) Ninguno 11 00xx kkkk kkkk

Descripción:

Se carga el registro W con el literal (dato) k.

movf Sintaxis: Operandos:

movf f,d 0 f 127 d [0,1]

Operación: Flags afectados: Código de OP:

(f) → (destino) Z 00 1000 dfff ffff

Descripción:

Mueve la copia del registro seleccionado f a: W si d es 0 ó a f si d es 1 ( d= destino).

movwf Sintaxis: Operandos:

movwf f 0 f 127

Operación: Flags afectados: Código de OP:

(W) → (f) Ninguno 00 0000 1fff ffff

Descripción:

Mueve la copia del registro W al registro seleccionado f.

clrf Sintaxis: Operandos:

clrf f 0 f 127

Operación:

00h → (f)

Flags afectados: Código de OP:

1→Z Z 00 0001 1fff ffff

Descripción:

Limpia el registro seleccionado f con 0 y Z se pone a 1.

Docente: Ing. José Estrada Montes

10

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

clrw Sintaxis: Operandos:

clrw Ninguno

Operación:

00h → (W)

Flags afectados: Código de OP:

1→Z Z 00 0001 0xxx xxxx

Descripción:

Limpia el registro W con 0 y Z se pone a 1.

comf Sintaxis: Operandos:

comf f 0 f 127 d [0,1]

Operación: Flags afectados: Código de OP:

( f ) → (destino) Z 00 1001 Dfff ffff

Descripción:

Complementa el registro seleccionado f. Si d es 0 el resultado se pone en W; y si es 1 en f El flag Z se activa si el resultado es 0.

decf Sintaxis: Operandos:

decf f 0 f 127 d [0,1]

Operación: Flags afectados: Código de OP:

( f ) - 1 → (destino) Z 00 0011 dfff ffff

Descripción:

Decrementa en 1 el registro seleccionado f. Si d es 0 el resultado se pone en W; si es 1 en f

incf Sintaxis: Operandos:

incf f 0 f 127 d [0,1]

Operación: Flags afectados: Código de OP:

( f ) + 1 → (destino) Z 00 1010 dfff Ffff

Descripción:

Incrementa en 1 el registro seleccionado f. Si d es 0 el resultado se pone en W; si es 1 en f

Docente: Ing. José Estrada Montes

11

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

bcf Sintaxis: Operandos:

bcf f,b 0 f 127 0 b 7

Operación: Flags afectados: Código de OP:

0 → (f b ) Ninguno 01 00bb bfff ffff

Descripción:

Pone a 0 el Bit de la posición b del registro f.

bsf Sintaxis: Operandos:

bsf f,b 0 f 127 0 b 7

Operación: Flags afectados: Código de OP:

1 → (f b ) Ninguno 01 01bb bfff ffff

Descripción:

Pone a 1 el Bit de la posición b del registro f.

rlf Sintaxis: Operandos:

rlf f,d 0 f 127 d [0,1]

Operación: 7

6

5

4

3

C

2

1

0 (Rotate Left f through Carry)

Registro f

Flags afectados: Código de OP:

C

Descripción:

Rota los Bits en el registro seleccionado f una posición a la izquierda. La rotación de Bits pasan a través del bit de acarreo C (Carry). Si d es 0 el resultado se almacena en W; si es 1 en f

00 1101 dfff ffff

Docente: Ing. José Estrada Montes

12

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

rrf Sintaxis: Operandos:

rrf f,d 0 f 127 d [0,1]

Operación: 7

6

5

4

3

2

1

0

C

(Rotate Right f through Carry) Registro f

Flags afectados: Código de OP:

C

Descripción:

Rota los Bits en el registro seleccionado f una posición a la derecha. La rotación de Bits pasan a través del bit de acarreo C (Carry). Si d es 0 el resultado se pone en W; si es 1 en f

00 1100 dfff ffff

swapf Sintaxis: Operandos:

swapf f,d 0 f 127 d [0,1]

Operación:

(f ) → (d )

Flags afectados: Código de OP:

(f ) → (d ) Ninguno 00 1110 dfff ffff

Descripción:

Intercambia los nibbles (4 Bits) de mas peso con los nibbles de menos peso del registro seleccionado f. Si d es 0 el resultado se pone en W; si es 1 en f

INSTRUCCIONES DE CONTROL DE FLUJO DEL PROGRAMA goto Sintaxis: Operandos:

goto k 0 f 2047

Operación:

k → (PC )

Flags afectados: Código de OP:

(PCLATH ) → (PC ) Ninguno 10 1kkk kkkk kkkk

Descripción:

Salto incondicional. El PC se carga con k(10 bits) y los bits 3 y 4 de PCLATH en los 11 y 12 de PC. Demora dos ciclos de maquina.

Docente: Ing. José Estrada Montes

13

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

call Sintaxis: Operandos:

call k 0 k 2047

Operación:

(PC)+1 → TOS k → (PC )

Flags afectados: Código de OP: Descripción:

(PCLATH ) → (PC ) Ninguno 10 0kkk kkkk kkkk Guarda la dirección de vuelta en el Stack y luego llama a subrutina (dirección cargada en PC). Demora dos ciclos de maquina.

return Sintaxis: Operandos:

return Ninguno

Operación: Flags afectados: Código de OP:

TOS → (PC) Ninguno 00 0000 0000 1000

Descripción:

Carga el PC con el valor que esta en la parte superior del Stack efectuando un retorno de la subrutina. Demora dos ciclos de maquina.

retlw Sintaxis: Operandos:

retlw 0 k 255

Operación:

k → (W)

Flags afectados: Código de OP:

TOS → (PC) Ninguno 11 01xx kkkk kkkk

Descripción:

Carga a W con k y luego PC con el valor que esta en la parte superior del Stack efectuando un retorno de la subrutina. Demora dos ciclos de maquina.

retfie Sintaxis: Operandos:

retfie Ninguno

Operación:

TOS → (PC)

Flags afectados: Código de OP:

1 → GIE Ninguno 00 0000 0000 1001

Descripción:

Carga el PC con el valor que esta en la parte superior del Stack efectuando un retorno de la rutina de interrupción. Pone a 1 el bit GIE. Demora dos ciclos de maquina.

Docente: Ing. José Estrada Montes

14

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

btfsc Sintaxis: Operandos: Operación: Flags afectados: Código de OP: Descripción:

btfsc f,b 0 f 127 0 b 7 Salta si (f ) = 0 Ninguno 01 10bb bfff ffff Si es 0 el Bit de la posición b del registro f, salta una instrucción si es cierto, en otro caso continua con la siguiente instrucción.

btfss Sintaxis: Operandos: Operación: Flags afectados: Código de OP: Descripción:

btfss f,b 0 f 127 0 b 7 Salta si (f ) = 1 Ninguno 01 11bb bfff ffff Si es 1 el Bit de la posición b del registro f, salta una instrucción si es cierto, en otro caso continua con la siguiente instrucción.

decfsz Sintaxis: Operandos: Operación: Flags afectados: Código de OP: Descripción:

decfsz f,d 0 f 127 d Є `[0,1] (f) – 1→(destino); salta si el resultado es “0” (Decrement f, Skip if 0) Ninguno 00 1011 dfff ffff Decrementa el registro f, el resultado si d es 0 se pone en W; si es 1 en f. Si dicho resultado es 0 salta una instrucción, en otro caso continua con la siguiente instrucción

incfsz Sintaxis: Operandos: Operación: Flags afectados: Código de OP: Descripción:

incfsz f,d 0 f 127 0 Є [0,1] (f)+1→(destino); salta si el resultado es “0” (Increment f, Skip if 0) Ninguno 00 1111 dfff ffff

Incrementa el registro f, el resultado si d es 0 se pone en W; si es 1 en f. Si dicho resultado es 0 salta una instrucción, en otro caso continua con la siguiente instrucción Docente: Ing. José Estrada Montes 15

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

INSTRUCCIONES DE NO OPERACIÓN nop Sintaxis: Operandos: Operación: Flags afectados: Código de OP:

nop Ninguno No operar Ninguno 00 0000 0xx0 0000

Descripción:

No realiza nada. Consume un ciclo de instrucción.

INSTRUCCIONES DE CONTROL DEL MICROCONTROLADOR clrwdt Sintaxis: Operandos: Operación:

clrwdt Ninguno

00h WDT 0 WDT prescaler 1

T0

1 PD T 0 , PD Flags afectados: Código de OP:

00 0000 0110 0100 Borra el Watchdog (WDT) y su preescaler. Los Bits T0 y PD del registro de estado se ponen a 1.

Descripción:

sleep Sintaxis: Operandos: Operación:

Flags afectados: Código de OP: Descripción:

sleep Ninguno 00h WDT

0

WDT prescaler

1

T0

1 PD T 0 , PD 00 0000 0110 0011

Pone al Co a modo de reposo ó bajo consumo. Para al oscilador y TMR0, TD es 0 TO es 1 del registro de estado. Se levanta (activa) por: reset (pin MCLR ) , ó desborde del Watchdog ó generación de interrupción (que no sea TMR0). Docente: Ing. José Estrada Montes 16

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

INSTRUCCIONES LÓGICAS andlw Sintaxis: Operandos:

andlw k 0 k 255

Operación: Flags afectados: Código de OP:

(W) AND (K) → (W) Z 11 1001 kkkk kkkk

Descripción:

Realiza la operación AND Bit a Bit del registro W con k, y el resultado se guarda en W.

andwf Sintaxis: Operandos:

andwf f,d 0 f 127 d Є [0,1]

Operación: Flags afectados: Código de OP:

(W) AND (f) → (destino) Z 00 0101 dfff ffff

Descripción:

Realiza la operación AND Bit a Bit del W con f. Si d es 0 el resultado se pone en el registro W; si es 1 en el registro f

iorlw Sintaxis: Operandos:

iorlw k 0 f 255

Operación: Flags afectados: Código de OP:

(W) OR (k) → (W) Z 11 1000 kkkk kkkk

Descripción:

Realiza la operación OR Bit a Bit del registro W con k, y el resultado se guarda en W.

iorwf Sintaxis: Operandos:

iorwf f,d 0 f 127 d [0,1]

Operación: Flags afectados: Código de OP:

(W) OR (f) → (destino) Z 00 0100 dfff ffff

Descripción:

Realiza la operación OR Bit a Bit del W con f. Si d es 0 el resultado se pone en el registro W; si es 1 en el registro f

Docente: Ing. José Estrada Montes

17

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

xorlw Sintaxis: Operandos:

xorlw k 0 k 255

Operación: Flags afectados: Código de OP:

(W) XOR k → (W) Z 11 1010 kkkk kkkk

Descripción:

Realiza la operación OR exclusivo(XOR) Bit a Bit del registro W con k, y el resultado se guarda en W.

xorwf Sintaxis: Operandos:

xorwf f,d 0 f 127 d [0,1]

Operación: Flags afectados: Código de OP:

(W) XOR (f) → (destino) Z 11 0110 dfff ffff

Descripción:

Realiza la operación OR exclusivo(XOR) Bit a Bit de W con el registro seleccionado f. Si d es 0 el resultado se pone en el registro W; si es 1 en el registro f

INSTRUCCIONES ARITMÉTICAS addwf Sintaxis: Operandos:

addwf f,d 0 k 127 d [0,1]

Operación: Flags afectados: Código de OP:

(W) + (f) → (destino) C, DC, Z 00 0111 dfff ffff

Descripción:

Suma el contenido del registro W con el registro f y el resultado, si d es 0 el se pone en el registro W; si es 1 en el registro f

addlw Sintaxis: Operandos:

addlw k 0 k 255

Operación: Flags afectados: Código de OP:

(W) + k → (W) C, DC, Z 11 111x kkkk kkkk

Descripción:

Suma el contenido del registro W con el literal (numero) k y el resultado se guarda en el registro W.

Docente: Ing. José Estrada Montes

18

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

sublw Sintaxis: Operandos:

sublw k 0 k 255

Operación: Flags afectados: Código de OP:

k - (W) → (W) C, DC, Z 11 110x kkkk kkkk

Descripción:

Resta (por el método de complemento a 2) el literal k con el contenido de W (k-w) y el resultado se guarda en el registro W.

subwf Sintaxis: Operandos:

subwf f,d 0 f 127 d [0,1]

Operación: Flags afectados: Código de OP:

(f) - (W) → (destino) C, DC, Z 00 0010 dfff ffff

Descripción:

Resta (por el metodo de complemento a 2) el registro f. con el contenido de W (f-w) el resultado si d es 0 se pone en el registro W; si es 1 en el registro f

NOTA: Refiriéndose a: MOVF f,0 ; d=0 Mover la copia del registro seleccionado f a f, parece que no tiene sentido, sólo que puede usarse como un método por probar el Cero (Z) en el registro de estado (STATUS). El Flag Z si es afectado por la instrucción de MOVF. FORMATO DE LAS INSTRUCCIONES DEL LENGUAJE ENSAMBLADOR f = El registro seleccionado d = El destino es: 0 = el resultado se guarda en W 1 = el resultado se guarda en el registro seleccionado f k = constante o literal o instrucción literal o dato k = La etiqueta de la dirección (Instrucciones CALL y GOTO) b = Posición de un Bit (Instrucciones orientadas a Bit) Hay cuatro categorías de instrucciones que son: 1)- Instrucciones orientadas a byte Designador del Registro elegido Dirección Hexadecimal (2-Digitos) o la Etiqueta especificada por el Registro usado por la instruccion

f, d Instruccion Designador del Destino Especifica donde se Ubicará el Resultado de la Operación d = 0 Registro W d = 1 Registro f

Docente: Ing. José Estrada Montes

19

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

2)-Instrucciones orientadas a Bit Designador del Registro elegido Dirección Hexadecimal (2-Digitos) o la Etiqueta especificada por el Registro usado por la instruccion

f, b Instruccion Designador de la posicion del Bit Hex 0 -> 7 o la etiqueta Definida por la declaracion

3)-Instrucciones literales Literal = Cons tante Literales : Hexadecim al 0Fh Binary b'00001111' Decim al .16

k Ins truccion

4)-Instrucciones de control de flujo(CALL y GOTO) Etiqueta dirección

k Ins truccion

NUMEROS HEXADECIMALES vs. ENSAMBLADOR MPASM El uso de números del hexadecimal con los PIC está lleno de inconsistencias. Pero a través de estos ejemplos podrá disipar sus dudas. La declaración del puerto B en la dirección hexadecimal 06 en un programa puede realizarse de las maneras siguientes: portb equ 6 06 06h h'06' 0x06 La instrucción de MOVLW se usa para cargar el registro W con los literales hexadecimal como sigue: movlw 00 00h h'00' 0x00 0f ff no permitido ffh no permitido h'ff’ 0xff Docente: Ing. José Estrada Montes

20

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

Los números hexadecimales pueden usarse de la siguiente forma: 2 Digitos Hexadecimales

{ {

0xXX

Esto significa que lo que sigue es un numero Hexadecimal, esta notacion viene del Lenguaje C

0fh

{

movlw

Significa que es un número Hexadecimal

2 Digitos Hexadecimales

NÚMEROS BINARIOS Y DECIMALES vs. ENSAMBLADOR de MPASM Los literales binarios y decimales pueden escribirse como se muestran: movfw b ' 00001111 ' movfw d'16 ' movfw .16 Sabiendo que el ' es el apóstrofe.

;binary ;decimal ;decimal

CARÁCTERES de ASCII vs. ENSAMBLADOR de MPASM La mayoría que los carácteres ASCII pueden ser incluidos en un programa realizando lo siguiente: movlw

'A'

;Letra mayúscula representado ;en ASCII

MODOS DE DIRECCIONAMIENTO 1)-Direccionamiento inmediato Usa una instrucción literal que carga el dato de la memoria de programa al registro W. El dato (literal) es parte de la instrucción. movlw

45h

2)-Direccionamiento directo Este modo es realmente directo. La dirección especificada sigue es parte final de la instrucción como puede verse en el ejemplo. clrf

temp

Docente: Ing. José Estrada Montes

;Limpia el registro con nombre temp 21

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

3)-Direccionamiento indirecto El primer registro f0 (INDF) llamado direccionamiento indirecto o registro indirecto ubicado en la dirección 0h no esta implementado físicamente. Usando f4 (FSR) que es el registro que selecciona registros esta ubicado en la dirección 4h. Con FSR direccionaremos de cualquier registro (memoria de registros y datos) en el cual tomaremos o guardaremos un dato a través de INDF. Raro, pero es así cómo funciona. Si tomas una dirección a través de FSR de un registro conocido, agregándole un desplazamiento (offset) o índice, a esto se llama "Direccionamiento indexado" en microcontroladores. ;asumimos una dirección especificada como pos1 movf movwf movf ;continua

pos1,w fsr indf,w

;el contenido de pos1 se carga en W ;W se carga en fsr ;carga el dato posicionado por fsr en W

Una aplicación práctica es el siguiente ejemplo que envía caracteres de los 16 archivos posicionados entre 20h y 2Fh de la memoria de datos, a un display LCD. moviw 20h ;se inicializa el apuntador movwf fsr otro movf indf, w ;se obtiene el dato apuntado call send ;enviar el caracter al LCD incf fsr,f ;incrementa el apuntador btfss fsr, 4 ;¿se envio los 16 caracteres? goto otro ;no, entonces busca otro 4)-Direccionamiento Relativo El direccionamiento relativo altera el contenido del Contador de Programa. Esto significa saltar a lo que indique el Contador de Programa esto es Direccionamiento Relativo a este punto. Las instrucciones GOTO y CALL en los PIC16F84A, manejan automáticamente el direccionamiento relativo porque la dirección esta incluida en la instrucción. Los 5 Bits de mas peso del Contador de Programa (PC) que están en el registro PCLATH pueden ser escritas por cualquier instrucción que grabe el PC. Todos los saltos pueden ser precedidos PCLATH asegurándose que contiene los Bits correctos. Puesto que estamos evitando la paginación de la memoria del programa, nos limitaremos a usar las primeras 256 posiciones de la memoria del programa para los saltos. También Direccionamiento Relativo se realiza con las instrucciones de prueba del Bit y salta una posición (btfss f,b o btfsc f,b). Así como la carga de direcciones en el Contador de Programa, se puede realizar desde una instrucción de un grupo de instrucciones RETLW (Tabla LookUp) o grupo de instrucciones GOTOs (Tabla de saltos). Uso de la instrucción RETLW en acceso de Tablas de datos (Tablas LookUp Direccionamiento Relativo). La instrucción RETLW causa que el registro W sea cargado con el valor literal k (RETLW k). Esto es útil para la implementación de Tabla de Datos en la memoria del programa. Cantidades ilimitadas de datos pueden guardarse en la

Docente: Ing. José Estrada Montes

22

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

memoria del programa y pueden accederse de esta manera. Como un ejemplo, tenemos una aplicación donde un “cuenta” (registro) es incrementado (de 0 a 9) y queremos mostrar el resultado en un Display a 7 segmentos Cátodo Común. Los códigos a 7 segmentos son almacenados como una tabla en la memoria de programa y cada código esta unido a una instrucción RETLW. Ésta es una manera de guardar datos de 8-Bit en la memoria de programa de 14 Bits y ganar acceso a esta memoria. El código esta en una tabla y puede accesarse llamando a una subrutina que contiene la tabla. Después de que el “contador” se ha incrementado, el contenido es cargado en W y la subrutina es llamada. La primera instrucción en la subrutina suma el contenido de W (índice) a PC (Contador del Programa). La ejecución salta a una instrucción RETLW que contiene el código a 7-seg. que corresponde al contenido del “cuenta”. La ejecución retorna al programa principal y el registro W ahora contiene el código a 7 segmentos correspondiente. El código es enviado entonces al Display a 7 segmentos Cátodo Común por ejemplo a través del puerto B (ver figura).

Desplazamiento en W

Llama a la Subrutina a la subrutina

Adiciona el desplazamiento que esta en W a PC RETLW RETLW RETLW RETLW " Table " " " RETLW

Retorna de la subrutina

Mueve los datos al Puerto B para el Display

ING. JOSE ESTRADA MONTES

Docente: Ing. José Estrada Montes

23

ADDWF

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

portb pc cuenta w f

Segmentos

equ equ equ equ equ . . . clrf movf call movwf call incf

5h 2h 0ch 0h 1h

cuenta cuenta, w Segmentos portb delay_1S cuenta,f

;contador contiene a w ;llama subrutina ;muestra resultados en el Display ;llama subrutina de retardo de un segundo ;incrementa cuenta

addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw . . .

pc, f 3fh 06h 53h 4fh 66h 6dh 7dh 7h 7fh 6fh

;adiciona desplazamiento(w) a pc ;0 siete-segmentos ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9

;contador de programa ;contador

EL TIMER (TEMPORIZADOR/CONTADOR) El Timer en el PIC16F84A se refiere al TMR0. Temporizador significa que puede determinar intervalos concretos de tiempo. Contador se refiere a contar pulsos que se producen en el exterior del Co. El Timer TMR0 presenta las siguientes características: Es un registro de 8 Bits de Lectura/Escritura. Tiene un prescaler (divisor) programable por software. Puede funcionar con Clock interno y/o externo. Se puede seleccionar el flanco positivo o negativo para Clock externo. Es un registro de Incremento (contador ascendente). Puede generar una interrupción por desbordamiento que ocurre en el, cambio de FFh a 00h con Flag de salida. El Timer del PIC16F84A trabaja como Temporizador cuando se carga en el registro un valor inicial que se incrementa con un pulso cada ciclo de instrucción (Fosc/4) hasta que se desborda y avisa activando un Flag señalizador(T0IF) y/o provocando una interrupción. El Timer funciona como Contador al contar pulsos que se aplican en el pin RA4/T0CKI, y al desbordarse advierte esta circunstancia con un Flag (T0IF) y/o provocando una interrupción. Docente: Ing. José Estrada Montes

24

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

El trabajar con interrupción significa que tiene la posibilidad el Co de una interrupción por desbordamiento y es capaz de realizar otras tareas mientras esta realizando el proceso de Conteo y/o Temporización. O mejor dicho el Timer se encarga de las labores de control de tiempo desahogando de esto al Co, pero con al salvedad que siempre esta enterado del fin de termino del contador. El Registro OPTION sirve para configurar el comportamiento de TMR0 y del Perro Guardian (WDT-WatchDog Timer) y programar la división de frecuencia. EL REGISTRO OPTION REGISTRO OPTION 7 6 5

4

3

2

1

0

ADDRESS 81h RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

POR = FFh

Valor del Prescaler Asignacion del Prescaler 0 = TMR0 1 = WDT Selecciona f lanco de Clock externo de TMR0 0 = Incremento por f lanco positiv o 1 = Incremento por f lanco negativ o

Valor del Prescaler PS2 PS1 PS0 TMR0 0 0 0 1:2 0 0 1 1:4 0 1 0 1:8 0 1 1 1:16 1 0 0 1:32 1 0 1 1:64 1 1 0 1:128 1 1 1 1:256

WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128

Selecciona f uente de clock de TMR0 0 = Clock interno del ciclo de instrucion 1 = Externo a trav es del Pin T0CKI Selecciona f lanco de la Interrupcion externa 0 = Interrupcion por f lanco negativ o 1 = Interrupcion por f lanco positiv o Habilitacion de resistencias Pull-Up del Puerto B 0 = Habilitado 1 = Desabilitado

ING. JOSE ESTRADA MONTES

La fuente de clock puede ser puede ser interno proveniente del oscilador por ejemplo el XTAL (Fosc/4) o de una entrada de clock que ingresa por el pin T0CKI, el manejo del registro OPTION se realiza en conjunto con el diagrama de bloques siguiente, a fin de una mayor comprensión.

Docente: Ing. José Estrada Montes

25

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

DATA Bus

CLKOUT (Fosc/4) 0

RA4/T0CKI 1

T0SE

8

M U X 1

1

0

T0CS

T0IF ON OVERFLOW

M U X 2

SYNC 2 CICLOS

TMR0

(SINCRONISMO CON RELOJ RETRASO DE 2 CICLOS)

PSA 0

WATCHDOG TIMER

1

M U X 3

8 bit (DIVISOR DE FRECUENCIA Prescaler POST-DIVISOR) 8

PSA BIT HABILITADOR DE WDT

(MUX 8 A 1)

0

M U X 4

PS2 : PS0 PS2:PS1

1

M U X 5

PSA

ING. JOSE ESTRADA MONTES

WDT TIME OUT (DESBORDAMIENTO)

DIAGRAMA DE BLOQUES DEL TIMER 0 Y WDT

Para calcular los tiempos que se controlan con TMR0 se usa las dos formulas siguientes: Temporización= 4.Tosc . (Valor cargado en TMR0) . (Rango del divisor) (1) Valor a cargar en TMR0=Temporización / 4 . Tosc . Rango del divisor. (2) Debemos tener en cuenta dos particularidades del Registro OPTION: En el Bit 6 esta INTEDG (Interrupt Edge) que sirve en conjunto con el Registro INTCON par determinar el tipo de flanco que provocara una interrupción externa al aplicarse al pin RB0/INT (Si es “1” el flanco es ascendente y si es”0” el flanco es descendente) . El Bit RBPU (RB Pull Up) activa si vale “0” las resistencias Pull-Up dentro del Co que se conectan entre los pines del Puerto B y Vcc. EL WATCHDOG (WDT) Es un Contador ascendente cuyo objetivo es generar un Reset general cuando se desborda (Time Out). Su control de tiempo es independiente y se basa en su propio oscilador (una red RC interna) con un periodo de desborde de18 mS. Este periodo puede ampliarse usando el Prescaler hasta 2.3Seg. (Relación 1:128) El refresco (poner a cero) de WDT solo se puede hacer por software usando la instrucción “clrwdt”, de este modo se evita el desborde de WDT y por consiguiente el reset general. El WDT se habilita ó no en el proceso de grabación del Co. El Bit TO (del registro STATUS) se activa con “0” cuando el reset se ha ocasionado por desborde de WDT.

Docente: Ing. José Estrada Montes

26

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

SLEEP (MODO DE BAJO CONSUMO) Muchas veces sistemas basados en microcontroladores (normalmente a pilas) tienen que permanecer inactivos durante mucho tiempo a la espera de un suceso del exterior. Con la finalidad de reducir al mínimo el consumo de energía (aproximadamente 2 A) se induce al Co a un modo de reposo ó de bajo consumo el consumo de energía (SLEEP), en este estado “el Co esta dormido”. Para producir este estado basta con ejecutar la instrucción “sleep”, provoca lo siguiente: Bajo consumo. El WDT se refresca pero sigue funcionando. El Oscilador principal y TMR0 dejan de funcionar. Los puertos mantienen su estado. Los Bits Power-Down PD y Time-Out TO del registro STATUS toman los valores “1” y “0” respectivamente Para que se despierte al Co puede realizarse de las siguientes maneras: El pin MCLR se active(provocando un Reset). El WDT se desborda y pasa a ejecutar la siguiente instrucción. Por una interrupción que no sea TMR0. La causa de un Reset se puede identificar a traves de los Bits TO y PD LA INTERRUPCION En la mayoría de proyectos es necesario que el Co realice lecturas de entradas digitales, pueden ser pulsadores, sensores, etc. y el modo de realizarlo con la máxima eficacia es la Interrupción. Una interrupción consiste en el mecanismo por el cual un evento interno ó externo puede interrumpir la ejecución de un programa en cualquier momento. A partir de entonces se produce automáticamente un salto a una subrutina de atención a la interrupción, este atiende inmediatamente el evento y retorna luego a la ejecución del programa exactamente donde estaba en el momento de ser interrumpido, continuando su tarea justo donde lo dejo. La interrupción tiene la característica de la inmediatez, y nace de la necesidad de ejecutar una subrutina en el preciso instante, considerándose su intervención urgente. La Operación de las Interrupciones en el PIC 16F84A El Co esta ejecutando en curso las instrucciones, si el PIC acepta una interrupción desarrolla los siguientes pasos: 1. Salva en el nivel “1” del STACK el contenido del PC (contador de Programa), que contiene la dirección de la siguiente instrucción del Programa Principal. 2. En el PC se carga el valor del Vector de Interrupción que es la dirección 0004h, donde comienza la rutina de atención a las interrupciones. 3. Se ejecuta la instrucción existente en al dirección 0004h de la Memoria de Código. Normalmente la primera instrucción de la rutina de interrupción suele ser un salto (GOTO) a la dirección verdadera del comienzo de dicha rutina. 4. La rutina que atiende a la interrupción comienza realizando dos labores importantes: Docente: Ing. José Estrada Montes

27

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

a. Averiguar la causa que ha ocasionado la interrupción, para lo cual revisa los Flags. b. Guardar en la memoria de datos RAM, área GPR, los valores de algunos registros del procesador con el valor que ha quedado en el Programa Principal. Si estos registros los maneja la Rutina de Interrupción modificará sus contenidos, y cuando se retorne al Programa Principal no dispondrán de la misma información que cuando se produjo la interrupción. 5. Al llegar la ultima instrucción de la rutina de atención a la interrupción, que es el retorno (RETFIE), se carga en el PC el contenido del nivel “1” del STACK, retornando al programa principal en el punto que se abandono. Causas de Interrupción Hay 04 causas que pueden ocasionar una interrupción del PIC16F84A: 1. La activación de un pin, producido por un flanco de tensión en el pin 6 (RB0/INT). La causa se denomina interrupción externa. 2. Cuando se desborda el temporizador TMR0 (Su contenido pasa de FFh a 00h). 3. Cuando cambia el estado lógico de cualquiera de los 04 pines de mas peso del puerto B (RB7:RB4). 4. Cuando finaliza el ciclo de escritura de un Byte en una posición de la EEPROM de datos. Una dificultad inicial que presentan estas interrupciones es que sea cual sea la que ha originado la interrupción, la rutina de atención siempre empieza en la dirección del Vector de Interrupción que es la 0004 H. Otros procesadores disponen de un Vector de Interrupción para cada causa que la produce. Con el PIC 16F84A no queda otro remedio que comenzar averiguando cuál ha sido la causa de la interrupción, testeando los Flags, y desviarse al procedimiento particular que atiende a cada una. El Control de la Interrupción A veces, muchos programas no precisan la ayuda de las Interrupciones y no las usan. Por este motivo existe una llave general que permita o prohiba las interrupciones en su conjunto. En el PIC16F84A existe un Registro de Control en el área SFR de la RAM, llamado INTCON, que regula el funcionamiento de las interrupciones. El Bit de más peso de INTCON se denomina GIE ( Permiso Global de Interrupciones). Si se escribe este Bit y se pone GIE = 0, todas las interrupciones están prohibidas y el procesador no admite ninguna. En cambio, si escribimos GIE = 1 el procesador admite cualquier Interrupción que se produzca y que el programador haya habilitado para que actúe. Es decir, cada Interrupción dispone de un Bit particular de permiso que también debe habilitarse si se quiere que cuando la causa de la Interrupción se produzca el procesador inicie las fases de dicha Interrupción. Al completarse la rutina de atención a la interrupción y ejecutarse la última instrucción RETFIE , que es la de retorno de la rutina de interrupción, el Bit GIE vuelve a tomar el valor 1, para que al retomar el programa principal queden habilitadas las interrupciones y puedan atenderse.

Docente: Ing. José Estrada Montes

28

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

REGISTRO INTCON Este registro contiene varios Bits de selección de fuentes de interrupción, el Bit de habilitación global de interrupciones y varios Flags que indican la causa de una interrupción.

GIE: Habilitación global de las interrupciones. 1: Concede el permiso de las interrupciones. 0: Cancela el permiso de las interrupciones. EEIE: Habilitación de la interrupción de fin de escritura en la memoria EEPROM. 1: Activada. 0: Desactivada. T0IE: Habilitación de la interrupción TMR0 por desborde (overflow) 1: Activada 0: Desactivada.

Docente: Ing. José Estrada Montes

29

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

INTE: Habilitación de la interrupción externa (pin 6 RB0/INT). 1: Activada 0: Desactivada. RBIE: Habilitación de interrupción por cambio de estado entre RB4:RB7 1: Activada 0: Desactivada. T0IF: Flag del desborde (overflow) del TMR0. 1: El TMR0 ha desbordado. Se borra por software. 0: El TMR0 no ha desbordado. INTF: Flag de interrupción externa por la existencia de señal de entrada en el pin 6 (RB0/INT), 1: La entrada de interrupción se ha activado. Se borra por software. 0: No hay interrupción externa. RBIF: Flag del cambio de estado entre RB4 a RB7 del puerto B. 1: Cambio de estado de cualquier línea. Se borra por software. 0: Ninguna entrada del Puerto B ha cambiado. LOGICA DE INTERRUPCION T0IF T0IE Despierta al µco que esta en modo SLEEP INTF INTE

Interrumpe al CPU

RBIF RBIE

EEIF EEIE

GIE ING. JOSE ESTRADA MONTES

LA MEMORIA DE DATOS EEPROM Este Co dispone de una zona de memoria de datos implementada con tecnología EEPROM, con una capacidad de 64 posiciones de 8 bits cada una. Su principal inconveniente es que la duración del ciclo de escritura o borrado de una posición es muy lento, comparado con la velocidad del procesador, ya que puede llegar a los 10 milisegundos, en los que un PIC16F84A, trabajando a 10 Mhz, ejecuta más instrucciones que las 1,024 que caben en su memoria de programa. Además, este tiempo es crítico y hay que esperar a que termine completamente la operación para iniciar otra nueva. Para las operaciones de escritura y borrado en la memoria EEPROM necesita una tensión Vpp alta, del orden de 13.8 VDC, que se introduce por el pin MCLR /Vpp. Docente: Ing. José Estrada Montes

30

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

El Mapa de la Memoria EEPROM Aunque la EEPROM es una parte de la memoria de datos, sus posiciones no están mapeadas junto a los registros SFR y GPR de la RAM, que es volátil, ocupa un espacio de memoria independiente. Para manejar el espacio propio de la EEPROM hay que utilizar cuatro registros y uno opcional que están en la Memoria de Datos (Memoria de Registros) y son los siguientes: EEDATA. dirección 08h (Banco 0), en este registro se encuentra el dato de la posición dada por el registro EEADR. EEADR direccion 09h (Banco 0), En este registro muestra la posición del dato de la Memoria EEPROM.. EECON1 direccion 88h (Banco 1), es el registro de configuración de cómo manejar La escritura y/o lectura de un dato de la EEPROM.. EECON2 direccion 89h (Banco 1), es un registro de ratificación en la operación de Escritura de un dato en la EEPROM. INTCON direccion 0Bh(Banco 0) y 8Bh (Banco1), este registro es opcional y solo es usadoen Interrupciones, cuando se necesita que se genere una interrupción en el fin de escritura de un dato en la EEPROM. Manejo Básico de la EEPROM Los ciclos de lectura y escritura de la EEPROM se realizan sobre la posición de un Byte. El ciclo de escritura conlleva al borrado previo y automático de la información que contenía la posición accedida. El tiempo del ciclo de escritura está controlado por un temporizador integrado en el chip. El gran problema es que dicho tiempo no sólo es grande, unos 10 mS como máximo, sino que es variable según la temperatura y el voltaje aplicado. Como este tiempo es tan crítico, el final de la operación está controlado por un Flag (EEIF), que puede complementarse con una interrupción al completarse la escritura de una posición. Si con los Bits correspondientes de la Palabra de Configuración se protege el código del microcontrolador, se puede continuar leyendo y escribiendo la EEPROM. Para acceder a una posición de la EEPROM hay que cargar en el registro EEADR la dirección de la misma, mientras que en EEDATA se carga el dato a escribir, o bien, se deposita el dato leído en él. Como los registros EEADR y EEDATA son de 8 bits, los dos bits de más peso del registro EEADR siempre valen cero, sabiendo que el mayor valor que se puede cargar es 3FH. Desarrollo de una Operación de Lectura La lectura de una posición de la EEPROM comienza cargando en EEADR la dirección a acceder. Luego se pone a 1 el bit RD del registro EECON1. En el siguiente ciclo el dato leído estará disponible en el registro EEDATA. Dicho dato permanecerá en este registro hasta que se realice otra nueva operación de lectura o escritura en la EEPROM. Ver algoritmo de la subrutina EE_LEER.

Docente: Ing. José Estrada Montes

31

Curso: Microprocesadores

Escuela Academico Profesional de Ingenieria Electronica

EE_LEER

CAMBIO A BANCO 1

ORDEN DE LECTURA RD