TEMA 2. REGISTROS, INSTRUCCIONES Y BANCOS DE MEMORIA Prof. Luis Zurita Microcontroladores IUT Cumaná
ESTRUCTURA DE DATOS BIT:  Unidad mínima de  información NIBBLE:  Grupo de 4 bits BYTE:  Grupo de 8 bits Word: Grupo de 2 BYTES Rango de los microcontroladores de 8 Bits 2 8  = 256 posibles valores para operaciones Prof. Luis Zurita Microcontroladores x x x x x x x x x x x x x BYTE ALTO BYTE BAJO x x x x x x x x LSB (Bit menos significativo) (Bit menos significativo)  MSB 0 7 IUT Cumaná
Suma Binaria Aritmética: (add) 0 + 0  = 0 0 +  1 + = 1 1  + 0  = 1 1 + 1 = 0 y llevo acarreo (Carry) para  la siguiente cifra MSB Suma Binaria Lógica: (ior) 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 1 Resta Binaria Aritmética: (sub) 0 – 0 = 0 1 – 0 = 1 1 – 1 = 0 0 – 1 = 10 y tomo prestado (Borrow) de la cifra MSB inmediata OR Exclusiva: (xor) Bits iguales producen como resultado un cero  (A = B = 0) Bits diferentes producen como resultado un uno (A ≠ B = 1) ALGUNOS TIPS PARA REPASAR Y RECORDAR Prof. Luis Zurita Microcontroladores IUT Cumaná
SISTEMAS DE NUMERACIÓN Prof. Luis Zurita Microcontroladores 1 1 1 1 F 15 1 1 1 0 E 14 1 1 0 1 D 13 1 1 0 0 C 12 1 0 1 1 B 11 1 0 1 0 A 10 1 0 0 1 9 9 1 0 0 0 8 8 0 1 1 1 7 7 0 1 1 0 6 6 0 1 0 1 5 5 0 1 0 0 4 4 0 0 1 1 3 3 0 0 1 0 2 2 0 0 0 1 1 1 0 0 0 0 0 0 Binario  (Formato 4 bits BCD) Hexadecimal Decimal IUT Cumaná
FORMATO DE SISTEMAS DE NUMERACIÓN ADMITIDOS POR EL MICROCONTROLADOR Prof. Luis Zurita Microcontroladores H’AE’ AEH 0xAE Hexadecimal B’10011011’ Binario D’126’ .126 Decimal Formato Tipo de Sistema Destino del Registro.  Si  d vale 1 , el resultado se guardará en el Registro que el programador haya  escogido. Si  d vale 0 , el resultado  se guardará en el Registro  de trabajo principal "w" d (destiny) Registro de trabajo principal. w (work) Constante . Valor fijo. k  Registro . Puede ser cualquiera que el programador desee dentro  del rango permitido. f (File) Significado Sigla IUT Cumaná
REGISTROS Y BANCOS Prof. Luis Zurita Microcontroladores IUT Cumaná
MEMORIA RAM DE REGISTROS Prof. Luis Zurita Microcontroladores IUT Cumaná
ACCEDIENDO A LOS BANCOS DE REGISTROS Prof. Luis Zurita Microcontroladores IUT Cumaná
DIRECTIVA EQU La directiva EQU permite asignar a un registro o  constante, un nombre asociado que facilita su entendimiento. Ejemplo: DATOX EQU 20H DATOY EQU 21H STATUS EQU 03H F EQU 01H Prof. Luis Zurita Microcontroladores INCLUDE .INC El uso del INCLUDE, nos permite incluir en nuestro proyecto, una plantilla que nos ahorra el trabajo de declarar todos los registros de Funciones Especiales (SFR) de la memoria RAM de registros. Es importante destacar, que en esta plantilla, todos los registros están declarados en mayúscula. Por lo que durante la elaboración de un programa, se debe respetar este formato. Ejemplo: INCLUDE <P16F84.INC> ó INCLUDE P16F84.INC IUT Cumaná
ESTRUCTURA DE UN PROGRAMA En general un programa está estructurado en tres grandes partes: a)  Encabezado:  Define el tipo de PIC con que se está trabajando, Bloque de declaraciones de variables y constantes,  b)  Configuración de registros especiales : Registro OPTION, INTCON, TMR0, puertos A y B, EECON, STATUS. b)  Cuerpo del programa : Aquí están contenidas todas las instrucciones relacionadas a la ejecución de un programa bajo un diseño individual, realizado por el programador. Prof. Luis Zurita Microcontroladores Encabezado Configuración, Declaración de Registros, Datos, Constantes. Cuerpo del Programa org end IUT Cumaná
1. En todo programa se debe incluir cual es el tipo de PIC que se empleará, incluir librerías y configurarlo: List P= 16F84A ; Tipo de PIC a utilizar include < p=16F84.inc> ; Librería asociada al PIC que se  ; está utilizando _config_RC_OSC_&_WDT_OFF ; Se seleccionan los bits de  configuración 2. Al escribir un programa se realizan y organizan las instrucciones en columnas: 1ra Columna: nombrar variables o colocar etiquetas. 2da Columna: aplicar la instrucción. 3ra Columna: contiene los datos necesarios para que pueda ejecutarse dicha instrucción. 4ta Columna: contiene comentarios, no tomados en cuenta por el microcontrolador. Ejemplo: Defina a la variable M en la posición de memoria expresada en 15H 1raC 2daC 3raC 4taC M equ 15H ; Define a la variable M en la posición 15H 3. Se emplean signos para efectuar determinadas consideraciones, por ejemplo: (;) que se emplea para colocar comentarios. El programa no toma en cuenta todo lo que está en una línea luego de dicho símbolo. ESTRUCTURA DE UN PROGRAMA Prof. Luis Zurita Microcontroladores IUT Cumaná
ESTRUCTURA DE UN PROGRAMA RESULTADO equ   0FH ;Declaro al registro  ;RESULTADO ;En la posición 0FH de la RAM org   00H goto   INICIO INICIO bsf   STATUS,5 movlw   FFH ; Configuramos los registros movwf   TRISA ; asociados a los puertos A y B movlw   00H movwf   TRISB Prof. Luis Zurita Microcontroladores 1ra Columna 2da Columna 3ra Columna 4ta Columna Etiquetas Instrucciones Operandos Comentarios IUT Cumaná
ESTRUCTURA DE UN PROGRAMA 4. Un programa siempre empieza con la instrucción “org” y termina con “end” 5. Considere las siguientes recomendaciones: Directivas, etiquetas, Variables y constantes en mayúsculas. Ejemplo: EQU, DATOA, SUMA, CONTA, RP0, Z Instrucciones en minúsculas. Ejemplo: movwf, addwf, goto, bcf, call, decfsz, etc Tabule muy bien su programa y mantenga el formato mostrado anteriormente. Coloque continuamente comentarios, a lo largo de todo el programa. Estos le ayudarán a orientarse al momento de revisar un problema de lógica del mismo o para recordar su funcionamiento. Utilice la directiva EQU, para asignarle nombres a constantes y/o variables. Esto facilitará su comprensión y lectura. 6. Se recomienda ampliamente el uso de los  diagramas de flujo , para la estructuración del respectivo programa. Estos permiten visualizar el funcionamiento a “grosso modo” del mismo. Prof. Luis Zurita Microcontroladores IUT Cumaná
¿Cuál se entiende mejor? List= 16F84 org  00H goto inicio inicio  Bsf  03H,5 movlw  1FH movwf  85H movlw  00H  movwf  86H bcf  03H,5 movlw b’11110000’ movwf  06H movf  05H,0 ExploPA  Btfsc  05H,3 goto  ExploPA goto  INVPB INVPB  comf  06H,1 End List P=16F84 ;Tipo de procesador STATUS equ 03H ; Zona de declaraciones PORTA equ 05H PORTB equ 06H TRISA equ 85H TRISB equ 86H W equ 00H F equ 01H org  00H goto  INICIO INICIO bsf  STATUS,5  ;Se pasa a banco1 movlw  1FH movwf  TRISA   ; Se configura puerto A movlw  00H  movwf  TRISB   ; Se configura puerto B bcf  SATUS,5   ; Se regresa al banco 0  movlw  b’11110000’ movwf  PORTB   ; Se escribe valor movf  PORTA,W ExploPA Btfsc  PORTA,3   ; RA3 es cero? goto  ExploPA goto  INVPB INVPB  comf  PORTB,1   ; Se activa RB1 End Sin recomendaciones Con  recomendaciones
DIAGRAMA DE FLUJO Se recomienda ampliamente que el diseñador/programador, se apoye en elementos gráficos para determinar y delimitar el funcionamiento del diseño que está encarando. Los diagramas de flujo permiten visualizar el funcionamiento lógico de cualquier programa. Las figuras rectangulares representan acciones concretas ó procesos a ser ejecutados por el programa. Los Conectores son utilizados cuando el diagrama de flujo es de medianas o grandes dimensiones y su uso evita sobrecargar de flechas al diagrama. Un rectángulo con los extremos redondeados, denota el inicio y/o el fin de un programa. El rombo representa una toma de decisión sobre una condición que debe ser evaluada ó analizada. Si la respuesta es afirmativa ó cumple con la condición, se toma una dirección y en caso contrario, se toma una dirección diferente. Las flechas indican el flujo que debe seguir el programa. Éstas indican claramente el camino ó dirección a seguir A B
Z (W) XOR (f) a (destino) xorwf f,d Ninguno Intercambia los nibbles de f a destino swapf f,d C,DC,Z (f)–(W) a (destino) subwf f,d C Rota f a la derecha a través del carry a destino rrf f,d C Rota f a la izquierda a través del carry a destino rlf f,d Ninguno No operación nop Ninguno (W) a (f) mover W a destino F movwf f Z mover f a destino movf f,d Z (W) or (f) a destino iorwf f,d Ninguno (f)+1 a destino y si resultado es 0 salta incfsz f,d Z (f)+1 a destino (incrementa f) incf f,d Ninguno (f)-1 a destino y si resultado es 0 salta (decrementa F, salta si zero) decfsz f,d Z (f)-1 a destino (decrementa f) decf f,d Z Complemento de f [(f) a (destino)] comf f,d Z 00 a (W) (borrar W) clrw Z 00 a (f) (borrar registro F) clrf f Z (W) AND (f) a (destino) andwf f,d C, DC, Z (W)+(f) a (destino) addwf f,d FLAGS AFECTADOS DESCRIPCIÓN MNEMÓNICO INSTRUCCIONES ORIENTADAS A REGISTROS
FLAGS AFECTADOS DESCRIPCIÓN MNEMÓNICO Z (W) XOR K a (W) xorlw k C, DC, Z K – (W) a W sublw k Z Modo Stand by sleep C,DC,Z Retorno de una subrutina return Ninguno Retorno con un literal en W retlw k Ninguno Retorno de una interrupción retfie Ninguno K a (W) movlw k Ninguno (W) OR K a (W) iorlw k Ninguno Go To dirección (ir a dirección) goto k Z Limpia temporizador Watch Dog clrwdt Ninguno Llamada a subrutina call k Z (W) AND K a (W) andlw k C,DC,Z (W)+ K a (W) addlw k INSTRUCCIONES CON LITERALES Y DE CONTROL Ninguno Salta si el bit  b  del reg.  f  es  1 btfss f,b Ninguno Salta si el bit  b  del reg.  f  es 0 btfsc f,b Ninguno Coloca a 1 el bit  b  del registro  f bsf f,b Ninguno Coloca a 0 el bit  b  del registro  f bcf f,b INSTRUCCIONES ORIENTADAS A BIT
Diferencias y uso de “call” y “goto” Ambas instrucciones rompen con la secuencia normal del programa, al alterar el contenido del contador de programa (PC). (Pág. 150. Angulo). “ goto” carga en el PC, la dirección de la nueva instrucción. “call” antes de cargar el PC con la dirección de la instrucción a saltar, salva la dirección de donde parte, guardándola  en la cima de pila (stack), el valor actual del PC. Luego de ejecutar la subrutina, se saca del stack la dirección de donde partió. Si no están en la subrutina llamada por “call”, las instrucciones “return” o “retlw k”, se puede presentar un error de lógica en la ejecución del programa, algo similar a no dejar migajas de pan para recordar el camino de retorno.  Nota: Recuerde que los PIC’s poseen un valor limitado de pila (stack). En el PIC 16F84, este es de 8. Esto significa que en un programa no puede haber más de 8 subrutinas anidadas. (Subrutinas dentro de subrutinas). Prof. Luis Zurita Microcontroladores IUT Cumaná

