Circuitos Integrados Programables

PIC
EL OBJETIVO DE ESTE CURSO ES APRENDER A PROGRAMAR EN LENGUAJE ASSEMBLER

PIC

Prof. Nelson Añón

1

PIC 16F628A

PIC

Prof. Nelson Añón

2

PIC 16F628A

PIC

Prof. Nelson Añón

3

Introducción a la Programación en Lenguaje Assembler
¿Qué son las Instrucciones?: El set de instrucciones de un microcontrolador es el set de entradas binarias que producen acciones definidas durante un ciclo de instrucción. Un set de instrucciones es para el microcontrolador lo mismo que una tabla de verdad es para una compuerta lógica, etc. Instrucciones Binarias: Una instrucción es un patrón de dígitos binarios el cual debe estar a disposición del microcontrolador en el tiempo y forma que éste lo requiera. Por ejemplo: cuando un microcontrolador PIC 16F628A recibe el patrón binario de 14 bits 001011 0 0000100 el cual corresponde al formato de la instrucción decfsz 0x04,0: 001011 0 0000100
PIC Prof. Nelson Añón 4

PIC Prof. Programa en Assembler: ¿Cómo introducimos un Programa en Assembler en un microcontrolador? Tenemos que traducirlo. compilarlo a hexadecimal ó a binario. Se puede hacer instrucción a instrucción ³a mano´ ó a través de un programa en una PC llamado Código Fuente.Introducción a la Programación en Lenguaje Assembler Programa: un Programa es una serie de instrucciones que causan que el microcontrolador realice una tarea en particular. Nelson Añón 5 .

Comentaremos algunas convenciones que usaremos: PIC Prof.Introducción a la Programación en Lenguaje Assembler Convenciones en la escritura del código fuente: Para hacer la tarea más sencilla del programador. se usan algunas convenciones. En general las convenciones son cualquier acción que facilitan la revisión y comprensión de un programa. Nelson Añón 6 .

Nelson Añón 7 . Comentarios explicando cada línea de código PIC Prof.ASM Los ficheros de listado llevarán la extensión *.LST Los ficheros de código objeto llevarán la extensión *.ERR Los ficheros ejecutables llevarán la extensión *.OBJ Los ficheros de errores llevarán la extensión *.Introducción a la Programación en Lenguaje Assembler Los ficheros de código fuente llevarán la extensión *.HEX Los mnemónicos escritos en mayúscula hacen que el código escrito sea más visible.

PIC Prof. ETIQUETAS OPERACIÓN OPERANDO COMENTARIO Lectura movf movwf portA. Nelson Añón 8 .lee el puerto A .Introducción a la Programación en Lenguaje Assembler Características del Assembler: Campos del Lenguaje Assembler.escribe en reg1 El campo del código de operación es el único que nunca puede estar vacío. éste siempre contiene una instrucción ó una directiva del Assembler. como se muestra debajo. Las instrucciones están divididas en un número de campos. El campo del operando ó dirección puede contener una dirección ó un dato. ó puede estar en blanco.0 reg1 .

No agregar nunca otros caracteres. El programador asignará una etiqueta a una línea de instrucción ó agregará un comentario según su conveniencia. PIC Prof. particularmente después de comas que separan operandos. No utilice espacios extra.0. Nelson Añón 9 . No use caracteres delimitadores (espacios y tabulaciones) en nombres ó etiquetas. Ej.Introducción a la Programación en Lenguaje Assembler El campo del comentario ó de etiquetas es opcional. movlw 35. Delimitadores: Los campos van separados sólo con espacios y/o tabulaciones.

el Assembler la define como el equivalente a la dirección del primer byte correspondiente a esa instrucción. Esta etiqueta puede volver a usarse en otro lugar pero como operando de una instrucción. Nelson Añón 10 . El Assembler reemplazará ésta etiqueta por el valor de cuando fue creada. Se usan frecuentemente en las instrucciones de salto.Introducción a la Programación en Lenguaje Assembler Etiquetas: La etiqueta es el primer campo en una línea en Lenguaje Assembler y puede no existir. PIC Prof. Si una etiqueta está presente.

0 PIC Prof. nop).Introducción a la Programación en Lenguaje Assembler No pueden usarse como nombres de etiquetas las palabras ya reservadas por el Assembler (ORG. EQU) ó nombres de instrucciones (movf. Por ej.: Leer movf : : goto leer portA. incf. Nelson Añón 11 .

PIC Prof.Introducción a la Programación en Lenguaje Assembler Mnemónicos (códigos de operación): La tarea principal del Assembler es la traducción de los códigos de operación (mnemónicos) en sus equivalentes binarios. Nelson Añón 12 . El Assembler debe hacer algo más que traducir los códigos de operación. También debe determinar cuántos operandos requiere la instrucción y de qué tipo. El Assembler realiza esta tarea usando una tabla como si lo haríamos ³a mano´.

Las directivas se utilizan como comandos escritos en el código fuente para realizar un control directo ó ahorrar tiempo a la hora de ensamblar. Para usar estas directivas ó seudo-operandos. el programador las coloca en el campo de código de operaciones. designan áreas de RAM para el almacenamiento de datos temporales.Introducción a la Programación en Lenguaje Assembler Directivas: Algunas instrucciones del Lenguaje Asssembler no se traducen directamente a instrucciones del lenguaje máquina. Nelson Añón 13 . definen símbolos. Éstas instrucciones son directivas para el Assembler. y si lo requiere la directiva. PIC Prof. éstas asignan al programa ciertas áreas de memoria. colocan tablas ó datos constantes en memoria y permiten referencias a otros programas. una dirección ó dato en el campo de dirección.

END End Explicación: indica fin de programa ETIQUETAS A DIRECCIONES DE PROGRAMA: Explicación: son muy útiles para usar con instrucciones CALL (llamada a subrutina) ó GOTO (salto) PIC Prof.Introducción a la Programación en Lenguaje Assembler Las directivas de uso frecuente son instrucciones para el compilador. Nelson Añón 14 . #DEFINE #define<nombre> [<valor a reemplazar>] Explicación: declara una cadena de texto como subtítulo de otra.

Nelson Añón 15 .Introducción a la Programación en Lenguaje Assembler EQU portA equ 0x05 Explicación: define una constante de ensamble INCLUDE Include<PIC16F628A.inc> Explicación: incluye en el programa un archivo con código fuente ORG org 0x00 Explicación: ensambla a partir de la dirección especificada PIC Prof.

Los programas y los datos pueden estar alojados en diferentes áreas de memoria dependiendo de la configuración de memoria. PIC Prof. subrutinas de interrupción y otros programas deben comenzar en locaciones de memoria fijados por la estructura del microcontrolador. rutinas de comienzo. subrutinas ó datos residirán.Introducción a la Programación en Lenguaje Assembler EQU (Equate ± Equivalente): La directiva EQU permite al programador igualar nombres a datos ó direcciones. datos numéricos. direcciones de comienzo. Los nombres utilizados se refieren generalmente a direcciones de dispositivos. ORG (Origin ± Origen): La directiva Origen permite al programador especificar la posición de memoria donde programas. Nelson Añón 16 . direcciones fijas. posiciones de byte.

vector de interrupción goto interrupción org 0x05 Inicio movf portA. sino también las direcciones de cada instrucción y datos del programa). programa de servicio de interrupción. aquí comienza el programa (lee portA) PIC Prof.Introducción a la Programación en Lenguaje Assembler La directiva ORG hace al compilador colocar el código que le sigue en una nueva dirección de memoria (la salida del compilador no sólo coloca los códigos de operación.0. Nelson Añón 17 . Por ej.: Reset org 0x00 goto inicio org 0x04. Usualmente se la utiliza para: reset.

Números decimales: La mayoría de los ensambladores asumen el punto como números decimales a no ser que se indiquen de otra manera.: movlw . Por ej.Introducción a la Programación en Lenguaje Assembler Operandos y Direcciones: Los ensambladores permiten elegir con libertad el tipo de elemento a colocar en el campo de operando ó dirección. Nelson Añón 18 .120 Significa: ³mover el número literal 120 (decimal) al registro de trabajo w´ PIC Prof.

: 05h 0x05 hexadecimal binario b¶00000101¶ Inclusión de código: Algunos ensambladores permiten incluir código fuente (partes de programa) desde otros archivos.asm Esta línea de programa le indica al compilador que incluya el código que se encuentra en el archivo lectura. Nelson Añón 19 .Introducción a la Programación en Lenguaje Assembler Otros sistemas de numeración: Los ensambladores también aceptan números hexadecimales. Por ej.asm como si fuese parte del propio programa.: include lectura. Por ej. binarios. PIC Prof.

se guarda con extensión ³.hex´ (archivo hexadecimal).hex´ resultante lo podemos transferir usando la tarjeta electrónica cargador de PIC a la memoria del PIC16F628A.Instrucciones para Ensamblar Programas Podemos usar para escribir los programas el ³block de notas de windows´ ó el MPLAB. Al archivo con extensión ³. el programa compilador sugerido es el MPASM (assembler de microsoft) que usa la empresa Microchip. PIC Prof. Existen una serie de directivas que son para el ensamblador y nos hacen la tarea de programación más sencilla. Nelson Añón 20 .asm´ y se lo convierte (ensambla) con un programa ensamblador a formato ³. Una vez escrito el Programa.

recordemos que rp0 y rp1 son los bits que seleccionan en el registro de Status y empiezan en 00.Instrucciones para Ensamblar Programas Con estas directivas haremos los siguientes ejemplos: #DEFINE #DEFINE BANCO1 BANCO0 BSF BCF STATUS. cuando escribamos BANCO1 se pondrá a ´1´ el bit de selección de banco y cuando escribamos BANCO0 se pondrá a 0 el bit de selección de banco y pasaremos al banco1. Nelson Añón 21 .5 STATUS. PIC Prof.6 A partir de ahora.

PIC Prof. El Programa se escribe en cuatro columnas separadas por tabuladores. nos ayudarán las siguientes pautas: 1. En la segunda columna se ponen las instrucciones (bcf. Al principio van los EQU y los #DEFINE. Nelson Añón 22 . clrw.Programación en Lenguaje Assembler ¿Cómo se ordena un Programa? Cuando desarrollamos un Programa. 2. btfss). 4. La primera columna se ponen las etiquetas ó las direcciones de programa. 3. después comenzamos con el Programa.

PIC Prof. Nelson Añón 23 . En la cuarta columna se ponen los comentarios que crea pertinente seguidos de un punto y coma.Programación en Lenguaje Assembler ¿Cómo se ordena un Programa? Cuando desarrollamos un Programa. En la tercera columna se ponen los registros a los que afecta la instrucción. 6. nos ayudarán las siguientes pautas: 5.

La primera columna se utiliza para nombrar variables ó colocar etiquetas. La segunda columna se utiliza para aplicar la instrucción. hay que incluir sus librerías y configurarlo. PIC Prof. Nelson Añón 24 . La cuarta columna contiene datos útiles para el programador pero que no son tenidos en cuanta por el microcontrolador. En todo Programa se debe decir cuál es el tipo de PIC que se empleará. Al escribir un Programa se realizan las sentencias en columnas. La tercera columna contiene los datos necesarios para que pueda ejecutarse dicha instrucción. 2.Aprendiendo a Programar 1.

0x20 4ª Col. AZUL 2ª Col. EQU es la directiva que significa asignar ó definir. . 1ª Col. Nelson Añón 25 .Aprendiendo a Programar Ejemplo: Vamos a definir a la variable AZUL en la posición de memoria expresada en número hexadecimal 20.definí a la variable AZUL en la posición 20 AZUL es la variable que definí. 0x20 es la posición de la memoria de datos expresado en hexadecimal. PIC Prof. EQU 3ª Col.

lugares a donde va el programa cuando así lo requiere. PIC número y puede estar expresado en sistemas de numeración decimal. que son ¶¶ se utilizan para decir que lo que está entre ellas es el .Aprendiendo a Programar 3. El Programa no toma en cuenta todo lo que está en una línea luego de dicho signo. binario ó hexadecimal. se emplea para colocar observaciones. : se utiliza normalmente para definir etiquetas. Nelson Añón 26 . Prof. Por ejemplo: efectuar determinadas . Un Programa siempre deberá comenzar con la directiva ORG y terminar con la directiva END. se emplea para definir un número en decimal. 4. Se emplean signos para consideraciones.

OP:001000dfff ffff movf d=0 d=1 PIC Prof.Instrucciones para Ensamblar Programas MOVF movf instrucción d={0.d operandos LECTURA 0=< f=< 127 W M(f) M(f)=0 M=memoria M(f)=posición de memoria Cód. Nelson Añón 27 .1} M(f) d=0 d=1 flagZ=1 f.

OP:0000001fff ffff PIC Prof.Instrucciones para Ensamblar Programas MOVWF movwf mover a f ESCRITURA 0=< f=< 127 W M(f) M=memoria M(f)=posición de memoria Cód. Nelson Añón 28 .

Nelson Añón código fuente 29 .0 W M(0x30) movwf 0x30 Fin PIC Prof.Instrucciones para Ensamblar Programas Escribir un programa que copie el contenido del registro 0x20 al 0x30 Inicio M (0x20) W movf 0x20.

Nelson Añón 30 .0 0x30 PIC Prof.Instrucciones para Ensamblar Programas Escribir un programa que copie el contenido del registro 0x20 al 0x30 List org movf movwf end p=16F628A 0x00 0x20.

Nelson Añón 31 . denominación usada porque programamos en assembler. se llama compilación o ensamblado.Instrucciones para Ensamblar Programas Pasar del Código fuente al código máquina ú objeto. Programa a usar MPLAB Funciones: 1) editor de Fuente (ingresar código fuente) 2) compilador (pasar código fuente a código máquina) 3) simulador 4) programar PIC PIC Prof.

