P. 1
Programacion Lenguaje Assembler 251007 1212174570118517 8

Programacion Lenguaje Assembler 251007 1212174570118517 8

|Views: 966|Likes:
Publicado porloukkas

More info:

Published by: loukkas on Oct 30, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

08/09/2013

pdf

text

original

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

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. PIC Prof.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 . Programa en Assembler: ¿Cómo introducimos un Programa en Assembler en un microcontrolador? Tenemos que traducirlo.

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. Nelson Añón 6 . se usan algunas convenciones. En general las convenciones son cualquier acción que facilitan la revisión y comprensión de un programa.

ERR Los ficheros ejecutables 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 *. Comentarios explicando cada línea de código PIC Prof.HEX Los mnemónicos escritos en mayúscula hacen que el código escrito sea más visible.OBJ Los ficheros de errores llevarán la extensión *.ASM Los ficheros de listado llevarán la extensión *. Nelson Añón 7 .LST Los ficheros de código objeto llevarán la extensión *.

Nelson Añón 8 . como se muestra debajo.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. Las instrucciones están divididas en un número de campos.0 reg1 . ó puede estar en blanco. El campo del operando ó dirección puede contener una dirección ó un dato. éste siempre contiene una instrucción ó una directiva del Assembler. ETIQUETAS OPERACIÓN OPERANDO COMENTARIO Lectura movf movwf portA. PIC Prof.lee el puerto A .

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

Nelson Añón 10 . el Assembler la define como el equivalente a la dirección del primer byte correspondiente a esa instrucción. Si una etiqueta está presente.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. Se usan frecuentemente en las instrucciones de salto. Esta etiqueta puede volver a usarse en otro lugar pero como operando de una instrucción. PIC Prof. El Assembler reemplazará ésta etiqueta por el valor de cuando fue creada.

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

PIC Prof. Nelson Añón 12 . El Assembler realiza esta tarea usando una tabla como si lo haríamos ³a mano´. 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.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 13 . Para usar estas directivas ó seudo-operandos. designan áreas de RAM para el almacenamiento de datos temporales. colocan tablas ó datos constantes en memoria y permiten referencias a otros programas. y si lo requiere la directiva. éstas asignan al programa ciertas áreas de memoria. una dirección ó dato en el campo de dirección. Las directivas se utilizan como comandos escritos en el código fuente para realizar un control directo ó ahorrar tiempo a la hora de ensamblar. el programador las coloca en el campo de código de operaciones.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. PIC Prof. Éstas instrucciones son directivas para el Assembler. definen símbolos.

#DEFINE #define<nombre> [<valor a reemplazar>] Explicación: declara una cadena de texto como subtítulo de otra.Introducción a la Programación en Lenguaje Assembler Las directivas de uso frecuente son instrucciones para el compilador. Nelson Añón 14 . 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.

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.Introducción a la Programación en Lenguaje Assembler EQU portA equ 0x05 Explicación: define una constante de ensamble INCLUDE Include<PIC16F628A. Nelson Añón 15 .

Nelson Añón 16 . PIC Prof.Introducción a la Programación en Lenguaje Assembler EQU (Equate ± Equivalente): La directiva EQU permite al programador igualar nombres a datos ó direcciones. direcciones de comienzo. Los programas y los datos pueden estar alojados en diferentes áreas de memoria dependiendo de la configuración de memoria. rutinas 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. subrutinas de interrupción y otros programas deben comenzar en locaciones de memoria fijados por la estructura del microcontrolador. subrutinas ó datos residirán. datos numéricos. posiciones de byte. direcciones fijas.

sino también las direcciones de cada instrucción y datos del programa).: Reset org 0x00 goto inicio org 0x04. programa de servicio de interrupción.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. Usualmente se la utiliza para: reset. Nelson Añón 17 . aquí comienza el programa (lee portA) PIC Prof. vector de interrupción goto interrupción org 0x05 Inicio movf portA.0. Por ej.

Nelson Añón 18 . 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.120 Significa: ³mover el número literal 120 (decimal) al registro de trabajo w´ PIC Prof.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.