Curso Micro Tema 2

  • 1.
    TEMA 2. REGISTROS,INSTRUCCIONES Y BANCOS DE MEMORIA Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 2.
    ESTRUCTURA DE DATOSBIT: Unidad mínima de información NIBBLE: Grupo de 4 bits BYTE: Grupo de 8 bits Word: Grupo de 2 BYTES Rango de los microcontroladores de 8 Bits 2 8 = 256 posibles valores para operaciones Prof. Luis Zurita Microcontroladores x x x x x x x x x x x x x BYTE ALTO BYTE BAJO x x x x x x x x LSB (Bit menos significativo) (Bit menos significativo) MSB 0 7 IUT Cumaná
  • 3.
    Suma Binaria Aritmética:(add) 0 + 0 = 0 0 + 1 + = 1 1 + 0 = 1 1 + 1 = 0 y llevo acarreo (Carry) para la siguiente cifra MSB Suma Binaria Lógica: (ior) 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 1 Resta Binaria Aritmética: (sub) 0 – 0 = 0 1 – 0 = 1 1 – 1 = 0 0 – 1 = 10 y tomo prestado (Borrow) de la cifra MSB inmediata OR Exclusiva: (xor) Bits iguales producen como resultado un cero (A = B = 0) Bits diferentes producen como resultado un uno (A ≠ B = 1) ALGUNOS TIPS PARA REPASAR Y RECORDAR Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 4.
    SISTEMAS DE NUMERACIÓNProf. Luis Zurita Microcontroladores 1 1 1 1 F 15 1 1 1 0 E 14 1 1 0 1 D 13 1 1 0 0 C 12 1 0 1 1 B 11 1 0 1 0 A 10 1 0 0 1 9 9 1 0 0 0 8 8 0 1 1 1 7 7 0 1 1 0 6 6 0 1 0 1 5 5 0 1 0 0 4 4 0 0 1 1 3 3 0 0 1 0 2 2 0 0 0 1 1 1 0 0 0 0 0 0 Binario (Formato 4 bits BCD) Hexadecimal Decimal IUT Cumaná
  • 5.
    FORMATO DE SISTEMASDE NUMERACIÓN ADMITIDOS POR EL MICROCONTROLADOR Prof. Luis Zurita Microcontroladores H’AE’ AEH 0xAE Hexadecimal B’10011011’ Binario D’126’ .126 Decimal Formato Tipo de Sistema Destino del Registro. Si d vale 1 , el resultado se guardará en el Registro que el programador haya escogido. Si d vale 0 , el resultado se guardará en el Registro de trabajo principal &quot;w&quot; d (destiny) Registro de trabajo principal. w (work) Constante . Valor fijo. k Registro . Puede ser cualquiera que el programador desee dentro del rango permitido. f (File) Significado Sigla IUT Cumaná
  • 6.
    REGISTROS Y BANCOSProf. Luis Zurita Microcontroladores IUT Cumaná
  • 7.
    MEMORIA RAM DEREGISTROS Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 8.
    ACCEDIENDO A LOSBANCOS DE REGISTROS Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 9.
    DIRECTIVA EQU Ladirectiva EQU permite asignar a un registro o constante, un nombre asociado que facilita su entendimiento. Ejemplo: DATOX EQU 20H DATOY EQU 21H STATUS EQU 03H F EQU 01H Prof. Luis Zurita Microcontroladores INCLUDE .INC El uso del INCLUDE, nos permite incluir en nuestro proyecto, una plantilla que nos ahorra el trabajo de declarar todos los registros de Funciones Especiales (SFR) de la memoria RAM de registros. Es importante destacar, que en esta plantilla, todos los registros están declarados en mayúscula. Por lo que durante la elaboración de un programa, se debe respetar este formato. Ejemplo: INCLUDE <P16F84.INC> ó INCLUDE P16F84.INC IUT Cumaná
  • 10.
    ESTRUCTURA DE UNPROGRAMA En general un programa está estructurado en tres grandes partes: a) Encabezado: Define el tipo de PIC con que se está trabajando, Bloque de declaraciones de variables y constantes, b) Configuración de registros especiales : Registro OPTION, INTCON, TMR0, puertos A y B, EECON, STATUS. b) Cuerpo del programa : Aquí están contenidas todas las instrucciones relacionadas a la ejecución de un programa bajo un diseño individual, realizado por el programador. Prof. Luis Zurita Microcontroladores Encabezado Configuración, Declaración de Registros, Datos, Constantes. Cuerpo del Programa org end IUT Cumaná
  • 11.
    1. En todoprograma se debe incluir cual es el tipo de PIC que se empleará, incluir librerías y configurarlo: List P= 16F84A ; Tipo de PIC a utilizar include < p=16F84.inc> ; Librería asociada al PIC que se ; está utilizando _config_RC_OSC_&_WDT_OFF ; Se seleccionan los bits de configuración 2. Al escribir un programa se realizan y organizan las instrucciones en columnas: 1ra Columna: nombrar variables o colocar etiquetas. 2da Columna: aplicar la instrucción. 3ra Columna: contiene los datos necesarios para que pueda ejecutarse dicha instrucción. 4ta Columna: contiene comentarios, no tomados en cuenta por el microcontrolador. Ejemplo: Defina a la variable M en la posición de memoria expresada en 15H 1raC 2daC 3raC 4taC M equ 15H ; Define a la variable M en la posición 15H 3. Se emplean signos para efectuar determinadas consideraciones, por ejemplo: (;) que se emplea para colocar comentarios. El programa no toma en cuenta todo lo que está en una línea luego de dicho símbolo. ESTRUCTURA DE UN PROGRAMA Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 12.
    ESTRUCTURA DE UNPROGRAMA RESULTADO equ 0FH ;Declaro al registro ;RESULTADO ;En la posición 0FH de la RAM org 00H goto INICIO INICIO bsf STATUS,5 movlw FFH ; Configuramos los registros movwf TRISA ; asociados a los puertos A y B movlw 00H movwf TRISB Prof. Luis Zurita Microcontroladores 1ra Columna 2da Columna 3ra Columna 4ta Columna Etiquetas Instrucciones Operandos Comentarios IUT Cumaná
  • 13.
    ESTRUCTURA DE UNPROGRAMA 4. Un programa siempre empieza con la instrucción “org” y termina con “end” 5. Considere las siguientes recomendaciones: Directivas, etiquetas, Variables y constantes en mayúsculas. Ejemplo: EQU, DATOA, SUMA, CONTA, RP0, Z Instrucciones en minúsculas. Ejemplo: movwf, addwf, goto, bcf, call, decfsz, etc Tabule muy bien su programa y mantenga el formato mostrado anteriormente. Coloque continuamente comentarios, a lo largo de todo el programa. Estos le ayudarán a orientarse al momento de revisar un problema de lógica del mismo o para recordar su funcionamiento. Utilice la directiva EQU, para asignarle nombres a constantes y/o variables. Esto facilitará su comprensión y lectura. 6. Se recomienda ampliamente el uso de los diagramas de flujo , para la estructuración del respectivo programa. Estos permiten visualizar el funcionamiento a “grosso modo” del mismo. Prof. Luis Zurita Microcontroladores IUT Cumaná
  • 14.
    ¿Cuál se entiendemejor? List= 16F84 org 00H goto inicio inicio Bsf 03H,5 movlw 1FH movwf 85H movlw 00H movwf 86H bcf 03H,5 movlw b’11110000’ movwf 06H movf 05H,0 ExploPA Btfsc 05H,3 goto ExploPA goto INVPB INVPB comf 06H,1 End List P=16F84 ;Tipo de procesador STATUS equ 03H ; Zona de declaraciones PORTA equ 05H PORTB equ 06H TRISA equ 85H TRISB equ 86H W equ 00H F equ 01H org 00H goto INICIO INICIO bsf STATUS,5 ;Se pasa a banco1 movlw 1FH movwf TRISA ; Se configura puerto A movlw 00H movwf TRISB ; Se configura puerto B bcf SATUS,5 ; Se regresa al banco 0 movlw b’11110000’ movwf PORTB ; Se escribe valor movf PORTA,W ExploPA Btfsc PORTA,3 ; RA3 es cero? goto ExploPA goto INVPB INVPB comf PORTB,1 ; Se activa RB1 End Sin recomendaciones Con recomendaciones
  • 15.
    DIAGRAMA DE FLUJOSe recomienda ampliamente que el diseñador/programador, se apoye en elementos gráficos para determinar y delimitar el funcionamiento del diseño que está encarando. Los diagramas de flujo permiten visualizar el funcionamiento lógico de cualquier programa. Las figuras rectangulares representan acciones concretas ó procesos a ser ejecutados por el programa. Los Conectores son utilizados cuando el diagrama de flujo es de medianas o grandes dimensiones y su uso evita sobrecargar de flechas al diagrama. Un rectángulo con los extremos redondeados, denota el inicio y/o el fin de un programa. El rombo representa una toma de decisión sobre una condición que debe ser evaluada ó analizada. Si la respuesta es afirmativa ó cumple con la condición, se toma una dirección y en caso contrario, se toma una dirección diferente. Las flechas indican el flujo que debe seguir el programa. Éstas indican claramente el camino ó dirección a seguir A B
  • 16.
    Z (W) XOR(f) a (destino) xorwf f,d Ninguno Intercambia los nibbles de f a destino swapf f,d C,DC,Z (f)–(W) a (destino) subwf f,d C Rota f a la derecha a través del carry a destino rrf f,d C Rota f a la izquierda a través del carry a destino rlf f,d Ninguno No operación nop Ninguno (W) a (f) mover W a destino F movwf f Z mover f a destino movf f,d Z (W) or (f) a destino iorwf f,d Ninguno (f)+1 a destino y si resultado es 0 salta incfsz f,d Z (f)+1 a destino (incrementa f) incf f,d Ninguno (f)-1 a destino y si resultado es 0 salta (decrementa F, salta si zero) decfsz f,d Z (f)-1 a destino (decrementa f) decf f,d Z Complemento de f [(f) a (destino)] comf f,d Z 00 a (W) (borrar W) clrw Z 00 a (f) (borrar registro F) clrf f Z (W) AND (f) a (destino) andwf f,d C, DC, Z (W)+(f) a (destino) addwf f,d FLAGS AFECTADOS DESCRIPCIÓN MNEMÓNICO INSTRUCCIONES ORIENTADAS A REGISTROS
  • 17.
    FLAGS AFECTADOS DESCRIPCIÓNMNEMÓNICO Z (W) XOR K a (W) xorlw k C, DC, Z K – (W) a W sublw k Z Modo Stand by sleep C,DC,Z Retorno de una subrutina return Ninguno Retorno con un literal en W retlw k Ninguno Retorno de una interrupción retfie Ninguno K a (W) movlw k Ninguno (W) OR K a (W) iorlw k Ninguno Go To dirección (ir a dirección) goto k Z Limpia temporizador Watch Dog clrwdt Ninguno Llamada a subrutina call k Z (W) AND K a (W) andlw k C,DC,Z (W)+ K a (W) addlw k INSTRUCCIONES CON LITERALES Y DE CONTROL Ninguno Salta si el bit b del reg. f es 1 btfss f,b Ninguno Salta si el bit b del reg. f es 0 btfsc f,b Ninguno Coloca a 1 el bit b del registro f bsf f,b Ninguno Coloca a 0 el bit b del registro f bcf f,b INSTRUCCIONES ORIENTADAS A BIT
  • 18.
    Diferencias y usode “call” y “goto” Ambas instrucciones rompen con la secuencia normal del programa, al alterar el contenido del contador de programa (PC). (Pág. 150. Angulo). “ goto” carga en el PC, la dirección de la nueva instrucción. “call” antes de cargar el PC con la dirección de la instrucción a saltar, salva la dirección de donde parte, guardándola en la cima de pila (stack), el valor actual del PC. Luego de ejecutar la subrutina, se saca del stack la dirección de donde partió. Si no están en la subrutina llamada por “call”, las instrucciones “return” o “retlw k”, se puede presentar un error de lógica en la ejecución del programa, algo similar a no dejar migajas de pan para recordar el camino de retorno. Nota: Recuerde que los PIC’s poseen un valor limitado de pila (stack). En el PIC 16F84, este es de 8. Esto significa que en un programa no puede haber más de 8 subrutinas anidadas. (Subrutinas dentro de subrutinas). Prof. Luis Zurita Microcontroladores IUT Cumaná