pjt NOMBRE.asm Ej001.pjt Ej001.Instrucciones para Ensamblar Programas 1) Crear un nuevo proyecto en menú ³Project´ ³File´ Proyecto Fuente Ejemplo: New NOMBRE. Nelson Añón 32 .asm 3) Asignar al archivo de código el proyecto ³Project´ PIC New Project 2) Crear un archivo que contenga el código fuente Edit Project Prof.

Project File Name nombre. Nelson Añón 33 dar OK .Instrucciones para Ensamblar Programas MPLAB Editor de texto Ensamblador Simulador Creación de Proyecto 1.pjt PIC New Proyect Ventana guardar en cualquier carpeta ej: example Prof.pjt Ej001.

Instrucciones para Ensamblar Programas 2.asm OK Change Tools 16F628A Processor Salvar en la misma carpeta llamada example PIC OK Prof. Edit Project Development Mode: Tools MPLAB SIM SIMULATOR 3. Nelson Añón 34 . Creación Archivo Fuente File File New Save As Untilted 1 File Name Ej001.

Project Edit Project Add Node Ej001.asm] 1 Tabulación List org movf movwf end PIC Prof.0 0x30 .Instrucciones para Ensamblar Programas 4. Nelson Añón 35 OK 1 Tabulación p=16F628A 0x00 0x20.asm Aceptar Project Files Ej001 [.hex] Ej001 [.

Nelson Añón . Project Build Failed 7.w [00100000100000] [00000010110000] 36 Build Completed sucessfully ó apretar botón ROM cada posición 14 bits 0000 0001 PIC 0820 movf 00B0 movwf 0x30 Prof. File 6.Instrucciones para Ensamblar Programas 5. Windows Save Build All OK Mal Program Memory Memoria de Programa [formato instrucción] 0x20.

Nelson Añón 37 . Windows Windows Modify ADRESS: 0x20 Data/OPCODE: 0x75 WRITE Program Counter PC: 0x00 W: 0x20 PC: 0x01 W: 0x75 PC: 0x02 W: 0x75 File Registers (ó apretar RAM) 8. DEBUG PIC SYSTEM RESET Prof. PIES (correr el programa) 9.Instrucciones para Ensamblar Programas 7.

Instrucciones para Ensamblar Programas Escribir un programa que copie el contenido del registro 0x20 al 0x30 List org movf movwf end p=16F628A 0x00 0x20. Nelson Añón 38 .0 0x30 PIC Prof.

DC. Nelson Añón 39 0=< k =< 255 w+k w afectados .Instrucción de Movimiento Instrucción de Suma Instrucción Movimiento: movlw k 0=< k =< 255 k w Cód. OP: 11 111x kkkk kkkk Instrucción Suma: addlw k flags C. Z Resultado=0 Z=1 Resultado>255 C=1 PIC Prof.

ó sea 9º bit PIC Prof. Nelson Añón 40 .Instrucción de Suma Uso del C y DC: 8 7 4 3 0 DC=1 para valores > 15. ó sea 5º bit C=1 para valores > 255.

Instrucción Suma addwf instrucción d={0.1} W +M(f) W +M(f) flags f. OP:00 0111dfff ffff PIC Prof.d operandos 0=< f=< 127 W M(f) d=0 d=1 M=memoria M(f)=posición de memoria afectados C. DC y Z Cód. Nelson Añón 41 .

Nelson Añón .0 addwf 0x2D.0 movwf 0x2E código fuente 42 M(0x2E) Fin PIC Prof.Instrucciones para Ensamblar Programas Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y poner el resultado en 0x2E Inicio M (0x2C W+M (0x2D) W W) W movf 0x2C.

0 0x2D.Instrucciones para Ensamblar Programas Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y poner el resultado en 0x2E List Reset ORG movf addwf movwf end p=16F628A 0x00 0x2C.0 0x2E PIC Prof. Nelson Añón 43 .

Instrucción Resta subwf instrucción d={0.d operandos 0=< f=< 127 W M(f) d=0 d=1 M=memoria M(f)=posición de memoria afectados C.W M(f) . DC y Z Cód. Nelson Añón 44 . OP:00 0010dfff ffff PIC Prof.1} M(f) .W flags f.

OP:11 110xkkkk kkkk PIC Prof.Instrucción Resta sublw K 0=<K=< 255 K-W C=1 C=0 W flags afectados C. DC y Z Resultado >= 0 (+) Resultado < 0 (-) Cód. Nelson Añón 45 .

Instrucción Resta Los números en el microcontrolador no pueden tener signos diferentes. Nelson Añón 46 . K-W=W 0000 0011-0000 0010 = método complemento A1 = 1111 1101 complemento A2 1111 1101 + 1 1111 1110 Ejemplo: w=0000 0010 PIC Prof. por lo tanto vamos a utilizar el complemento A1 y el complemento A2.

Nelson Añón 47 . K-W=W 0000 0011-0000 0010 = método 0000 0011 + 1111 1110 0000 0001 PIC Prof.Instrucción Resta Los números en el microcontrolador no pueden tener signos diferentes. por lo tanto vamos a utilizar el complemento A1 y el complemento A2.

Binario Codificado en Decimal (BCD) Formato BDC 23 0 1 2 3 4 5 6 7 8 9 PIC 22 0 0 0 0 1 1 1 1 0 0 Prof. Nelson Añón 21 0 0 1 1 0 0 1 1 0 0 20 0 1 0 1 0 1 0 1 0 1 48 0 0 0 0 0 0 0 0 1 1 .

Binario Codificado en Decimal (BCD) Formato BDC BCD 29 23 22 21 20 0 0 1 0 23 22 21 20 1 0 0 1 El principio en que se basa el BCD es sencillo. sólo se habría podido codificar 8 dígitos) que en principio servirían para codificar hasta 16 dígitos. por lo que las 1010 a 1111 no tiene aplicación. Nelson Añón 49 . es decir son ilegales en un código BCD. El dígito ³1´ por ejemplo se representa mediante el código 0001 y el ³9´ mediante el código 1001. Desafortunadamente con 4 bits se alcanzan 16 combinaciones distintas. PIC Prof. Para poder codificar los dígitos de 0 a 9 se usan 4 bits (con 3. y por lo tanto no se utilizan.

Nelson Añón 50 las operaciones aritméticas resultan Ejemplo de cómo se suman 2 números en BCD: .Binario Codificado en Decimal (BCD) Formato BDC Consecuentemente complicadas. es decir un 10 El resultado es incorrecto. La razón es obvia. 0001 + 0011 = 0100 1 8 + + 3 8 = 4 resultado correcto 1000 + 1000 = 1 0000 = 16 En BCD esto es un ³1´ seguido de un ³0´. PIC Prof. del 1010 al 1111. al usar las reglas de adición binaria normal habrá que saltar los 6 dígitos ilegales en BCD.

PIC Prof.Binario Codificado en Decimal (BCD) Formato BDC Dicho de otra manera hay que sumar 6 al resultado siempre que caiga dentro de la zona de códigos ilegales. es decir 16. Veamos un Ejemplo: 1000 + 0110 = 10110 ó sea en BCD tenemos entonces un ³1´ seguido de un ³6´. tendremos pues que sumar 6 al resultado de la adición. cuando ésta se realice a través de la zona de códigos ilegales. Al usar la notación BCD. que es el resultado correcto. Nelson Añón 51 .

0 movwf 0x2A código fuente 52 M(0x2A) Fin PIC Prof.0 subwf 0x1A.Instrucciones para Ensamblar Programas Restar el contenido de 2 posiciones de memoria 0x1A y 0x0A y poner el resultado en 0x2A Inicio M (0x0A M(0x1A)-W W W) W movf 0x0A. Nelson Añón .

Nelson Añón 53 .Instrucciones para Ensamblar Programas Restar el contenido de 2 posiciones de memoria 0x1A y 0x0A y poner el resultado en 0x2A List Reset ORG movf subwf movwf end p=16F628A 0x00 0x0A.0 0x1A.0 0x2A PIC Prof.

y los registros PORTA. En las siguientes diapositivas se muestra nuevamente la información que suministra el fabricante. TRISA y TRISB. Nelson Añón 54 . y activar a través de los pines de salida. Recordemos que estos registros específicos pertenecen a la memoria de datos y están ubicados en los llamados bancos de la misma. dispositivos que nos permitan la visualización ó sonorización de las actividades que son controladas a través de un programa que se ejecuta en el microcontrolador 16F628A. PIC Prof. El objetivo de esto es comunicarnos con el mundo exterior a través de los pines de entrada. PORTB.Configuración de los pines en Entradas / Salidas En esta parte del curso nos vamos a familiarizar con la configuración de los pines.

Nelson Añón 55 . es un pin que se configura como entrada RA0 ± RA2 pueden usarse como entradas de los comparadores analógicos RA3 puede usarse como entrada de comparadores analógicos PIC Prof. sin driver de salida.Síntesis de los 16 pines del 16F628A PORTA ± RA0 ± RA7 PORTB ± RB0 ± RB7 16 PINES Posibles ENTRADAS/SALIDAS RA2 / VA2 / Vrfe = sirve como in-out ó como comparador RA4 ± entrada Schmitt Trigger RA4 ± salida Open drain = salida colector abierto RA5 ± entrada Schmitt Trigger.

MEMORIA DE DATOS TRIS TRANSFORMER INPUT SOURCE TRANSFORMAR ENTRADA FUENTE TRISA ± Programa el PORT A M(f)=0x85 TRISB ± Programa el PORT B M(f)=0x86 BIT=0 BIT=1 PIC salida entrada Prof. Nelson Añón 56 .

Nelson Añón 57 .PIC Prof.

y mapeada desde la dirección 70h-7Fh. REGISTRO DE PROPÓSITOS GENERALES: El registro de Archivos esta organizado como 224x8 en el PIC 16F62X. 170h-17Fh y 1F0h-1FFh se implementan como una RAM común. PIC Prof.ORGANIZACIÓN DE LA MEMORIA La tabla anterior indica como acceder a los cuatros bancos de registros: Direcciones F0h-FFh. Se accede también directamente e indirectamente a través del Registro de Selección de Archivo (FSR). Nelson Añón 58 .

PIC Prof. Nelson Añón 59 .

OP:01 01bb bfff ffff PIC Prof.b set (pone a 1) el bit b de la posición f de la memoria 0=< f=< 127 0 =< b =< 7 M=memoria M(f)=posición de memoria Cód.Instrucciones para Ensamblar Programas bsf f. Nelson Añón 60 .

Nelson Añón 61 .b reset (pone a 0) el bit b de la posición f de la memoria 0=< f=< 127 0 =< b =< 7 M=memoria M(f)=posición de memoria Cód. OP:01 00bb bff ffff PIC Prof.Instrucciones para Ensamblar Programas bcf f.

entonces él escribe en estos tres bits que están deshabilitados. mostrado en el registro 3-1. el resultado de una instrucción con el registro de Estado como destino puede ser diferente al intentado. El registro de Estado puede ser destino para cualquier instrucción. y de cualquier otro registro. Por consiguiente. Si el registro de Estado es destino de una instrucción.REGISTRO DE STATUS Status Register: El Registro de Estado. ésta afecta el Z (Cero) y los bits de medio acarreo y acarreo (DC ó C). Nelson Añón 62 . PIC Prof. el estado reset y los bits que se seleccionan para ingresar al banco de la memoria de datos. contiene: el estado aritmético de la ALU. Los bits son uno (set). o Cero (cleared) de acuerdo a la lógica del dispositivo.Además los bits TO y PD no se pueden escribir.

PIC Prof.REGISTRO DE STATUS REGISTRO de Estado: Por ejemplo. Para otras instrucciones. Se recomienda el uso solamente de BCF. ver el set de instrucciones. Nelson Añón 63 . que no afecten ningún bits de estado. Esto lo vemos como ³000uu1uu´ (donde u = unchanged). CLRF STATUS borrara los tres bits altos y pondrá a uno el bit de Cero (Z). BSF. instrucciones usadas para alterar el Registro de Estado porque estas instrucciones no afectan ningún bit de estado. SWAPF and MOVWF.

PIC Prof. Nelson Añón 64 .

PIC

Prof. Nelson Añón

65

MÉTODO PARA ELEGIR BANCOS
Los bits RP1 y RP0 del registro de Status y las instrucciones bsf y bcf, son quienes nos posibilitan cambiar de bancos en la memoria de datos. Ejemplo: Para elegir el banco 1: RP1=0 RP0=0 Status, RP1=bit6 Status, RP0=bit5 M(f)=Status=0x03
PIC Prof. Nelson Añón 66

bcf bsf

Status, RP1 Status, RP0 bcf bsf 0x03,6 0x03,5

MÉTODO PARA ELEGIR BANCOS
Los bits RP1 y RP0 del registro de Status y las instrucciones bsf y bcf, son quienes nos posibilitan cambiar de bancos en la memoria de datos. Ejemplo: TABLA para Elección de BANCOS

BANCO 0

BANCO 1

BANCO 2 bsf 0x03,6 bcf 0x03,5

BANCO 3 bsf 0x03,6 bsf 0x03,5

bcf 0x03,6 bcf 0x03,6 bcf 0x03,5 bsf 0x03,5

PIC

Prof. Nelson Añón

67

Configuración de los pines en Entradas / Salidas
Programar todas las líneas del PORTA como entrada y todas las líneas del PORTB como salida
Inicio

Selecciono Banco1

bcf 0x03,6 bcf 0x03,5 movlw 0xFF movwf 0x85 movlw 0x00 movwf 0x86 código fuente
68

0xFF 0x00

TRISA TRISB
Fin

PIC

Prof. Nelson Añón

programo PuertaB Status. selecciono Banco 0 Prof. Status TRISA TRISB Reset PIC List EQU EQU EQU ORG bcf bsf movlw movwf movlw movwf bcf end p=16F628A 0x03 0x85 0x86 0x00 Status. programo PuertaA 0x00 TRISB.Instrucciones para Ensamblar Programas Programar todas las líneas del PORTA como entrada y todas las líneas del PORTB como salida. Nelson Añón 69 . selecciono Banco 1 0xFF TRISA.5.5.6. selecciono Banco 1 Status.

1 btfcs portA. Nelson Añón 70 .Aplicación 1: Diagrama de Flujo Instrucción GOTO Salto incondicional a la dirección que vaya precedida como (etiqueta) GOTO K 0<= K <=2047 Pepe btfss portA. 1 GOTO Pepe PIC Inicio Programar PORTA y PORTB GOTO RUTINA Leer PORTA Escribir en PORTB Prof.

A continuación leer contínuamente la PuertaA y copiar su contenido en la PuertaB. Nelson Añón 71 .Aplicación 1: Diagrama de Flujo Programar todas las líneas del PORTA como entrada y todas las líneas del PORTB como salida. PIC Inicio Programar PORTA y PORTB Leer PORTA Escribir en PORTB Prof.

6. selecciono Banco 1 0xFF TRISA. PORTA PORTB. 0. selecciono Banco 1 Status.Aplicación 1: Código Fuente STATUS PORTA PORTB TRISA TRISB CMCON RESET List EQU EQU EQU EQU EQU EQU ORG movlw movwf bcf bsf movlw movwf movlw movwf bcf RUTINA movf movwf goto end p=16F628A 0x03 0x05 0x06 0x85 0x86 0x1F 0x00. programo PuertaB Status. programo PuertaA 0x00 TRISB. selecciono Banco 0 PORTA. deshabilito comparadores Status.5. W RUTINA W PORTB . deshabilito comparadores CMCON.5. posición inicial del programa 0x07.

cuando se suma este registro PC con uno de los 8 bits. Nelson Añón 73 . PIC Solución: el PCLATH es un registro modificable.REGISTROS PCL Y PCLATH REGISTROS PCL y PCLATH : GOTO COMPUTADO: El PC está formado por dos registros: PCLATH + PCL = PC Siendo PCLATH = PC<12:8> Y PCL = PC<7:0> Por lo tanto. Prof. Esto es lo que produce que al hacer una tabla se pueda ³direccionar´como máximo 255 posiciones aproximadamente. sólo se estará modificando los bits menos significativos de PC.

PIC Prof.REGISTROS PCL Y PCLATH REGISTROS PCL y PCLATH: Existen 2 formas de modificar el PC: 1. Nelson Añón 74 . 2. que se refiere a operaciones aritméticas (ó lógicas) que modifiquen al PCL. Mediante un goto computado. Mediante las instrucciones de salto(goto y call).

En estas instrucciones es donde está el problema del salto. PIC Prof. se les pasa como parámetro un número de 11 bits (que uno generalmente reemplaza por un label. INSTRUCCIONES DE SALTO: A estas instrucciones. por ejemplo ³goto loop´). pero también copian el contenido de PCLATH a la parte alta del registro PC. Nelson Añón 75 . y cuando se ejecuta esta instrucción se copian del PCLATH al PC los bits 12 y 11 del PC. cuando la memoria de programa tiene más de 2K.REGISTROS PCL Y PCLATH REGISTROS PCL y PCLATH : GOTO COMPUTADO: Estas instrucciones ponen el resultado de la operación llevada a cabo en los bits menos significativos (8)del registro PC.

Los bits de mas peso. el Contador de Programa está implementado sobre un par de posiciones de la memoria de datos (RAM). residen en los 5 bits de menos peso del registro PCLATH. repetido. Cuando se escribe el Contador de Programa como resultado de una operación de la ALU. la posición 2 de los dos bancos de la memoria de datos. PIC Prof. Nelson Añón 76 . los 8 bits de menos peso del PC residen en el registro PCL. PC<12:8>. que ocupa.REGISTROS PCL Y PCLATH REGISTROS PCL y PCLATH : Al igual que todos los registros específicos que controlan la actividad del procesador. que ocupa la posición 0A H de los bancos de la memoria de datos.

y en los modelos de PIC que alcanzan ese tamaño. dichos bits proceden de PCLATH<4:3>. Los bits restantes PC<12:11> tienen la misión de apuntar una de las cuatro páginas del mapa de memoria. se puede direccionar una página de 2K de la memoria. Prof. Como los 11 bits que se cargan en el PC desde el código de las instrucciones GOTO y CALL. Nelson Añón 77 PIC .REGISTROS PCL Y PCLATH En las instrucciones GOTO y CALL los 11 bits de menos peso del PC provienen del código de la instrucción y los otros dos de los bits PCLATH<4:3> ver hoja del manual del fabricante (fig33). La Pila es una zona aislada de las memorias de programa y datos.

STACK O PILA Tiene una estructura LIFO. PIC Prof. Funciona como un <buffer> circular. RETLW y RETFIE. cada uno con 13 bits. Tiene 8 niveles de profundidad. El contenido del registro PCLATH no es afectado por la entrada o salida de la información de la Pila. en la que el ultimo valor guardado es el primero que sale. Nelson Añón 78 . de manera que el valor que se obtiene al realizar el noveno <desempilado> (pop) es igual al que se obtuvo en el primero. El contenido del nivel superior se saca de la Pila al ejecutar las instrucciones RETURN. La instrucción CALL y las interrupciones originan la carga del contenido del PC en el nivel superior o <cima> de la Pila.

PIC Prof. Nelson Añón 79 .

Goto k :101 kkk kkkk kkkk PIC Prof. Nelson Añón 80 . 11 bits son del código de Operación de la instrucción. En la diapositiva donde el fabricante muestra al PCH y PCL como ambos formando el registro PC sumando bit a bit hablamos 0 a 12. Abajo se indica la carga del PC en las instrucciones GOTO Y CALL.STACK O PILA En la figura superior se muestra como se carga el PC cuando una instrucción deposita en él. encontramos que de estos 13 bits. el resultado que se obtiene de la ALU. o sea 13 bits.

1} complemento d=0 d=1 (intercambia ³1´ y ³0´) M(f)=posición de memoria flags afectados Z W M(f) complemento M(f) Cód. Nelson Añón 81 .d d={0.Instrucciones para Ensamblar Programas comf f. OP:00 0111dfff ffff PIC Prof.

Nelson Añón 82 .Instrucciones para Ensamblar Programas clrf 0x00 flags Z=1 Z=0 M(f) borra cualquier posición de memoria M(f)=posición de memoria afectados si el resultado es = 0 si el resultado es = 0 Z=1 Cód. OP:00 0001 1fff ffff PIC Prof.

OP:00 0001 0000 0011 PIC Prof. Nelson Añón 83 .Instrucciones para Ensamblar Programas clrw flags Z=1 Z=0 borra el registro W afectados si el resultado es = 0 si el resultado es = 0 Z=1 Cód.

Nelson Añón d=0 d=1 W M(f) Z 84 Cód.1} afectados d=0 d=1 flags Cód. OP:00 1010 dfff ffff decf M(f) . OP:00 0011 dfff ffff .d decrementa f d={0.1} afectados Prof.1 flags PIC M(f) + 1 W M(f) Z f.Instrucciones para Ensamblar Programas incf f.d incrementa f d={0.

d test de bit y salto Salta una instrucción si f(b) es = 1 0 =< b =< 7 Cód. PIC Prof. Nelson Añón 85 .d test de bit y salto Salta una instrucción si f(b) es = 0 0 =< b =< 7 Cód. OP:01 11bb bfff ffff Las instrucciones que saltan una sola instrucción. OP:01 10bb bfff ffff btfss f.Instrucciones para Ensamblar Programas btfsc f. son saltos condicionados.

Nelson Añón 86 . En los mismos se destinan 2 bits del registro de status (RP0 y RP1) para determinar el banco y otros 7 para elegir una de las 128 posiciones del banco seleccionado. El banco a acceder lo determinan los bits RP0 y RP1 del registro de status.Direccionamiento de la Memoria de Datos En los PIC de la gama media la memoria de datos está organizada para alojar un máximo de 4 bancos de 128 bytes cada uno. DIRECCIONAMIENTO DIRECTO: El operando que utiliza la instrucción en curso se referencia mediante su dirección. PIC Prof. concretamente en los 7 bits de menos peso. que viene incluída en el código OP de la misma.

mientras que los 7 bits de menos peso del FSR apuntan a la posición. se accede a la dirección de un banco especificada con los 7 bits de menos peso del registro FSR (posición 0x04 en todos los bancos). El bit de más peso del FSR junto al bit IRP del registro de status se encargan de seleccionar el banco a acceder. INDF = contenido del FSR PIC Prof. El registro INDF no está implementado físicamente y cuando se le hace referencia. Nelson Añón 87 .Direccionamiento de la Memoria de Datos DIRECCIONAMIENTO INDIRECTO: Este modo de direccionamiento se usa cuando en una instrucción se utiliza como operando el registro INDF (dirección 0x00 en todos los bancos).

Nelson Añón 88 .Direccionamiento de la Memoria de Datos INDICE clrf M (indice) 8 Selección del banco 7 Localización selección dirección de memoria 0 PIC Prof.

Direccionamiento de la Memoria de Datos IRP = Punto Registro Indirecto carga FSR 0 x 20 FSR M (0x00) W 0 W 0 x 1E M (0x00) 1E 0x 20 PIC Prof. Nelson Añón 89 .

Direccionamiento Indirecto Poner a 0x00 las posiciones 0x20 a 0x2F del banco 0 0 x 20 M (0x00) FSR + 1 Start FSR INDF FSR apunto con FSR borrado 0 x 20 No bit 4 de FSR=1 Si End PIC Prof. Nelson Añón 90 .

Direccionamiento Indirecto
INDF STATUS FSR RESET List EQU EQU EQU ORG bcf movlw movwf clrf incf btfss goto end p=16F628A 0x00 0x03 0x04 0x00 Status,7; 0 IRP 0 x 20; FSR; FSR apunta a posición 0x20 INDF; borra posición de memoria FSR; FSR + 1 FSR,incremento puntero FSR,4; todo borrado NEXT; no borra la siguiente ; si continúa el programa

NEXT

Instrucciones para Ensamblar Programas
incfsz M(f) + 1 f,d incremento y salto d={0,1} d=0 W d=1 M(f) flags afectados Z Cód. OP:00 1111 dfff ffff decfsz M(f) - 1 f,d decremento y salto d={0,1} d=0 W d=1 M(f) flags afectados Z Si el resultado es 0 salta por encima de la siguiente instrucción Cód. OP:00 1011 dfff ffff
PIC Prof. Nelson Añón 92

Instrucciones para Ensamblar Programas
Andlw K

0=<K=< 255
W·K flags W afectados Z

Realiza función AND, operación bit a bit K constante operacional Cód. OP:11 1001 kkkk kkkk

PIC

Prof. Nelson Añón

93

Instrucciones para Ensamblar Programas
Andwf W ·M(f) flags f,d d={0,1} afectados Z d=0 d=1 W M(f)

Realiza función AND, operación bit a bit Cód. OP:00 0101 dfff ffff

PIC

Prof. Nelson Añón

94

OP:11 1000 kkkk kkkk PIC Prof. operación bit a bit K constante operacional Cód.Instrucciones para Ensamblar Programas IORlw K 0=<K=< 255 W+K flags W afectados Z Realiza función OR. Nelson Añón 95 .

d d={0. OP:00 0100 dfff ffff PIC Prof.1} Z d=0 d=1 W M(f) afectados Realiza función OR. Nelson Añón 96 . operación bit a bit Cód.Instrucciones para Ensamblar Programas IORwf W+M(f) flags f.

Nelson Añón 97 . operación bit a bit K constante operacional Cód.Instrucciones para Ensamblar Programas XORlw K 0=<K=< 255 W + K flags W Z afectados Realiza función OR exclusiva. OP:11 1010 kkkk kkkk PIC Prof.

OP:00 0110 dfff ffff PIC Prof. operación bit a bit Cód.d d={0.Instrucciones para Ensamblar Programas XORwf W + M(f) flags f. Nelson Añón 98 .1} Z d=0 d=1 W M(f) afectados Realiza función OR exclusiva.

OP:00 1110 dfff ffff PIC Prof.1} M(f) M(f) flags f.d intercambio de f operandos 0=< f=< 127 W M(f) d=0 d=1 M=memoria M(f)=posición de memoria ninguno afectado Intercambia el nibble más significativo y el menos significativo de M(f) Cód. Nelson Añón 99 .Instrucciones para Ensamblar Programas swapf instrucción d={0.

Nelson Añón 100 . OP:00 1101 dfff ffff PIC Prof.d rota a la izquierda operandos 0=< f=< 127 W M(f) d=0 d=1 C M=memoria M(f)=posición de memoria afectado Cód.1} M(f) M(f) flags f.Instrucciones para Ensamblar Programas RLF instrucción d={0.

Instrucciones para Ensamblar Programas RRF instrucción d={0.d rota a la derecha operandos 0=< f=< 127 W M(f) d=0 d=1 C M=memoria M(f)=posición de memoria afectado Cód.1} M(f) M(f) flags f. OP:00 1100 dfff ffff PIC Prof. Nelson Añón 101 .

al retornar de la subrutina se saca de la pila la dirección de regreso en el programa principal. que se limita a extraer de la cima de la pila el valor que carga en el PC. La instrucción de salto incondicional goto carga en el PC la dirección de la nueva instrucción. salva la dirección de partida guardando en la cima de la pila el valor actual del PC.Instrucciones de Control y Especiales En este grupo se incluyen las instrucciones que desvían la secuencia normal del programa. y también las instrucciones especiales. antes de cargar el PC con la dirección de la instrucción a saltar. Nelson Añón 102 . Para realizar un retorno de una subrutina se pueden emplear dos instrucciones la más habitual es return. De esta manera. La instrucción call de llamada a subrutina. PIC Prof. porque alteran el contenido del PC.

devuelve un parámetro desde la subrutina.Instrucciones de Control y Especiales Otra más compleja es retlw k. GIE es el bit de permiso de todas las interrupciones. Nelson Añón 103 . PIC Prof. pues al comenzar la interrupción este bit se pone automáticamente a cero para evitar que cuando se atienda una interrupción se produzca otra. además de hacer lo mismo que return. que. En cuanto a las instrucciones especiales se han incluído dos en este grupo: clrwdt y sleep. La operatividad de esta instrucción consiste en cargar en el PC el contenido de la cima de la pila y poner el bit GIE=1. carga en w el valor inmediato k que contiene. Para el final de las interrupciones hay otra instrucción cuyo nemónico es retfie. Es decir.

PIC Prof. Solución: Return: retorna de una subrutina al programa principal.Instrucciones de Control y Especiales La primera pone a cero el contenido del perro guardián. además. decir. Retfie: carga al PC con el contenido de la cima de la pila y pone GIE=1. El perro guardián si desborda (pasa de 0xff a 0x00) provoca un Reset. instrucción clrwdt hay que colocarla estratégicamente ciertos puntos del programa para evitar la reinicialización. Nelson Añón 104 . Carga al PC con el contenido de la cima de la pila. Retlw k: hace los mismo que ³Return´ y. carga en w el literal k. es se La en Ejemplo: explicar las diferencias entres las tres instrucciones de retorno. lo refresca ó lo reinicializa.

Se producen cada vez que se ejecuta dicha instrucción.SUBRUTINAS En ocasiones es necesario realizar un mismo procedimiento en distintos lugares de un programa. PIC Prof. Nelson Añón 105 . por lo que se consideran síncronas. Las llamadas a subrutina mediante la instrucción CALL son desviaciones del flujo de control del programa originadas por instrucciones. por ejemplo desplegar valores en un display. En este caso es más cómodo y ahorra memoria incluir una sola vez ese trozo de código y utilizarlo (invocarlo) desde distintos puntos del programa. a ese código se le llama SUBRUTINA.

SUBRUTINAS Se puede. a lo sumo. 2)Los 11 bits de la direccion ³K´. usar 8 subrutinas anidadas (stack 8 level de 13 bits) Instrucción CALL K (salto a Subrutina) K=posición de memoria de programa 0<= K<=2047 1)La dirección de retorno (PC+1) es guardada en el Stack. son cargados en el PC (PCL y PCLATH) PIC Prof. Nelson Añón 106 .