binarios. 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. Por ej.: include lectura.: 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 como si fuese parte del propio programa.asm Esta línea de programa le indica al compilador que incluya el código que se encuentra en el archivo lectura. PIC Prof.

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

6 A partir de ahora.5 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 .Instrucciones para Ensamblar Programas Con estas directivas haremos los siguientes ejemplos: #DEFINE #DEFINE BANCO1 BANCO0 BSF BCF STATUS. recordemos que rp0 y rp1 son los bits que seleccionan en el registro de Status y empiezan en 00. PIC Prof.

nos ayudarán las siguientes pautas: 1. 2. PIC Prof. btfss). 3. La primera columna se ponen las etiquetas ó las direcciones de programa. 4. clrw. Al principio van los EQU y los #DEFINE. El Programa se escribe en cuatro columnas separadas por tabuladores. Nelson Añón 22 . En la segunda columna se ponen las instrucciones (bcf. después comenzamos con el Programa.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. 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. PIC Prof. 6. Nelson Añón 23 . nos ayudarán las siguientes pautas: 5.

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

1ª Col.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.Aprendiendo a Programar Ejemplo: Vamos a definir a la variable AZUL en la posición de memoria expresada en número hexadecimal 20. . PIC Prof. EQU es la directiva que significa asignar ó definir. Nelson Añón 25 . AZUL 2ª Col. 0x20 4ª Col. EQU 3ª Col.

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

Nelson Añón 27 .1} M(f) d=0 d=1 flagZ=1 f. 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.

OP:0000001fff ffff PIC Prof. Nelson Añón 28 .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.

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

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.0 0x30 PIC Prof. Nelson Añón 30 .

denominación usada porque programamos en assembler. Nelson Añón 31 .Instrucciones para Ensamblar Programas Pasar del Código fuente al código máquina ú objeto. se llama compilación o ensamblado. 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.

Nelson Añón 32 .pjt NOMBRE.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.pjt Ej001.asm Ej001.Instrucciones para Ensamblar Programas 1) Crear un nuevo proyecto en menú ³Project´ ³File´ Proyecto Fuente Ejemplo: New NOMBRE.

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

asm OK Change Tools 16F628A Processor Salvar en la misma carpeta llamada example PIC OK Prof.Instrucciones para Ensamblar Programas 2. 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.

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

Windows Save Build All OK Mal Program Memory Memoria de Programa [formato instrucción] 0x20. File 6.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.Instrucciones para Ensamblar Programas 5. Project Build Failed 7. Nelson Añón .

Instrucciones para Ensamblar Programas 7. 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.

0 0x30 PIC Prof. Nelson Añón 38 .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.

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

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

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.Instrucción Suma addwf instrucción d={0. Nelson Añón 41 .1} W +M(f) W +M(f) flags f. DC y Z Cód.

Nelson Añón .0 movwf 0x2E código fuente 42 M(0x2E) Fin PIC Prof.0 addwf 0x2D.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.

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 0x2D.0 0x2E PIC Prof. Nelson Añón 43 .

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

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

Instrucción Resta Los números en el microcontrolador no pueden tener signos diferentes. 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 46 .

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

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 23 0 1 2 3 4 5 6 7 8 9 PIC 22 0 0 0 0 1 1 1 1 0 0 Prof.

Desafortunadamente con 4 bits se alcanzan 16 combinaciones distintas. por lo que las 1010 a 1111 no tiene aplicación. El dígito ³1´ por ejemplo se representa mediante el código 0001 y el ³9´ mediante el código 1001. PIC Prof. Para poder codificar los dígitos de 0 a 9 se usan 4 bits (con 3. sólo se habría podido codificar 8 dígitos) que en principio servirían para codificar hasta 16 dígitos. Nelson Añón 49 . y por lo tanto no se utilizan.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. es decir son ilegales en un código BCD.

PIC Prof. es decir un 10 El resultado es incorrecto. La razón es obvia. del 1010 al 1111. Nelson Añón 50 las operaciones aritméticas resultan Ejemplo de cómo se suman 2 números en BCD: . al usar las reglas de adición binaria normal habrá que saltar los 6 dígitos ilegales en BCD. 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´.Binario Codificado en Decimal (BCD) Formato BDC Consecuentemente complicadas.