SUBRUTINAS Carga en el Program Counters (PC) el contenido de la cima de Pila. dejando además la cima libre Representación de Subrutina En Diagrama de Flujo Nombre de la Subrutina PIC Prof. Nelson Añón 107 .

SUBRUTINAS RETURN: retorna a subrutina RETLW K (RETORNO. Nelson Añón 108 . CARGA W) 0<=K<=255 1)Carga en el PC la dirección guardada en la cima del STACK (dejando la cima libre) 2) Carga K------W RETLW K va en lugar del RETURN PIC Prof.

SUBRUTINAS DE TEMPORIZACIÓN Ejemplo: Realizar un temporizador ó delay de 0. Datos: 1 ciclo instrucción = 4T 1 MHz = 1 x 10 6 Hz 1 ciclo = 1 MHz x 4= 4 x 10 6 Hz 1 MHz CLK = 1 us PIC Prof.5 segundos con un PIC 16F628A a una frecuencia de 1 MHz. Nelson Añón 109 .

Datos: 1 ciclo instrucción = 4T 1 MHz = 1 x 10 6 Hz 1 ciclo = 1 MHz x 4= 4 x 10 6 Hz T = 1/f = 1 us 1 clock = 1 us 0. Nelson Añón 110 .000 ciclos de instrucción que equivalen a 0.5 segundos con un PIC 16F628A a una frecuencia de 1 MHz.5 seg/ 4 x 10 6 Hz = 125.SUBRUTINAS DE TEMPORIZACIÓN Ejemplo: Realizar un temporizador ó delay de 0.5 seg PIC Prof.

5 segundos ó 500 miliseg PIC Prof. Nelson Añón 111 .000/ 250 = 500.SUBRUTINAS DE TEMPORIZACIÓN Para lograr este tiempo lo que debo hacer es decrementar (el decremento se puede hacer hasta 256). Es decir necesito decrementar de 248 a 0 para que los números sean exactos. son las veces que tengo que repetir el decremento para obtener 0. Esto es lo que tenemos que obtener: 125. De 248 a 0 hay 249 números contando el 0 y dicha instrucción al llegar al número deseado salta un ciclo más. es decir decrementa 250.

inicio A=2 B = 248 C = 248 DECRE C NO C=0 SI A B 1 .

1 A B DECRE B NO B=0 SI DECRE A NO A=0 SI end .

(VAR3.1 deco VAR2.1 inicio . demora 0. (VAR1.5 seg DECO decfsz goto .VAR1 VAR2 VAR3 RESET INICIO List EQU EQU EQU ORG movlw movwf movlw movwf movlw movwf p=16F628A 0x21 0x22 0x23 0x00 02 h VAR1 248 h VAR2 248 h VAR3 VAR3.1 dos VAR1.1) DOS decfsz goto UNO decfsz goto nop end .1) .

Luego voy a WINDOWS ± STOP WATCH (donde se indican los milisegundos) y en el programa indico los puntos de BREAK POINT que corresponden a donde empieza el programa (goto inicio) hasta NOP (lo tenemos que poner para que detenga el conteo).. Luego voy a OPTION ± DEVELOPMENT MODE elijo el PIC 16F628A ± clock de 1 MHz y acepto. indicando que quedó pronto para funcionar a esa frecuencia.. En ese momento se modifica la configuración en el MPLAB..RESET.. Usando el MPLAB para verificar el tiempo que logro obtener vamos a DEBUG.RUN.. El comienzo donde el programa dice inicio. Nelson Añón 115 .SUBRUTINAS DE TEMPORIZACIÓN Para poder ver el tiempo que demora el programa se debe fijar un comienzo y un fin.. y el fin lugar donde vamos a escribir la instrucción NOP antes de la directiva END. PIC Prof...