Al usar la notación BCD. PIC Prof. es decir 16.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. cuando ésta se realice a través de la zona de códigos ilegales. que es el resultado correcto. Nelson Añón 51 . 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.

0 movwf 0x2A código fuente 52 M(0x2A) Fin PIC Prof. Nelson Añón .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 53 .0 0x2A PIC Prof.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.

PORTB. TRISA y TRISB. 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.Configuración de los pines en Entradas / Salidas En esta parte del curso nos vamos a familiarizar con la configuración de los pines. El objetivo de esto es comunicarnos con el mundo exterior a través de los pines de entrada. 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. Nelson Añón 54 . En las siguientes diapositivas se muestra nuevamente la información que suministra el fabricante. y los registros PORTA. PIC Prof.

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.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. sin driver de salida.

Nelson Añón 56 .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.

PIC Prof. Nelson Añón 57 .

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

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. Nelson Añón 60 .Instrucciones para Ensamblar Programas bsf f.

Instrucciones para Ensamblar Programas bcf f. 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.

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

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

Nelson Añón 64 .PIC Prof.

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

selecciono Banco 1 0xFF TRISA. programo PuertaB Status.Instrucciones para Ensamblar Programas Programar todas las líneas del PORTA como entrada y todas las líneas del PORTB como salida. programo PuertaA 0x00 TRISB. selecciono Banco 0 Prof. Nelson Añón 69 .5.6. 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.5. selecciono Banco 1 Status.

1 btfcs portA. 1 GOTO Pepe PIC Inicio Programar PORTA y PORTB GOTO RUTINA Leer PORTA Escribir en PORTB Prof.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. Nelson Añón 70 .

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

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. 0. deshabilito comparadores Status. PORTA PORTB. programo PuertaA 0x00 TRISB. W RUTINA W PORTB . selecciono Banco 0 PORTA. posición inicial del programa 0x07. deshabilito comparadores CMCON. selecciono Banco 1 0xFF TRISA.5. programo PuertaB Status. selecciono Banco 1 Status.5.6.

Nelson Añón 73 . Prof. 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. cuando se suma este registro PC con uno de los 8 bits. 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.

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

INSTRUCCIONES DE SALTO: A estas instrucciones. y cuando se ejecuta esta instrucción se copian del PCLATH al PC los bits 12 y 11 del PC. PIC Prof. cuando la memoria de programa tiene más de 2K. pero también copian el contenido de PCLATH a la parte alta del registro PC. Nelson Añón 75 . por ejemplo ³goto loop´). se les pasa como parámetro un número de 11 bits (que uno generalmente reemplaza por un label.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. En estas instrucciones es donde está el problema del salto.

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

se puede direccionar una página de 2K de la memoria.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). Prof. 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. La Pila es una zona aislada de las memorias de programa y datos. 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 . y en los modelos de PIC que alcanzan ese tamaño.

Nelson Añón 78 . cada uno con 13 bits. RETLW y RETFIE.STACK O PILA Tiene una estructura LIFO. Funciona como un <buffer> circular. 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. PIC Prof. Tiene 8 niveles de profundidad. 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 de la Pila al ejecutar las instrucciones RETURN. de manera que el valor que se obtiene al realizar el noveno <desempilado> (pop) es igual al que se obtuvo en el primero.

PIC Prof. Nelson Añón 79 .

el resultado que se obtiene de la ALU. Nelson Añón 80 . Goto k :101 kkk kkkk kkkk PIC Prof. o sea 13 bits. 11 bits son del código de Operación de la instrucción. Abajo se indica la carga del PC en las instrucciones GOTO Y CALL. 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.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.