SUBRUTINAS DE TEMPORIZACIÓN PIC Prof. Nelson Añón 116 .

Nelson Añón 117 .SUBRUTINAS DE TEMPORIZACIÓN PIC Prof.

PIC Prof. Nelson Añón 118 .

Nelson Añón 119 .PIC Prof.

Nelson Añón 120 .PIC Prof.

PIC Prof. Nelson Añón 121 .

Nelson Añón 122 .PIC Prof.

Nelson Añón 123 .PIC Prof.

PIC Prof. Nelson Añón 124 .

Nelson Añón 125 .PIC Prof.

Nelson Añón 126 .PIC Prof.

1 goto loop return PIC Prof.000000 MHz movlw D'3' movwf CounterC movlw D'140' movwf CounterB movlw D'83' movwf CounterA loop decfsz CounterA.SUBRUTINAS DE TEMPORIZACIÓN .1 goto loop decfsz CounterB. Nelson Añón 127 .5000020 s with Osc = 1.PIC Time Delay = 0.1 goto loop decfsz CounterC.

Nelson Añón 128 .SUBRUTINAS DE TEMPORIZACIÓN PIC Prof.

Nelson Añón 129 .TEMPORIZADORES PIC Prof.

Q2. Durante un ciclo de instrucción. que comprende las cuatro señales mencionadas. Nelson Añón 130 . que configuran un ciclo de instrucción. se desarrollan las siguientes operaciones: PIC Prof. Los pulsos de reloj externos entran por la patita OSC1/CLKIN y se dividen por cuatro internamente dando lugar a las señales Q1. Q3 y Q4.TEMPORIZADORES La frecuencia de trabajo del microcontrolador es un parámetro fundamental a la hora de establecer la velocidad en la ejecución de instrucciones y el consumo de energía.

Q2-Q3: Durante la actividad de estas dos señales se produce la decodificación y la ejecución de la instrucción. Q4: Durante este impulso se busca el código de la operación en la memoria de programa y se carga en el registro de instrucciones. PIC Prof. se aplica la técnica de segmentación. que consiste en realizar en paralelo las dos fases que comprenden cada instrucción. Para conseguir ejecutar cada instrucción en un ciclo de instrucción.TEMPORIZADORES Q1: Durante este impulso se incrementa el contador de programa. Nelson Añón 131 .