OP:00 0111dfff ffff PIC Prof.Instrucciones para Ensamblar Programas comf f. Nelson Añón 81 .d d={0.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.

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. Nelson Añón 82 . 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.

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

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

Nelson Añón 86 .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. El banco a acceder lo determinan los bits RP0 y RP1 del registro de status. concretamente en los 7 bits de menos peso. que viene incluída en el código OP de la misma. 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. PIC Prof. DIRECCIONAMIENTO DIRECTO: El operando que utiliza la instrucción en curso se referencia mediante su dirección.

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). 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). Nelson Añón 87 . mientras que los 7 bits de menos peso del FSR apuntan a la posición. INDF = contenido del FSR PIC Prof. El bit de más peso del FSR junto al bit IRP del registro de status se encargan de seleccionar el banco a acceder. El registro INDF no está implementado físicamente y cuando se le hace referencia.

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. Nelson Añón 88 .

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 .

Nelson Añón 90 .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.

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. Nelson Añón 95 .Instrucciones para Ensamblar Programas IORlw K 0=<K=< 255 W+K flags W afectados Z Realiza función OR. operación bit a bit K constante operacional Cód.

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

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. operación bit a bit K constante operacional Cód. Nelson Añón 97 .

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

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.1} M(f) M(f) flags f. OP:00 1110 dfff ffff PIC Prof. Nelson Añón 99 .Instrucciones para Ensamblar Programas swapf instrucción d={0.

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. Nelson Añón 100 .

Nelson Añón 101 .1} M(f) M(f) flags f.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.Instrucciones para Ensamblar Programas RRF instrucción d={0. OP:00 1100 dfff ffff PIC Prof.

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

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. PIC Prof. En cuanto a las instrucciones especiales se han incluído dos en este grupo: clrwdt y sleep. además de hacer lo mismo que return. 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.Instrucciones de Control y Especiales Otra más compleja es retlw k. GIE es el bit de permiso de todas las interrupciones. Es decir. carga en w el valor inmediato k que contiene. Para el final de las interrupciones hay otra instrucción cuyo nemónico es retfie. devuelve un parámetro desde la subrutina. que. Nelson Añón 103 .

Carga al PC con el contenido de la cima de la pila. Retlw k: hace los mismo que ³Return´ y. lo refresca ó lo reinicializa. carga en w el literal k. decir. instrucción clrwdt hay que colocarla estratégicamente ciertos puntos del programa para evitar la reinicialización. 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. Nelson Añón 104 . Solución: Return: retorna de una subrutina al programa principal. es se La en Ejemplo: explicar las diferencias entres las tres instrucciones de retorno. además. PIC Prof.Instrucciones de Control y Especiales La primera pone a cero el contenido del perro guardián.

SUBRUTINAS En ocasiones es necesario realizar un mismo procedimiento en distintos lugares de un programa. Se producen cada vez que se ejecuta dicha instrucción. Las llamadas a subrutina mediante la instrucción CALL son desviaciones del flujo de control del programa originadas por instrucciones. por lo que se consideran síncronas. 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. PIC Prof. Nelson Añón 105 . por ejemplo desplegar valores en un display. a ese código se le llama SUBRUTINA.

SUBRUTINAS Se puede. 2)Los 11 bits de la direccion ³K´. Nelson Añón 106 . son cargados en el PC (PCL y PCLATH) PIC Prof. 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. a lo sumo.

Nelson Añón 107 .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.

SUBRUTINAS RETURN: retorna a subrutina RETLW K (RETORNO. 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. Nelson Añón 108 .

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

5 segundos ó 500 miliseg PIC Prof. 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.000/ 250 = 500. Es decir necesito decrementar de 248 a 0 para que los números sean exactos. es decir decrementa 250. son las veces que tengo que repetir el decremento para obtener 0.SUBRUTINAS DE TEMPORIZACIÓN Para lograr este tiempo lo que debo hacer es decrementar (el decremento se puede hacer hasta 256). Nelson Añón 111 . Esto es lo que tenemos que obtener: 125.

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 .

demora 0.1) .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.5 seg DECO decfsz goto .1 inicio . (VAR3.1 deco VAR2.1) DOS decfsz goto UNO decfsz goto nop end . (VAR1.1 dos VAR1.

PIC Prof. Nelson Añón 115 . En ese momento se modifica la configuración en el MPLAB. y el fin lugar donde vamos a escribir la instrucción NOP antes de la directiva END.SUBRUTINAS DE TEMPORIZACIÓN Para poder ver el tiempo que demora el programa se debe fijar un comienzo y un fin..RUN. Usando el MPLAB para verificar el tiempo que logro obtener vamos a DEBUG.. Luego voy a OPTION ± DEVELOPMENT MODE elijo el PIC 16F628A ± clock de 1 MHz y acepto... El comienzo donde el programa dice inicio. indicando que quedó pronto para funcionar a esa frecuencia..RESET... 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)..

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

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

PIC Prof. Nelson Añón 118 .

Nelson Añón 119 .PIC Prof.

PIC Prof. Nelson Añón 120 .

Nelson Añón 121 .PIC Prof.

Nelson Añón 122 .PIC Prof.

PIC Prof. Nelson Añón 123 .

PIC Prof. Nelson Añón 124 .

Nelson Añón 125 .PIC Prof.

Nelson Añón 126 .PIC Prof.

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

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

Nelson Añón 129 .TEMPORIZADORES PIC Prof.

Durante un ciclo de instrucción. que comprende las cuatro señales mencionadas. 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.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. Q3 y Q4. Nelson Añón 130 . que configuran un ciclo de instrucción. Q2.

Q2-Q3: Durante la actividad de estas dos señales se produce la decodificación y la ejecución de la instrucción. Nelson Añón 131 . PIC Prof. 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. que consiste en realizar en paralelo las dos fases que comprenden cada instrucción. se aplica la técnica de segmentación. Para conseguir ejecutar cada instrucción en un ciclo de instrucción.TEMPORIZADORES Q1: Durante este impulso se incrementa el contador de programa.

PIC Prof. y en el segunda se decodifica y se ejecuta (fase de ejecución). Ver figura 2-1 del fabricante.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. Nelson Añón 132 . 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. originando que las instrucciones de salto tarden en realizarse dos ciclos de instrucción. Cuando la instrucción ejecutada corresponde a un salto no se conoce cuál será la siguiente hasta que se complete.

Nelson Añón 133 .TEMPORIZADORES PIC Prof.

Nelson Añón 134 .PIC Prof.

PIC Prof. Nelson Añón 135 .

PIC Prof. Nelson Añón 136 .

PIC Prof. Nelson Añón 137 .

Nelson Añón 138 .PIC Prof.

PIC Prof. Nelson Añón 139 .

Nelson Añón 140 .PIC Prof.

PIC Prof. Nelson Añón 141 .

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 .

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

También es necesario contar la cantidad de veces que ocurre un evento externo. Prof.TEMPORIZADOR TMR0 La programación del temporizador frecuencia de trabajo del PIC. 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. Nelson Añón 148 PIC . Hacer esto por medio de loop (bucle) de programa desperdiciaría capacidad de proceso y no siempre fácil de calcular con exactitud. el PIC 16F628A dispone de un Timer y Contador de 8 bits llamado TMR0.

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

Nelson Añón 150 .TEMPORIZADOR TMR0 Tiempo = Frec.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
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

Nelson Añón .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.

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.

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

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

Nelson Añón 160 .PIC Prof.

Nelson Añón 161 .PIC Prof.

hay que ponerlo a cero por programa 0 = TMR0 no hay desborde 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 .

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

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

Nelson Añón 165 .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.

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

5. NO .5.2. cargar valor decimal 158 TMR0. selecciono Banco0 D¶158¶.5. flag de overflow Toif=1 ESPERA . selecciono Banco 1 Option.2. SI . cargo TMR0 para 100 us INTCON. selecciona clock interno TOCS=0 STATUS.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. pongo a 0 TOIF INTCON.

TEMPORIZADOR TMR0 Ejemplo: Utilizando un PIC 16F628A con un reloj de 1 MHz. con un frecuencia de 1 KHz. 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. Nelson Añón 168 . realizar un oscilador que entregue una señal de onda cuadrada en RB0.

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

6 .5. selecciono Banco 1 Status.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.

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

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

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