por eso en esta situación se sustituye la fase de búsqueda de la siguiente instrucción por un ciclo ³vacío´. La estructura segmentada del procesador permite realizar al mismo tiempo la fase de ejecución de una instrucción y la búsqueda de la siguiente instrucción. Cuando la instrucción ejecutada corresponde a un salto no se conoce cuál será la siguiente hasta que se complete. y en el segunda se decodifica y se ejecuta (fase de ejecución). originando que las instrucciones de salto tarden en realizarse dos ciclos de instrucción. Nelson Añón 132 .TEMPORIZADORES Cada instrucción se ejecuta en 2 ciclos: en el primero se lleva a cabo la fase de búsqueda del código de la instrucción en la memoria del programa. Ver figura 2-1 del fabricante. PIC Prof.

TEMPORIZADORES PIC Prof. Nelson Añón 133 .

Nelson Añón 134 .PIC Prof.

Nelson Añón 135 .PIC Prof.

PIC Prof. Nelson Añón 136 .

Nelson Añón 137 .PIC Prof.

PIC Prof. Nelson Añón 138 .

PIC Prof. Nelson Añón 139 .

Nelson Añón 140 .PIC Prof.

Nelson Añón 141 .PIC Prof.

PIC

Prof. Nelson Añón

142

PIC

Prof. Nelson Añón

143

PIC

Prof. Nelson Añón

144

TEMPORIZADOR TMR0
REGISTRO OPCION:

OPTION Register es un registro de lectura y escritura, el cual contiene varios bits de control para configurar el TMRO/WDT prescaler, la interrupción externa RBO/INT, el TMRO y las resistencias de pull-up del puerto B.

PIC

Prof. Nelson Añón

145

PIC Prof. Nelson Añón 146 .

TEMPORIZADOR TMR0 PIC Prof. Nelson Añón 147 .

Hacer esto por medio de loop (bucle) de programa desperdiciaría capacidad de proceso y no siempre fácil de calcular con exactitud. Prof. Nelson Añón 148 PIC . el PIC 16F628A dispone de un Timer y Contador de 8 bits llamado TMR0. También es necesario contar la cantidad de veces que ocurre un evento externo. Frecuencia de oscilación: 4 MHz depende T= 250ns de la ciclo de instrucción = 1us En los programas de control es necesario determinar intervalos concretos de tiempos.TEMPORIZADOR TMR0 La programación del temporizador frecuencia de trabajo del PIC.

Si el registro TMR0 está escrito. Al llegar al valor FF se desborda el contador y con el siguiente impulso pasa a 00. pasando de FF a 00. activando un flag (y provocando una interrupción . PIC Prof. Nelson Añón 149 . Este flag debe ser luego puesto a 0 por el programa.si están habilitados). el incremento es inhibido durante los 2 próximos ciclos de instrucción. 2) TIMER: El TMRO se incrementa con cada ciclo de instrucción (Frec.TEMPORIZADOR TMR0 MODOS DE FUNCIONAMIENTO: 1) CONTADOR DE SUCESO: El contador TMR0 cuenta los impulsos que se aplican al Pin RA4/TOCK1/CMP2. activando un flags (provocando una interrupción si están habilitadas). hasta que dé overflod.oscil/4).

Nelson Añón 150 .oscil/4 Timer Cristal 4 MHz Ciclo instrucción 1 MHz Ciclo instrucción T = 250 ns T x 4 = 1 us T = 1 us T x 4 = 4 us T (período de instrucción) PIC Prof.TEMPORIZADOR TMR0 Tiempo = Frec.

TEMPORIZADOR TMR0
REGISTRO TMR0: El dispositivo 16F628A dispone de un TMR0. El TMR0 es un contador ascendente de 8 bits, que puede funcionar como reloj interno ó externo y ser sensible al flanco ascendente ó descendente. Se le puede asignar el divisor de frecuencia. Una novedad importante en el TMR0 es la posibilidad de generar una interrupción cuando se desborda.

PIC

Prof. Nelson Añón

151

TEMPORIZADOR TMR0
REGISTRO TMR0: Funcionamiento en 10 puntos:
1. El bit T0CS (OPCION<5>) determina si está a 1 que el TMR0 funciona en modo contador y si está a 0 en modo de temporizador, con señal externa de reloj por T0CKI. 2. En el modo contador, el bit TOSE (OPCION<4>) selecciona el tipo de flanco activo en T0CKI. (1: descendente y 0: ascendente). 3. En modo contador el período de la señal externa debe ser como mínimo de 4 Tosc¶. En el modo temporizador la frecuencia de trabajo es Fosc/4.
PIC Prof. Nelson Añón 152

TEMPORIZADOR TMR0

4. El bit PSA (OPTION<3>) asigna el divisor de frecuencia al TMR0 si está a 0 y al WDT si está a 1. 5. El ratio al que funciona el divisor de frecuencia se elige con los bits PS2, PS1 y PS0 (OPTION<2:0>). 6. El TMR0 se puede leer en cualquier momento para conocer el estado de la cuenta. 7. Cuando se escribe un nuevo valor en TMR0 para establecer una nueva temporización, los incrementos del mismo se inhiben durante los dos ciclos de reloj posteriores.
PIC Prof. Nelson Añón 153

TEMPORIZADOR TMR0
8. Como es un contador ascendente, conviene cargarle con el complemento a 2 del valor deseado para la temporización. Se utilizan las mismas fórmulas indicadas en la descripción del TMR0. 9. Cuando se desborda el TMR0, es decir, cuando pasa del valor FF h a 00 h, se activa el bit <2> de INTCON (T0IF). Actúa como una bandera de señalización del desbordamiento. Si además, el bit <7> de dicho registro está a 1 (Permiso de interrupción), se genera una interrupción. El bit T0IF se debe borrar por software una vez atendida la interrupción. 10. En el modo de reposo (Sleep) el TMR0 se detiene, por lo que no puede originar interrupción.
PIC Prof. Nelson Añón 154

TEMPORIZADOR TMR0 TMR0 BANCO 0 BANCO 1 0 x 01 TMR0 0 x 81 OPTION 0 x 0B INTCON 0 x 8B INTCON 155 PIC Prof. Nelson Añón .

TEMPORIZADOR TMR0 BITS DEL REGISTER OPTION: TOCS 5 BIT = TOCS TOCS: TMR0 CLOCK SOURCE 1 = 0 = TRANSICIÓN EN RA4/TOCK1(contador) CLOCK INTERNO DE CICLO DE INSTRUCCIÓN TOSE 4 OPTION (0 x 81) PIC Prof. Nelson Añón 156 .

Nelson Añón 157 .TEMPORIZADOR TMR0 BITS DEL REGISTER OPTION: TOCS 5 BIT = TOSE TOSE: TMR0 1 = 0 = SOURCE EDGE SELECT BIT (1 (0 0) RA4/TOCK1 1) RA4/TOCK1 TOSE 4 OPTION (0 x 81) INCREMENTA EN INCREMENTA EN PIC Prof.

TEMPORIZADOR TMR0 REGISTRO INTCON: El INTCON es un registro de lectura y escritura.5 ³PIR1 Register´ para una descripción de la habilitación del comparador y sus bits.5 ³PIR1 Register´: Este registro contiene bits de interrupción.2. Nota: Los bits de interrupción se ponen a uno ³1´ cuando ocurre una condición de interrupción.2.4 ³PIE1 Register´ y la Sección 3.2.2. Nelson Añón 158 PIC . guardándose el estado del correspondiente bit de habilitación ó habilitación global bit. 3. el cual contiene habilitadas varias banderas de bits.2.4 ³PIE1 Register´: Este registro contiene bits que habilitan interrupciones 3.2. Mire la Sección 3. GIE (INTCON<7>) Prof. todas fuentes de interrupción.2. excepto el módulo de comparación.2.

Nelson Añón 159 .TEMPORIZADOR TMR0 PIC Prof.

Nelson Añón 160 .PIC Prof.

Nelson Añón 161 .PIC Prof.

TEMPORIZADOR TMR0 BIT DEL REGISTER INTCON: TOIF 2 BIT = TOIF TOIF: TMR0 INTERRUPT FLAG BIT INTCON (0 x 0B) (0 x 8B) 1 = TMR0 se ha desbordado (overflow). Nelson Añón 162 . hay que ponerlo a cero por programa 0 = TMR0 no hay desborde PIC Prof.

el cual coincide con el periodo de incremento de TMR0 T= 4/F.TEMPORIZADOR TMR0 Cálculo para TMR0: 1)Determinar el periodo del ciclo de instrucción. Nº pulsos a contar =tiempo/T 3)Calcular el valor a cargar en TMR0.OSCILADOR. VALOR A CARGAR = 256-Nº pulsos +2 PIC Prof. recordar que Toif se pone a ³1´ al pasar de FF a 00 y que los primeros pulsos luego de cargar TMR0 se pierden. 2)Calcular el número de veces que T cabe en el tiempo que debemos temporizar. Nelson Añón 163 .

TEMPORIZADOR TMR0 Cálculo para TMR0: 1)Determinar el periodo del ciclo de instrucción. Nº pulsos a contar =tiempo/T 3)Calcular el valor a cargar en TMR0. el cual coincide con el periodo de incremento de TMR0 T= 4/F. 2)Calcular el número de veces que T cabe en el tiempo que debemos temporizar. recordar que Toif se pone a ³1´ al pasar de FF a 00 y que los primeros pulsos luego de cargar TMR0 se pierden. Nelson Añón 164 . VALOR A CARGAR = 256-Nº pulsos +2 PIC Prof.OSCILADOR.

TEMPORIZADOR TMR0 Cálculo para TMR0: Ejemplo: Cristal = 4 MHz tiempo: 100 us T = 4/4 MHz = 1 us Nº pulsos = tiempo/T = 100 us / 1 us = 100 pulsos Valor a agregar = 256 ± 100 + 2 = 15810 PIC Prof. Nelson Añón 165 .

..........TOIF NO TOIF = 1 SI END PIC Prof..... Nelson Añón 166 .........TEMPORIZADOR TMR0 START INICIALIZACION D µ 158¶....TMR0 0...