54 ms. Programar una subrutina que al ser invocada.TEMPORIZADOR TMR0 Ejemplo: Se está utilizando un PIC con un oscilador de 4 MHz. 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. produzca una demora de aproximadamente 1 seg. Nelson Añón 174 195 pulsos . 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.

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

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. Nelson Añón 176 . produzca una demora de aproximadamente 1 seg.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. Programar una subrutina que al ser invocada.

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. SELECCIONO BANCO 1 b¶10000111¶. 5. PROG TMR0 Y PRESCALER OPTION STATUS. SELECT BANCO 0 . SELECCIONO BANCO 1 STATUS. 5.

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

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

como el desbordamiento de un contador. Nelson Añón 180 . Dichos sucesos pueden ser externos al sistema. ó bien internos. PIC Prof. 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. se los considera sincrónicos.INTERRUPCIONES Los llamados a subrutina mediante la instrucción CALL son desviaciones del flujo de control del programa asignado por instrucción. como la generación de un flanco ó nivel activo en una patita del microcontrolador.

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

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 182 . Antes del retorno al programa principal se recuperan los valores guardados y se restaura completamente el estado del procesador. PIC Prof. Concretamente aquellos que la RSI va a emplear y va a alterar su contenido. en dicho vector se suele colocar una instrucción de salto incondicional (GOTO). Algunos procesadores salvan estos registros en la Pila. pero el PIC 16F628A como toda su familia no disponen de instrucciones para meter (push) y sacar (pop) información de la Pila.INTERRUPCIONES En general. 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.

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. Nelson Añón 183 . Para ello se exploran los señalizadores (banderines) de las fuentes de interrupción. 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.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. PIC Prof.

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

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

GIE 2) Guarda el Program Counter en el STACK PIC Prof. Nelson Añón 186 .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. Esa dirección llamada vector de interrupción de la rutina de interrupción se retorna con la instrucción RTFIE.

PIC Prof. Nelson Añón 187 .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 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.

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

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.

SELECCIONO BANCO 1 STATUS. 6. 5. 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.

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

Nelson Añón 194 .Interrupciones PIC Prof.

Nelson Añón 195 .Interrupciones PIC Prof.

Nelson Añón 196 .PIC Prof.

que contienen el valor del conteo en cada momento.ORGANIZACIÓN DE LA MEMORIA REGISTRO TMR1: El TMR1 es un temporizador/contador ascendente de 16 bits. Estos registros pueden leerse y escribirse. Nelson Añón 197 . El valor del registro (TMR1H:TMR1L) evoluciona desde 0000h hasta FFFFh. por lo que está implementado mediante dos registros específicos TMR1H y TMR1L. 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. PIC Prof.

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

2. Generación interna (Fosc/4). Nelson Añón 199 PIC . En los PIC16F62X los pines son RB6 y RB7. El oscilador se activa poniendo a 1 el bit T1OSCEN del registro T1CON. El bit TMR1CS del registro T1CON selecciona entre reloj interno ó externo.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. Prof.

En los PIC16F62X el pin es RB6. PIC Prof. Nelson Añón 200 .ORGANIZACIÓN DE LA MEMORIA REGISTRO TMR1: 3. 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: El funcionamiento de TMR1 depende de la programación del registro T1CON (10h). En este caso. Prof. desactivando TMR1 cuando vale 0. éstos proceden de una señal externa. los pulsos se introducirán por el pin RB6. cuando su valor es 1. 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. El bit 0 TMR1ON gobierna su funcionamiento. Si el bit T1OSCEN vale 0. El bit 1 TMR1CS elige la fuente de pulsos. actúan los pines RB6 y RB7 como entradas del reloj externo. Nelson Añón 201 PIC . si el bit 3 T1OSCEN vale 1. Registro 7-1.

PIC Prof. 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 .

Nelson Añón 208 .PIC Prof.

Nelson Añón 209 .PIC Prof.

Nelson Añón 210 .PIC Prof.

PIC Prof. Nelson Añón 211 .

Nelson Añón 212 .PIC Prof.

PIC Prof. Nelson Añón 213 .

Nelson Añón 214 .PIC Prof.

PIC Prof. Nelson Añón 215 .

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

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

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->