SI . flag de overflow Toif=1 ESPERA .5. selecciona clock interno TOCS=0 STATUS.5.5.TEMPORIZADOR TMR0 List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU RESET ORG bsf bcf bcf movlw movwf bcf ESPERA btfss goto nop end p=16F628A 0x01 0x0B 0x81 0x03 0x00 Status.2. selecciono Banco0 D¶158¶. NO . cargar valor decimal 158 TMR0.2. selecciono Banco 1 Option. cargo TMR0 para 100 us INTCON. pongo a 0 TOIF INTCON.

Nelson Añón 168 .TEMPORIZADOR TMR0 Ejemplo: Utilizando un PIC 16F628A con un reloj de 1 MHz. Datos: 1 ciclo instrucción = 4T T= 1/1000 = 1 ms T= 4/1 MHz = 4 us ciclo de instrucción RB0 500 us 1 ms Nº pulsos = 500 us / 4us = 125 Valor a cargar = 256 ± 125 + 2 = 133 pulsos PIC Prof. con un frecuencia de 1 KHz. realizar un oscilador que entregue una señal de onda cuadrada en RB0.

.TOIF NO TOIF = 1 SI END PIC Prof...........TEMPORIZADORES START INICIALIZACION D µ 133¶.... Nelson Añón 169 .....TMR0 0..........

5.TEMPORIZADORES List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU CMCON EQU TRISA EQU TRISB EQU PORTA EQU PORTB EQU RESET ORG inicio movlw p=16F628A 0x01 0x0B 0x81 0x03 0X1F 0X85 0X86 0X05 0X06 0x00 goto movwf bsf bcf 0x07 inicio CMCON Status.6 . selecciono Banco 1 Status.

5.5 TIMER 0x01 PortB. selecciona clock interno TOCS=0 Status.TEMPORIZADORES movlw movwf bcf bcf goto movlw xorwf movlw movwf bcf btfss goto goto end b¶11111110¶ TrisB Option.2 INTCON.2 ESPERA INVERSION INVERSION TIMER ESPERA .1 D¶133¶ TMR0 INTCON.

La instrucción CLRWDT pone a cero el WDT y a 1 los bits To y PD del STATUS. funciona en base a un oscilador RC interno del PIC totalmente independiente del clock. El WDT tiene un período nominal de 18 miliseg. PIC Prof. Durante la operación manual el watchdog genera ³Device Reset´ al dar ³time out´ (terminar el tiempo del timer). el cual varía con la temperatura. la tensión de alimentación VDD y de un chip a otro. Nelson Añón 172 .WATCHDOG Es un timer de período fijo 18 miliseg aproximadamente.

El WDT puede ser habilitado sólo en la programación del PIC. PIC Prof.WATCHDOG El bit To del STATUS es puesto a cero cuando el WDT da un ³time out´. Nelson Añón 173 .

Nelson Añón 174 195 pulsos . aquí aplicamos el prescaler máximo que es 256 si tomo 50 ms 20 veces llego a 1 seg de demora 256 pulsos PIC 65 ms 50 ms aproximadamente Prof. Programar una subrutina que al ser invocada.54 ms. produzca una demora de aproximadamente 1 seg. Datos: 1 ciclo instrucción = 4T 4 MHz = 4 x 10 6 Hz T = 4 / 4 MHz = 1 us ciclo de instrucción TMR0 cuenta máximo 0xff 256 us 256 x 256 = 65.TEMPORIZADOR TMR0 Ejemplo: Se está utilizando un PIC con un oscilador de 4 MHz.

.CONTADOR NO CONTAD FINAL SI VOLVER PIC Prof..CONTADOR TIMER CONTADOR+1.... Nelson Añón 175 .......TEMPORIZADOR TMR0 START 0 ....

536 us Utilizo 50 ms 20 veces El período de TMR0 = tiempo / prescaler = 50 / 256 = 195 us Valor a cargar en TMR0 = 256 ± 195 + 2 = 63 Factor divisor = 256 Valor del TMR0 = 63 PIC Prof. produzca una demora de aproximadamente 1 seg. Nelson Añón 176 . Programar una subrutina que al ser invocada.TEMPORIZADOR TMR0 Ejemplo: Se está utilizando un PIC con un oscilador de 4 MHz. 4 MHz 1 us sin prescaler Tmáxima = 256 us con prescaler T máxima = 256 us x 256 us = 65.

SELECCIONO BANCO 1 b¶10000111¶. SELECCIONO BANCO 1 STATUS. 5. SELECT BANCO 0 . PROG TMR0 Y PRESCALER OPTION STATUS. 5. BSF BCF MOVLW MOVWF BCF p=16F628A 0x01 0x0B 0x81 0x03 0x020 0x00 INICIO CLEAR WDT STATUS.TEMPORIZADOR TMR0 List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU CONT EQU RESET ORG GOTO INICIO CLRWDT. 6.

0. CONTADOR D¶63¶ TMRO. 2... NO ......TEMPORIZADOR TMR0 DEMORA TIMER MOVLW MOVWF MOVLW MOVWF BCF BTFSS GOTO DECF GOTO RETURN END D¶20¶ CONT...TOIF INTCON. TOIF=1? POLLING. SI TIMER.. 2.. 20. NO CONT..... SI POLLING . CARGO TMR0 INTCON.

Existen algunos procesos que no pueden esperar a que el programa lo interrogue. de tratamiento de interrupciones. La CPU suspenderá el programa que está ejecutando y saltará a una subrutina. la propia puerta I/0 debe tomar la iniciativa y llamar la atención a la CPU. PIC Prof. a esto le llamamos interrupción. Para ello debemos interrogar periódicamente a una puerta de estados asociada a la puerta de datos.INTERRUPCIONES Hemos visto que el método de POLLING ó interrupción nos permite saber qué está pasando en una puerta (I/0). Nelson Añón 179 .

Dichos sucesos pueden ser externos al sistema. PIC Prof. ó bien internos. Las interrupciones son desviaciones del flujo de control del programa originadas asincrónicamente por diversos sucesos que no se hallan bajo la supervisión de las instrucciones.INTERRUPCIONES Los llamados a subrutina mediante la instrucción CALL son desviaciones del flujo de control del programa asignado por instrucción. se los considera sincrónicos. como el desbordamiento de un contador. como la generación de un flanco ó nivel activo en una patita del microcontrolador. Nelson Añón 180 .

En el PIC 16F628A el vector de interrupción se halla situado en la dirección 0004h. en donde comienza la rutina de servicio a la interrupción (RSI). Nelson Añón 181 . llamada vector de interrupción.INTERRUPCIONES El comportamiento del microcontrolador ante la interrupción es similar al de la instrucción CALL de llamada a subrutina. y en el caso de una interrupción es una dirección ³reservada´ de la memoria de programa. PIC Prof. que en el caso de CALL viene acompañando a la propia instrucción. En ambos casos se detiene la ejecución del programa en curso. se salva la dirección actual del PC en la pila y se carga el PC con una dirección.

INTERRUPCIONES En general. Nelson Añón 182 . Concretamente aquellos que la RSI va a emplear y va a alterar su contenido. Algunos procesadores salvan estos registros en la Pila. Antes del retorno al programa principal se recuperan los valores guardados y se restaura completamente el estado del procesador. que traslada el flujo de control a la zona de la memoria de programa (ó código) destinada a contener la rutina de atención a la interrupción. en dicho vector se suele colocar una instrucción de salto incondicional (GOTO). pero el PIC 16F628A como toda su familia no disponen de instrucciones para meter (push) y sacar (pop) información de la Pila. PIC Prof. utilizando para este fin registros de propósito general de la memoria de datos. La RSI suele comenzar guardando en la memoria de datos algunos registros específicos del procesador (CPU).

Nelson Añón 183 . PIC Prof. por lo que otra de las operaciones iniciales de la RSI es averiguar cual de las posibles causas ha sido la responsable de la interrupción en curso. Otro detalle importante en la RSI de los PIC es que estos microcontroladores poseen un bit GIE (Global Interrupt Enable) que cuando vale 0 prohíbe todas las interrupciones.INTERRUPCIONES La familia de los PIC 16F628A pueden ser interrumpidos por 10 causas diferentes. pero todas desvían el flujo de control a la dirección 0004h. Para ello se exploran los señalizadores (banderines) de las fuentes de interrupción.

Dicho retorno de interrupción se realiza mediante la instrucción RETFIE. porque si bien los señalizadores se ponen a 1 automáticamente en cuanto se produce la causa que indican. GIE pasa a valer automáticamente 1 para volver a tener en cuenta las interrupciones. PIC Prof. Nelson Añón 184 . En el retorno final de la interrupción.INTERRUPCIONES Pues bien. con objeto de no atender nuevas interrupciones hasta que se termine la que ha comenzado. al comenzar la RSI dicho bit GIE se pone automáticamente a 0. la puesta a 0 se hace por programa. Antes del retorno conviene borrar el señalizador ó bandera de la causa de interrupción que ha atendido.

INTERNO: desborde de un contador TMR0.INTERRUPCIONES Causas de Interrupción: EXTERNOS: un pulso de una línea I/0 RB0/INT. cambio de estado de los pines RB4 a RB7. Nelson Añón 185 . PIC Prof.

Nelson Añón 186 . GIE 2) Guarda el Program Counter en el STACK PIC Prof. Esa dirección llamada vector de interrupción de la rutina de interrupción se retorna con la instrucción RTFIE.INTERRUPCIONES Antes de este evento el PIC: 1) Deshabilita las instrucciones 0 3) 0004h pasa al Program Counter La dirección de memoria 0004h es entonces el punto donde comienza la rutina que atiende las interrupciones.

PIC Prof.INTERRUPCIONES 1) Externa interrupción RBO/INT 2) Desborde TMR0 3) Cambia algunas de las líneas RB4 a RB7 (cambio de estados) Las interrupciones se utilizan a partir de la posición de Programa. Nelson Añón 187 .

Nelson Añón 188 Programa Principal .INTERRUPCIONES Modelo de Programa Reset ORG goto ORG goto Inicio 0000 inicio 0004 interrup 0005 ------------------------------------------------------------------PIC Prof.

Nelson Añón 189 .INTERRUPCIONES Interrupción 1) Identificar la causa de la interrupción 2) Atenderla 3) Finaliza con la instrucción RETFIE PIC Prof.

leer la puerta B y copiarla a la posición a M (0x20) PIC Prof. simultáneamente. Nelson Añón 190 .INTERRUPCIONES Ejercicio: Hacer un oscilador de 1 KHz con un PIC 16F628A en la salida RB0.

Nelson Añón 191 .INTERRUPCIONES Inicio Interrupción Inicializar INVERTIR RB0 GOTO RUTINA Leer PORTB PROGRAMAR TIMER PARA 500 US Volver W----M(0x20) PIC Prof.

SELECT BANCO 1 .TEMPORIZADOR TMR0 List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU PORTB EQU TRISB EQU ORG GOTO ORG GOTO INICIO BSF BCF p=16F628A 0x01 0x0B 0x81 0x03 0x06 0x86 0x000 INICIO 0x0004 INTER STATUS. SELECCIONO BANCO 1 STATUS. 6. 5.

...TOIF INTCON PORTB.. 5. TOCS (habilita clock interno) STATUS. 2. RECUPERO W . 1=GIE 1=TOIE 0.TOIF 0x21.. 1. 0. 0 0x20 RUTINA 0x21... 5. REGRESA A LA RUTINA . INVIERTO RB0 D¶133¶ TMR0. SALVO W 0x01 PORTB. SELECCIONO BANCO 0 D¶133¶ TMR0... 0. CARGO TMR0 0xA0...MOVLW BCF BCF MOVLW MOVWF MOVLW MOVWF MOVF MOVWF GOTO MOVWF MOVLW XORWF MOVLW MOVWF BCF MOVF RETFIE RUTINA INTER 0XFE OPTION. 0. CARGO TM0 INTCON.

Nelson Añón 194 .Interrupciones PIC Prof.

Interrupciones PIC Prof. Nelson Añón 195 .

PIC Prof. Nelson Añón 196 .

PIC Prof. Nelson Añón 197 . Se puede provocar una petición de interrupción mediante la programación del bit TMR1IE (PIE1<0>). en cuyo instante activa <<1>> la bandera TMR1IF (PIR1<0>) y vuelve a 0000h. El valor del registro (TMR1H:TMR1L) evoluciona desde 0000h hasta FFFFh.ORGANIZACIÓN DE LA MEMORIA REGISTRO TMR1: El TMR1 es un temporizador/contador ascendente de 16 bits. que contienen el valor del conteo en cada momento. Estos registros pueden leerse y escribirse. por lo que está implementado mediante dos registros específicos TMR1H y TMR1L.

se incrementa con cada flanco de subida de la señal del reloj externa. En modo temporizador. PIC Prof. El modo de funcionamiento viene determinado por el bit 1. mientras en modo contador.ORGANIZACIÓN DE LA MEMORIA REGISTRO TMR1: El funcionamiento de TMR1 depende de la programación del registro T1CON (10h). ó por impulsos aplicados al pin RB6. Nelson Añón 198 . TMR1 puede funcionar como temporizador y como contador síncrono ó asíncrono. que se aplica a los pines RB6 y RB7. TMR1CS (T1CON<1>). TMR1 se incrementa con cada ciclo de instrucción (Fosc/4).

En los PIC16F62X los pines son RB6 y RB7. El oscilador se activa poniendo a 1 el bit T1OSCEN del registro T1CON. Prof.ORGANIZACIÓN DE LA MEMORIA REGISTRO TMR1: Como fuente de los impulsos de reloj existen tres alternativas: 1. Generación mediante un oscilador externo controlado por cristal que se conecta a los pines RB6/T1OSO/T1CKI y RB7/T1OSI/CCP2. El bit TMR1CS del registro T1CON selecciona entre reloj interno ó externo. 2. Nelson Añón 199 PIC . Generación interna (Fosc/4).

En los PIC16F62X el pin es RB6. Nelson Añón 200 . PIC Prof. Trabaja en modo contador de eventos cuando los impulsos externos a contar se aplican a la patita RB6/T1OSO/T1CKI.ORGANIZACIÓN DE LA MEMORIA REGISTRO TMR1: 3.

éstos proceden de una señal externa. desactivando TMR1 cuando vale 0. Prof. Es posible colocar entre estos pines un cristal de cuarzo de hasta 200 KHz que permite que el oscilador siga en funcionamiento incluso en modo de bajo consumo SLEEP. cuando su valor es 1. Registro 7-1. El bit 1 TMR1CS elige la fuente de pulsos. Si el bit T1OSCEN vale 0. los pulsos se introducirán por el pin RB6. actúan los pines RB6 y RB7 como entradas del reloj externo.ORGANIZACIÓN DE LA MEMORIA REGISTRO TMR1: El funcionamiento de TMR1 depende de la programación del registro T1CON (10h). El bit 0 TMR1ON gobierna su funcionamiento. En este caso. Nelson Añón 201 PIC . si el bit 3 T1OSCEN vale 1.

Nelson Añón 202 .PIC Prof.

Nelson Añón 203 .PIC Prof.

Nelson Añón 204 .PIC Prof.

Nelson Añón 205 .PIC Prof.

Nelson Añón 206 .PIC Prof.

Nelson Añón 207 .PIC Prof.

PIC Prof. Nelson Añón 208 .

PIC Prof. Nelson Añón 209 .

PIC Prof. Nelson Añón 210 .

Nelson Añón 211 .PIC Prof.

Nelson Añón 212 .PIC Prof.

Nelson Añón 213 .PIC Prof.

PIC Prof. Nelson Añón 214 .

Nelson Añón 215 .PIC Prof.

MCLR MODIFICACIONES CONT_POSTSC_SEG EQU 0X20 CONT_TIME_01 EQU 0X21 W_TEMP EQU 0X30 STATUS_TEMP EQU 0X31 #DEFINE PA0 PORTA.7 #DEFINE PB1 PORTB. DE LA MEMORIA FLASH) . SALTA A LA ETIQUETA "INICIALIZA_MC" .SAL 0) . EN EL REGISTRO CMCON .VECTOR RESET (DIR. DE LA MEMORIA FLASH) . CONFIGURA PINES DEL COMP.TITULO: Timer de 10 segundos con TMR1 PIC16F628A .RP0 CLRF PORTB . CAMBIO AL BANCO 0 . LIBRERIA DE DIRECCIONES CORRESPONDIENTES AL PIC . DEFINE SALIDA DEL LED A ENCENDER . DEFINE DIRECCIÓN DE MEMORIA RAM . ESCRIBE ESTE VALOR EN EL ACUMULADOR .2 #DEFINE PA1 PORTA. VECTOR INTERRUPCION (DIR. MUEVE ESTE VALOR AL REGISTRO TRISA (ENT 1 . PROCESADOR UTILIZADO . SALTA A LA ETIQUETA "PUSH" (INTERRUPCIÓN) . DEFINE ENTRADA DEL PULSADOR . DEFINE DIRECCIÓN DE MEMORIA RAM .4MHz intRC .3 #DEFINE PB0 PORTB. .SAL 0) . ANÁLOGO COMO I/O DIG. LIMPIA EL REGITRO PORTB . MUEVE ESTE VALOR AL REGISTRO TRISB (ENT 1 . CAMBIO AL BANCO 1 .6 LIST p=16F628A INCLUDE "P16F628A.INC³ ORG 0x0000 GOTO INICIALIZA_MC ORG 0x0004 GOTO PUSH INICIALIZA_MC MOVLW B'00000111' MOVWF CMCON BSF STATUS. DEFINE ENTRADA DEL PULSADOR . ESCRIBE ESTE VALOR EN EL ACUMULADOR . DEFINE SALIDA DEL LED A ENCENDER .RP0 MOVLW B'11111111' MOVWF TRISA MOVLW B'00111111' MOVWF TRISB BCF STATUS.

W 0x2007 H'3F30' . VALOR PARA LA PALABRA DE CONFIGURACION . DIR. . COLOCA EN 0 EL FLAG DE LA INTERRUPCION CORRESP. (RUTINA DE SERVICIO DE INTERRUPCIÓN) . RETORNA DE LA INTERRUPCION HABILITANDO EL BIT GIE" . GUARDA EL VALOR DE W EN W_TEMP . . RECUPERA VALORES DE W . MUEVE EL VALOR DE W AL REGISTRO "STATUS" . RECUPERA VALORES DE STATUS . GUARDA EL VALOR DE STATUS EN STATUS_TEMP . VALOR INICIAL DEL REGISTRO "CONT_POSTSCALA" . FIN DEL PROGRAMA FIN_RSI POP . SALTA A LA ETIQUETA "LOOP_SINFIN" . . DE MEM. RESTA 1 AL REGISTRO Y SALTA CUANDO ES CERO . . VALOR INICIAL DEL REGISTRO "TMR1H" . .W STATUS W_TEMP.TMR1IF STATUS_TEMP.F GOTO FIN_RSI MOVLW D'20' MOVWF DECFSZ GOTO MOVLW MOVWF BCF MOVLW MOVWF MOVLW MOVWF BCF SWAPF MOVWF MOVF RETFIE ORG DATA END CONT_POSTSC_SEG CONT_TIME_01.W MOVWF STATUS_TEMP RSI DECFSZ CONT_POSTSC_SEG . . ROM DE LA PALABRA DE CONFIGURACION . VALOR INICIAL DEL REGISTRO "TMR1L" . VALOR INICIAL DEL REGISTRO "CONT_POSTSCALA" . RESTA 1 AL REGISTRO Y SALTA CUANDO ES CERO .F FIN_RSI D'10' CONT_TIME_01 PB0 H'B0' TMR1L H'3C' TMR1H PIR1.PROGRAMA PRINCIPAL PROG_PRINCIPAL BTFSC PA0 BSF PB0 GOTO PROG_PRINCIPAL RUTINA DE SERVICIO DE INTERRUPCIÓN PUSH MOVWF W_TEMP SWAPF STATUS.

Sign up to vote on this title
UsefulNot useful