Académique Documents
Professionnel Documents
Culture Documents
CURSO DE INSTRUCTORES
TCNICOS INDUSTRIALES
1 /112
MICROCONTROLADORES PIC
CONTENIDO SINTETICO
Arquitectura interna de los PIC. Manejo del ensamblador MPLAB .- Programacin de PIC. Manejo de temporizadores TMR0. Control de interfaces externos por medio de los puertos de entrada y salida Interrupciones, reset y recursos auxiliares. Practica de Laboratorio Practica de Taller - aplicaciones.
TCNICOS INDUSTRIALES
2 /112
MICROCONTROLADORES PIC
LOS MICROCONTROLADORES
INTRODUCCION A LOS MICROCONTROLADORES. Un microcontrolador es un Computador completo, pero de limitadas prestaciones, que est contenido en un solo chip y se destina a gobernar una tarea especfica. Los PIC de la familia 16Fxx son C de 8 bit. Los microcontroladores estn conquistando el mundo. Estn presentes en nuestro trabajo, en nuestra casa y en nuestra vida, en general. Se pueden encontrar controlando el funcionamiento de los ratones y teclados de los computadores, en los telfonos, en los hornos microondas y los televisores de nuestro hogar. Pero la invasin acaba de comenzar y el nacimiento del siglo XXI ser testigo de la conquista masiva de estos diminutos computadores, que gobernarn la mayor parte de los aparatos que fabricaremos y usamos los humanos Arquitectura Harvard La arquitectura tradicional: La arquitectura tradicional de computadoras y microprocesadores se basa en el esquema propuesto por John Von Neumann, en el cual la unidad central de proceso, o CPU, esta conectada a una memoria nica que contiene las instrucciones del programa y los datos (figura 1.1.1). El tamao de la unidad de datos o instrucciones esta fijado por el ancho del bus de la memoria. Es decir que un microprocesador de 8 bits, que tiene adems un bus de 8 bits que lo conecta con la memoria, deber manejar datos e instrucciones de una o ms unidades de 8 bits (bytes) de longitud. Cuando deba acceder a una instruccin o dato de ms de un byte de longitud, deber realizar ms de un acceso a la memoria. Por otro lado este bus nico limita la velocidad de operacin del microprocesador, ya que no se puede buscar de memoria una nueva instruccin, antes de que finalicen las transferencias de datos que pudieran resultar de la instruccin anterior. Es decir que las dos principales limitaciones de esta arquitectura tradicional son : a) que la longitud de las instrucciones esta limitada por la unidad de longitud de los datos, por lo tanto el microprocesador debe hacer varios accesos a memoria para buscar instrucciones complejas, b) que la velocidad de operacin (o ancho de banda de operacin) esta limitada por el efecto de cuello de botella que significa un bus nico para datos e instrucciones que impide superponer ambos tiempos de acceso. La arquitectura von Neumann permite el diseo de programas con cdigo automodificable, prctica bastante usada en las antiguas computadoras que solo tenan acumulador y pocos modos de direccionamiento, pero innecesaria, en las computadoras modernas.
TCNICOS INDUSTRIALES
3 /112
MICROCONTROLADORES PIC
Arquitectura interna
Los microcontroladores PIC utilizan la arquitectura Harvard, la cual separa la memoria de programa de la memoria de datos. Esto hace que el dispositivo tenga un bus de datos y un bus de memoria de programa, hecho que permite acceder a ambos simultneamente. En el caso de la memoria de programa es interna, ya que se encuentra en forma de EPROM o FLASH dentro del propio PIC. Otra caracterstica reseable es que las instrucciones en los PIC son de 14 bits y no de 8, permitiendo instrucciones de palabra nica con operacin y operando en la misma palabra. Esta estructura, acompaada de un pipeline, permite que las instrucciones se ejecuten en un slo ciclo de reloj, salvo en el caso de saltos/rupturas de programa. Lo que se hace internamente es que mientras se ejecuta la instruccin actual se carga la siguiente instruccin en el pipeline, con lo que se alcanza una alta velocidad de ejecucin. En cuanto a los registros los PIC pueden direccionarse tanto directa como indirectamente. Todos los registros de funcin especial, incluyendo el contador de programa, estn accesibles en la memoria de datos y pueden ser operados de cualquier forma y empleando cualquier modo de direccionamiento (ortogonalizacin).Igualmente, todos los elementos del sistema (temporizadores, puertos de e/s, etc) estn implementados como registros.
La arquitectura Harvard y sus ventajas: La arquitectura conocida como Harvard, consiste simplemente en un esquema en el que el CPU esta conectado a dos memorias por intermedio de dos buses separados. Una de las memorias contiene solamente las instrucciones del programa, y es llamada Memoria de Programa. La otra memoria solo almacena los datos y es llamada Memoria de Datos (figura 1.1.2). Ambos buses son totalmente independientes y pueden ser de distintos anchos. Para un procesador de Set de Instrucciones Reducido, o RISC (Reduced Instruccin Set Computer), el set de instrucciones y el bus de la memoria de programa pueden disearse de manera tal que todas las instrucciones tengan una sola posicin de memoria de programa de longitud. Adems, como los buses son independientes, el CPU puede estar accediendo a los datos para completar la ejecucin de una instruccin, y al mismo tiempo estar leyendo la prxima instruccin a ejecutar. Se puede observar claramente que las principales ventajas de esta arquitectura son: a) que el tamao de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que cualquier instruccin ocupe una sola posicin de memoria de programa, logrando as mayor velocidad y menor longitud de programa, b) que el tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando una mayor velocidad de operacin. Una pequea desventaja de los procesadores con arquitectura Harvard, es que deben poseer instrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario incluir en los programas, ya que estas tablas se encontraran fsicamente en la memoria de programa (por ejemplo en la EPROM de un microprocesador).
Arquitectura Harvard
TCNICOS INDUSTRIALES 4 /112
MICROCONTROLADORES PIC
Mapas de memoria Memoria Interna (RAM) El pic16f628a es un microcontrolador de 8 bit, posee una arquitectura RISC avanzada as como un juego reducido de 35 instrucciones. Este microcontrolador es el remplazo del obsoleto pic16f84a, los pines del pic16f628a son compatibles con el pic16f84a, as se podran actualizar proyectos que hemos utilizado con el pic16f84a.
TCNICOS INDUSTRIALES
5 /112
MICROCONTROLADORES PIC
OTRAS CARACTERSTICAS DEL PIC 16F628A CPU De alto rendimiento RISC: velocidades de operacin de DC - 20 MHz Capacidad de interrupcin pila de 8 niveles Modos de direccionamiento directos, indirectos y relativo 35 simples instrucciones de palabra: - Todas las instrucciones de ciclo nico, excepto las de salto Caractersticas Especial microcontrolador: opciones de oscilador externo e interno: - Precisin de fbrica del oscilador interno de 4 MHz calibrada a 1% - oscilador de 48 kHz De bajo consumo interno Modo de ahorro de energa en modo sueo resistencias programable pul-ups del PORTB Multiplexado del pin reset / Entrada-pin Temporizador Watchdog con oscilador independiente para un funcionamiento fiable Baja tensin de programacin In-Circuit Serial (a travs de dos pines) Proteccin de cdigo programable
TCNICOS INDUSTRIALES
6 /112
MICROCONTROLADORES PIC
Brown-out reset Power-on Reset Power-up Timer y el oscilador de puesta en marcha del temporizador Amplio rango de funcionamiento de tensin (2.0-5.5V) Industrial y amplia gama de temperaturas extendidas Alta durabilidad de la memoria Flash /EEPROM: - 100.000 ciclos de escritura Flash - 1.000.000 ciclos de escritura EEPROM - 40 aos de retencin de datos De baja potencia Caractersticas: Corriente en espera: - 100 nA@2.0V, tpico Corriente de funcionamiento: - 12A @ 32 kHz, 2,0 V, tpica - 120A @ 1 MHz, 2,0 V, tpica Temporizador Watchdog actual: - 1A@2.0V, tpico Timer1 oscilador actual: - 1.2A @ 32 kHz, 2,0 V, tpica Doble velocidad del oscilador interno: - Tiempo de ejecucin seleccionable entre 4 MHz y de 48 kHz - 4s despertar de un sueo, 3.0V, tpico En la siguiente figura se muestran los microcontroladores que componen esta serie
TCNICOS INDUSTRIALES
7 /112
MICROCONTROLADORES PIC
Tipos de osciladores El PIC16F627A/628A/648A puede ser operado en ocho diferentes modos de oscilador. RC, Oscilador con resistencia y condensador (2 modos) XT, Cristal de cuarzo. HS, Cristal de alta velocidad LP, Cristal de baja frecuencia y bajo consumo de potencia. INTOSC, oscilador interno de precisin de 4mhz (2 modos) EC, seal externa de entrada de reloj En la siguiente figura el diagrama de bloques del oscilador
En la siguiente tabla se muestra los valores de los cristales y sus respectivos condensadores de filtro para el oscilador externo
Al momento de programar un micro se debe especificar que tipo de oscilador se usa. Internamente la frecuencia del oscilador es dividida por 4, as que si temeos un oscilador de 4 MHz, la frecuencia de trabajo es de 1 MHz, por lo que cada instruccin se ejecuta cada 1 us.
TCNICOS INDUSTRIALES
8 /112
MICROCONTROLADORES PIC
Memoria de Programa
La memoria de programa est organizada en palabras de 14 bits y es del tipo FLASH. Esta memoria es de slo lectura y nicamente se ejecutar el cdigo contenido en ella. El vector de reset se encuentra en la posicin 0000h y el de interrupciones en la 0004h, por lo que la memoria de usuario se extiende desde la direccin 0005h.
TCNICOS INDUSTRIALES
9 /112
MICROCONTROLADORES PIC
REGISTROS DE FUNCIONES ESPECIALES.-CAMINO DE LOS DATOS Y REGISTRO W La figura representa un diagrama simplificado de la arquitectura interna del camino de los datos en el CPU de los microcontroladores PIC. Este diagrama puede no representar con exactitud el circuito interno de estos microcontroladores, pero es exacto y claro desde la ptica del programador. La figura 1.4.1 representa el mismo diagrama para un microprocesador ficticio de arquitectura tradicional. Se puede observar que la principal diferencia entre ambos radica en la ubicacin del registro de trabajo, que para los PICs se denomina W (Working Register), y para los tradicionales es el Acumulador (A).
En los microcontroladores tradicionales todas las operaciones se realizan sobre el acumulador. La salida del acumulador esta conectada a una de las entradas de la Unidad Aritmtica y Lgica (ALU), y por lo tanto ste es siempre uno de los dos operandos de cualquier instruccin. Por convencin, las instrucciones de simple operando (borrar, incrementar, decrementar, complementar), actan sobre el acumulador. La salida de la ALU va solamente a la entrada del acumulador, por lo tanto el resultado de cualquier operacin siempre quedara en este registro. Para operar sobre un dato de memoria, luego realizar la operacin siempre hay que mover el acumulador a la memoria con una instruccin adicional. En los microcontroladores PIC, la salida de la ALU va al registro W y tambin a la memoria de datos, por lo tanto el resultado puede guardarse en cualquiera de los dos destinos. En las instrucciones de doble operando, uno de los dos datos siempre debe estar en el registro W, como ocurra en el modelo tradicional con el acumulador. En las instrucciones de simple operando el dato en este caso se toma de la memoria (tambin por convencin). La gran ventaja de esta arquitectura es que permite un gran ahorro de instrucciones ya que el resultado de cualquier instruccin que opere con la memoria, ya sea de simple o doble operando, puede dejarse en la misma posicin de memoria o en el registro W, segn se seleccione con un bit de la misma instruccin. Las operaciones con constantes provenientes de la memoria de programa (literales) se realizan solo sobre el registro W. En la memoria de datos de los PICs se encuentran ubicados casi todos los registros de control del microprocesador y sus perifricos autocontenidos, y tambin las posiciones de memoria de usos generales. En el caso de los 16C5X, algunos registros especiales de solo escritura (TRIS y OPTION) no estn accesibles dentro del bloque de memoria de datos, sino que solo se pueden cargar desde el registro W por medio de instrucciones especiales.
PIC 16F628A
TCNICOS INDUSTRIALES
10 /112
MICROCONTROLADORES PIC
Descripcin entrada del cristal oscilador / entrada externa de reloj Salida del cristal oscilador. En el modo de oscilacin por cristal se conecta al cristal o resonador. En modo RC OSC2 proporciona CLKOUT (salida de reloj), que posee 1/4 de la frecuencia de OSC1, y representa el ciclo de instruccin. Entrada de reset / entrada de voltaje de programacin. Este pin es un reset activo a nivel lgico bajo del dispositivo. PORTA es un puerto de E/S bidireccional Puede ser seleccionado tambin para ser la entrada de reloj al contador/temporizador TMR0. La salida es de colector abierto. PORTB es un puerto de E/S bidireccional que puede ser programado para levantar internamente todas las entradas. RB0/INT puede ser seleccionado como un pin de interrupcin externa RB4 a RB7 son pines de interrupcin por cambio de estado. RB6 es la entrada de reloj de programacin y RB7 la entrada de programacin serie. Referencia de tierra (masa) para todos los pines lgicos de E/S. Alimentacin positiva para todos los pines lgicos de E/S.
OSC2/CLKOUT S
4 17 18 1 2 3 6 7 8 9 10 11 12 13
MCLR' RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
E/A E/S E/S E/S E/S E/S E/S E/S E/S E/S E/S E/S E/S E/S
ST TTL TTL TTL TTL ST TTL/ST (1) TTL TTL TTL TTL TTL TTL/ST (2) TTL/ST (2)
5 14
Vss Vdd
A A
A=alimentacin
Este buffer es una entrada Schmitt cuando se configura como interrupcin externa Este buffer es una entrada Schmitt cuando se emplea en el modo de programacin serie Este buffer es una entrada Schmitt cuando se configura en el modo de oscilacin RC y como entrada CMOS
TCNICOS INDUSTRIALES
11 /112
MICROCONTROLADORES PIC
TEMPORIZANDO El uso de la temporizacin se usa en casi todas las aplicaciones, semforos, alarmas, acceso con clave, ascensores, comunicacin, etc Recordando nuestro programa de encendido de Led o foquito, mencione que este se apagaba por 2 microsegundos pero que era imposible detectarlo, pues bien en las siguientes sesiones vamos a temporizar para que el tiempo de apagado sea 1 segundo y de esta manera apreciar la temporizacin Al igual que teniamos dos registros TRISA y TRISB que configuraban los pines de los puertos como entradas o salidas. En la temporizacin tenemos el registro OPTION en el banco 1, que me configurar el registro TMR0 del banco 0, ya sea como temporizador o contador
OPTION RPBU#
INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0
Oscilador externo Registro TMR0 Divisor de Fecuencia El oscilador externo creo que ya saben pero hago recordar, es el que me define la velocidad del ciclo de instruccin, y cuando usamos un oscilador de cristal de cuarzo (XT) de 4Mhz, tenemos 1 microsegundo de ciclo de instruccin El registro TMR0 esta implementado fsicamente en el pin RA4 del PORTA, este registro de 8 bits se configura como temporizador para determinar intervalos concretos de tiempo o como contador de impulsos externos . EL divisor de Frecuencia, como su nombre lo dice divide la frecuencia de reloj, que es lo mismo decir que aumenta la duracin de los impulsos de reloj. La combinacin binaria de los bits PS0, PS1 y PS2, del registro OPTION me definen el rango del divisor de frecuencias.
PS2 PS0 000 001 010 011 100 101 110 111
TCNICOS INDUSTRIALES
12 /112
MICROCONTROLADORES PIC
Frmula para calcular el tiempo T = CI x TMR0 x DF CI = Ciclo de instruccin TMR0 = Valor cargado en este registro. DF = Rango escogido en el divisor de frecuencia El valor cargado en el TMR0, es aquel valor que le falta a este registro para que llegue a 255 (valor mximo para un registro de 8 bits) EJEMPLO: Si por software cargo un valor de 125 en el registro TMR0, entonces el valor que interviene en la frmula es 130, valor que falta para que se desborde (llegue a 255) el registro TMR0.
1 = Predivisor asigando a Watchdog (WDT) TOSE Bit de seleccin de flanco activo cuando TMR0 es configurado como Contador 0 = Contaje se incrementa cada flanco ascendente 1 = Contaje se incrementa cada flanco descendente TOCS Bit de selecin de la fuente del clock: 0 = Configura TMR0 como Temporizador 1 = Configura TMR0 como Contador INTEDG Bit de selecin de flanco activo de interrupcin externa: 0 = flanco descendente 1 = flanco ascendente RPBU# Resistencias pull - up de la puerta B: 0 = Activadas 1 = Desactivadas Si ponemos al mximo los valores de la frmula, rango de divisor de 256, TMR0 con 255 y un oscilador de 4 Mhz, obtenemos un valor mximo de temporizacin de 65.28 milisegundos, el cual es un valor evidentemente insuficiente si quiero que mi pulso dure varios segundos o minutos, tiempo necesario para la mayora de aplicaciones, como pueden ser, relojes digitales, semforos, etc. la solucin sencilla es crear un archivo en la RAM y usarlo como archivo auxiliar para lograr la temporizacin deseada. Tenemos dos alternativas para alargar tiempos, crear bucles anidados de retardo, en este caso no se usa el registro TMR0, y la otra alternativa es usando este registro. La ventaja de usar este registro es que se pueden generar condiciones de interrupcin, habilitano el tipo de interrupcin por desbordamiento de registro TMR0. La habilitacin de este tipo de interrupcin, se hace mediante el registro INTCON y sus respectivos bits. Interrupciones Los 16CXX agregan la posibilidad de contar con sistema de interrupciones. Este sistema consiste en un mecanismo por el cual un evento interno o externo, asincrnico respecto del programa, puede interrumpir la ejecucin de ste produciendo automticamente un salto a una
TCNICOS INDUSTRIALES
13 /112
MICROCONTROLADORES PIC
subrutina de atencin, de manera que pueda atender inmediatamente el evento, y retomar luego la ejecucin del programa exactamente en donde estaba al momento de ser interrumpido. Este mecanismo es muy til por ejemplo para el manejo de timers o rutinas que deben repetirse peridicamente (refresh de display, antirebote de teclado, etc.), deteccin de pulsos externos, recepcin de datos, etc. Existen de tres a doce eventos que pueden generar interrupciones en los PIC16FXX existentes hasta el momento, pero nada impide que puedan agregarse ms en versiones futuras. Funcionamiento En los 16FXX las interrupciones se comportan casi exactamente igual que las subrutinas. Desde el punto de vista del control del programa, al producirse una interrupcin se produce el mismo efecto que ocurrira si el programa tuviese un CALL 0004h en el punto en que se produjo la interrupcin. En uno de los registros de control del sistema de interrupciones existe un bit de habilitacin general de interrupciones GIE, que debe ser programado en 1 para que las interrupciones puedan actuar. Al producirse una interrupcin, este bit se borra automticamente para evitar nuevas interrupciones. La instruccin RETFIE que se utiliza al final de la rutina de interrupcin, es idntica a un retorno de subrutina, salvo que adems coloca en uno automticamente el bit GIE volviendo a habilitar las interrupciones. Dentro de la rutina de interrupcin, el programa deber probar el estado de los flags de interrupcin de cada una de las fuentes habilitadas, para detectar cual fue la que causo la interrupcin y as decidir que accin tomar.
MPLAB
El MPLAB, es un entorno integral de desarrollo, provisto por la misma firma Microchip, en el cual se puede desarrollar un proyecto en asembler y su simulacin. Incorporando herramientas de software y/o hardware permite que en el mismo entorno se puedan emular un microcontrolador, programar con lenguaje C y/o grabarlo al PIC con el proyecto que se realiz. EL MPLAB le permite a Usted escribir, depurar y optimizar los programas (firmware) de sus diseos con PIC 16/17. EL MPLAB incluye un editor de texto, un simulador y un organizador de proyectos. Adems, el MPLAB soporta el emulador PICMASTER y a otras herramientas de desarrollo de Microchip como el PICSTART - Plus.
TCNICOS INDUSTRIALES
14 /112
MICROCONTROLADORES PIC
Depurar sus programas fuente. Detectar errores automticamente en sus programas fuente para editarlos. Depurar los programas utilizando puntos de corte (breakpoints) mediante valores de los registros internos. Observar el flujo del programa con el simulador MPLAB -SIM, seguirlo en tiempo real utilizando el emulador PICMASTER. Realizar medidas de tiempo utilizando un cronmetro. Mirar variables en las ventanas de observacin. Encontrar respuestas rpidas a sus preguntas, utilizando la Ayuda en lnea del MPLAB.
LAS HERRAMIENTAS DEL MPLAB El Organizador de Proyectos (Proyect Manager). El organizador de proyectos (Proyect Manager) es parte fundamental de MPLAB. Sin crear un proyecto Usted no puede realizar depuracin simblica. Con el Organizador de Proyectos (Proyect manager) puede utilizar las siguientes operaciones:
Crear un proyecto. Agregar un archivo de programa fuente de proyecto. Ensamblar o compilar programas fuente. Editar programas fuente. Reconstruir todos los archivos fuente, o compilar un solo archivo. Depurar su programa fuente.
Software ensamblador: El software ensamblador que presenta Microchip viene en dos presentaciones, una, para entorno DOS llamado MPASM.EXE y la otra, para entorno Windows llamado MPASMWIN.EXE Las dos presentaciones soportan a TODOS los microcontroladores de la familia PIC de Microchip. El conjunto de instrucciones de los microcontroladores PIC es en esencia la base del lenguaje ensamblador soportado por este software. Directivas de uso frecuente: Son instrucciones para el compilador. #DEFINE ej. #define <nombre> [<valor a remplazar>] explicacin: declara una cadena de texto como substituto de otra
TCNICOS INDUSTRIALES
15 /112
MICROCONTROLADORES PIC
END ej. end explicacin: indica fin de programa EQU ej. status equ 05 explicacin: define una constante de ensamble INCLUDE ej. include <PIC16F84.h> explicacin: incluye en el programa un archivo con cdigo fuente ORG ej. org 0x100 explicacin: ensambla a partir de la direccin especificada
TCNICOS INDUSTRIALES
16 /112
MICROCONTROLADORES PIC
Paso 4 Al presionar el boton OK de la pantalla Project Wizard se accedea al nuevo proyecto, entonces pulsar siguiente
Paso 5 Una vez mas se pulsa en siguiente y aparece un menu de tipos de pic, entonces elegir el pic que se requiera trabajar, en este caso el pic 16f84A. Otra vez sepulsa siguiente Paso 6 Una vez que ingresamos a Step Two, tener en cuenta que Active Toolsuite: debe estar en Microchip MPASM toolsuite, asi mismo Toolsuite Contents.
TCNICOS INDUSTRIALES
17 /112
MICROCONTROLADORES PIC
Paso 7 En el siguiente paso, colocar el nombre de la tarea, en este caso led. Pulsar Browse.
TCNICOS INDUSTRIALES
18 /112
MICROCONTROLADORES PIC
Paso 9 Pulsar siguiente, pulsar otra vez siguiente Seleccionar led.asm y pulsar Add. Una vez mas pulsar siguiente.- Pulsar finalizar
ESTRUCTURA DE UN PROGRAMA TIPICO Antes de intentar programar debes tener claro que todo programa desarrollado en PIC consta bsicamente de esta estructura: Definir el Microcontrolador a usar. En esta directiva se especifica el tipo de microcontrolador que sera utilizado; esto se logra utilizando LIST=PIC16F84.
Establecer las constantes a utilizar. Las constantes son tiles para referenciar direcciones de memoria, posiciones de los bits y valores que no cambiarn a lo largo de todo el programa. Esto se logra utilizando la directiva "EQU". Si se desea por ejemplo establecer un valor a una constante seria CONST EQU 1, lo cual le asigna el valor de "1" al registro CONST.
Reservar los espacios en memoria de las variables. Se utiliza para reservar espacios en memorias para las variables utilizadas en el programa. Se logra utilizando la directiva denominada "RES". Muy til cuando un registro cambia su valor durante la ejecucion del programa.
Configurar los puertos. Es necesario establecer si los Bits de cada puerto sern utilizados como entrada o como salida. Esto se logra utilizando los registros especiales TRISA y TRISB.
Desarrollar el Programa. Es el verdadero corazn del trabajo que se realiza, puesto que ac se desarrollan las rutinas que seran ejecutadas por el microcontrolador.
EL REGISTRO STATUS:
TCNICOS INDUSTRIALES 19 /112
MICROCONTROLADORES PIC
Contiene el estado aritmtico de la ALU, el estado del Reset y los bits para seleccin de banco.
REGISTRO STATUS
RP1
RP0
TO
PD
DC
Reset
Descripcin
Bit 7-6: IRP-RP1 Bit 5: RP0 Bank Select Bit 4: TO Time-Out Bit 3: PD Power Down Bit 2: Z Zero Bit 1: DC Digit Carry Bit 0: C Carry
0 0 1 1 x x x
No implementado: 0 1 0 1 0 1 0 1 0 1 0 1 0 = = = = = = = = = = = = Banco 1 Banco 0 Recin encendido, tras CLRWDT, o SLEEP. Ocurri un time-out en el WDT Luego de un Rset, de una instruccin CLRWDT Tras ejecutar una instruccin SLEEP El resultado de una operacin lgica o aritmtica es 0. El resultado es distinto de 0 Acarreo en la suma y no en la resta (4 bit) Acarreo en la resta y no en la suma (4 bit) Acarreo en la suma y no en la resta (8 bit) Acarreo en la resta y no en la suma (8 bit)
Uno de los registros mas importantes es el registro STATUS, que tiene una longitud de 8 Bits. Cada uno de los ocho Bits esta destinado para una funcin
especifica. Por ahora explicaremos bsicamente solo algunos de los bits pertenecientes al registro STATUS. Si usted observa la siguiente imagen, podr notar claramente que el Bit No. "0" es utilizado para almacenar la informacin del CARRY, el Bit No.1 es utilizado para la bandera de acarreo de dgito "DC", el Bit No. 2 es utilizado para la bandera de estado cero "Z"; estas son las banderas que hemos explicado anteriormente. El Bit No. 7, Bit No. 6, Bit No. 4 y el Bit No. 3 seran explicados posteriormente ya que haremos incapie al Bit No. 5 del registro STATUS denominado RP0. Ya sabemos que dependiendo de alguna operacin como la suma, las banderas "C" , "DC" y "Z" son afectadas automticamente segn sea el caso; pero el Bit numero 5 del registro STATUS lo manipularemos a nuestra voluntad con la finalidad de decirle al microcontrolador si queremos trabajar en el banco numero "0" o en el banco numero "1". La operacin normal del microcontrolador se efecta en el banco "0"; pero cuando nos cambiamos del banco "0" hacia el banco "1" es para efectuar ciertos cambios que definen como estarn configurados los puertos del microcontrolador. En la siguiente imagen se podr observar el registro STATUS y la asignacin que tienen cada uno de sus ocho Bits. Ahora volvemos a retomar la Figura 4-2 del mapa de registro del PIC16F84 y observe que existen algunas diferencias entre el banco "0" y el banco "1"; por ejemplo tenemos el los registros denominados TRISA, TRISB, EECON1, EECON2, OPTION. Por ahora lo que queremos que usted pueda observar estas diferencias entre ambos bancos, entonces si usted necesita accesar al registro TRISA que solamente se encuentra en el banco "1", obligatoriamente tendra que cambiarse del banco 0 al banco 1 por medio de las instrucciones del microcontrolador.
TCNICOS INDUSTRIALES 20 /112
MICROCONTROLADORES PIC
Ahora, usted deber saber que debemos accesar al banco 1 solamente para accesar a los registros que no se encuentran en el banco 0. Una vez accesados esos registros y a su vez modificados, tendremos que regresar inmediatamente al banco 0 para que el microcontrolador siga con su tarea asignada en la memoria del programa.
EDITOR DE TEXTOS: LUGAR DONDE ESCRIBIMOS NUESTROS PROGRAMAS Los programas para el microcontrolador debern escribirse en el editor de textos
del MS-DOS o tambin pueden escribirse en el BLOCK DE NOTAS de Windows indiferentemente. Usted podra localizar este block de notas en INICIO > Accesorios > Block de Notas.
TCNICOS INDUSTRIALES
21 /112
MICROCONTROLADORES PIC
confuciones. Primero, la palabra columna puede ser interpretada como la posicin del caracter; por ejemplo si el cursor de su pantalla se encuentra totalmente a la izquierda, se encuentra en la primera columna del editor de textos. Si usted presiona la barra espaciadora de su teclado, el cursor se desplaza un caracter hacia la derecha y automaticamente se encontrar en la segunda columna. NO SE CONFUNDA, ya que esta columna no ser la Columna de Operacin que se seala en la tabla anterior. Para entenderlo mejor, usted podr definir su primera columna en la posicin del caracter No. 1, la segunda columna podr ser 10 posiciones a la derecha y no presisamente en la posicin de caracter No. 2, la tercera columna podr ser 10 posiciones mas a la derecha y asi sucesivamente. La idea es organizar cuatro columnas independientes con una separacin mnima de un caracter entre una columna y la otra.
MICROCONTROLADORES PIC
operacin. El ensamblador de programa la cual estar encargado de interpretar los comandos escritos en el block de notas, sabra reconocer facilmente la columnas que usted defini.
Debe comenzar exactamente en la columna 1 del editor de textos. La etiqueta no podr tener mas de 31 caracteres. La etiqueta podr estar conformada por caracteres alfa numricos.
OPERACION: En esta columna se escriben cualquiera de las 35 instrucciones del microcontrolador PIC16F84. OPERANDOS: Los operandos son los registros en donde se realizan las operaciones y los registros son los espacios de memoria donde se almacenarn los resultados de las operaciones. Este registro puede ser una memoria de datos o un registro constante que hemos denominado en el CAPITULO II como un literal. COMENTARIOS: En esta columna se escriben los comentarios que explican la idea de lo que esta haciendo el programa; El ensamblador ignora esta linea en el momento de generar los codigos necesarios para el microcontrolador PIC16F84. Tambien se podran agregar comentarios al programa desde la columna No. 1 del editor de textos; pero deberan comenzar con el smbolo " ; "
TCNICOS INDUSTRIALES
23 /112
MICROCONTROLADORES PIC
Puertos de entrada / salida Los microprocesadores PIC16C5X tienen dos o tres puertos de entrada/salida paralelo de usos generales llamados Puerto A, Puerto B y Puerto C. El Puerto A es de cuatro bits y los dems son de 8 bits cada uno. El Puerto C solamente esta disponible en el 16C55 y el 16C57. Circuito equivalente .-El circuito equivalente de un bit cualquiera de un puerto de entrada salida es el siguiente
Circuito equivalente de puerto I/O El latch L1 corresponde a un bit del registro de datos del puerto, mientras que L2 es un bit del registro de control de tristate del mismo. B1 es el buffer tristate de salida que tiene capacidad de entregar 20 mA y drenar 25 mA. B1 es controlado por L2. Si L2 tiene cargado un 1, B1 se encuentra en tri-state, es decir con la salida desconectada (en alta impedancia), y el puerto puede ser usado como entrada. Si L2 tiene cargado un 0, la salida de B1 esta conectada (baja impedancia) y el puerto esta en modo de salida. B2 es el buffer de entrada, es decir el que pone los datos en el bus interno del microcontrolador cuando se lee el registro de datos del puerto. Puede verse que el dato ledo es directamente
TCNICOS INDUSTRIALES
24 /112
MICROCONTROLADORES PIC
Lgica de interrupciones para los controladores PIC16F8X Fuentes La seal que produce la interrupcin es en realidad una sola, que resulta de la combinacin de todas las fuentes posibles y de los bits de habilitacin. Existen dos grupos de fuentes, unas que se habilitan con solo colocar en uno el bit GIE, y otras que adems necesitan que este puesto a uno el bit PEIE. En algunas versiones de los 16CXX solo existe el primer grupo. Adems, cada fuente de interrupciones tiene su respectivo bit de habilitacin individual. Las fuentes de interrupcin varan con cada versin, y pueden ser por ejemplo: Interrupcin externa por pin RB0/INT Desborde del Timer 0 o RTCC Cambio en el estado de los bits 4 a 7 del puerto B Desborde del timer 1 Desborde del timer 2 Interrupcin del capture/compare 1 Interrupcin del capture/compare 2 transmisin o recepcin de un caracter por la interface serie sincrnica transmisin o recepcin de un caracter por la interface serie asincrnica Fin de conversin A/D Lectura/escritura del puerto paralelo de comunicacin con otros microprocesadores Escritura de EEPROM finalizada Programa fuente: El programa fuente esta compuesto por una sucesin de lneas de programa. Cada lnea de programa esta compuesta por 4 campos separados por uno o ms espacios o tabulaciones. Estos campos son: [Etiqueta] Comando [Operando(s)] [;Comentario]
La etiqueta es opcional. El comando puede ser un mnemnico del conjunto de instrucciones. El operando esta asociado al comando, si no hay comando no hay operando, e inclusive algunos comandos no llevan operando. El comentario es opcional para el compilador aunque es buena prctica considerarlo obligatorio para el programador. La etiqueta, es el campo que empieza en la primer posicin de la lnea. No se pueden insertar espacios o tabulaciones antes de la etiqueta sino ser considerado comando. Identifica la lnea de programa haciendo que el compilador le asigne un valor automticamente. Si se trata de una lnea cuyo comando es una instruccin de programa del microcontrolador, se le asigna el valor de la direccin de memoria correspondiente a dicha instruccin (location counter). En otros casos se le asigna un valor de una constante, o la direccin de una variable, o ser el nombre de una macroinstruccin, etc. El comando puede ser un cdigo mnemnico de instruccin del microcontrolador, o una directiva o pseudoinstruccin para el compilador. En el primer caso ser directamente traducido a cdigo de maquina, en el segundo caso ser interpretado por el compilador y realizara alguna accin en tiempo de compilacin como ser asignar un valor a una etiqueta, etc. El campo de parmetros puede contener uno o ms parmetros separados por comas. Los parmetros dependen de la instruccin o directiva. Pueden ser nmeros o literales que representen constantes o direcciones. El campo de comentario debe comenzar con un caracter punto y coma. El compilador ignora todo el texto que contenga la lnea despus de un caracter punto y coma
TCNICOS INDUSTRIALES
25 /112
MICROCONTROLADORES PIC
NOTACIONES
.: NOTACION PARA NUMEROS
Decimal : D'100' .100 Hexadecimal : H'64' 0x64 64 Octal : O'144' Binario : B'01101100' ASCII : A'C' 'C'
w : Registro W, similar al acumulador, es el registro de trabajo. f : Campo de 5 bits (fffff), contiene la direccin del banco de registros, que ocupa el banco 0 del rea de datos. Direcciona uno de esos registros. k : Representa una constante de 8 bits. d : Bit del cdigo OP de la instruccin. Selecciona el destino donde se guarda el resultado de una operacin. Si d=0, el destino es W, y si d=1 el destino es f. b : Determina la posicin de un bit dentro de un registro de 8 bits, (o sea, tomar valores entre 0 y 7)
.: SIMBOLOS
[] : Opciones. () : Contenido. => : Se asigna a ... <> : Campo de bits de un registro. E : Pertenece al conjunto ... Label : Nombre de la etiqueta. TOS : Cima de la pila con 8 niveles en la gama media. PC : Contador de programa que direcciona la memoria de instrucciones
.: FLAGS
Los Flags o banderas son marcadores, representados por bits dentro del registro STATUS, y son:
Z : Flag de cero, se pone a 1 cuando una operacin lgica o aritmtica da 0 (cero)como resultado. En cualquier otro caso se pone a 0. C : Flag de Carry, se pone a 1 cuando la operacin que le afecta sobrepasa el nivel de representacin del procesador, en nuestro caso es de 8 BIT's , de esta manera si sumamos a 0b11111111 un 0b00000011 el resultado sera 0b00000010 y el BIT de Carry pasara a 1. DC : Flag de carry del nibble inferior, este se comporta igual que el BIT de Carry, solo que el lmite de representacin son los 4 bits inferiores, de esta manera si tenemos 0b00001111 y
26 /112
TCNICOS INDUSTRIALES
MICROCONTROLADORES PIC
sumamos 0b00000111, el resultado ser 0b00010110 y el BIT de DC se pone a 1, el BIT de Carry estar a 0 al no superarse los 8 bits y el de Z a 0 al ser el nmero diferente de 0. No te preocupes si te quedan dudas respecto a los FLAGS, stas se aclararn a medida que vayas avanzando en el tutorial. Ahora si, ya podemos empezar con el set de instrucciones.
Por ejemplo: Si el contenido de "W" antes de ejecutar la instruccin tena un valor de 20 y el registro "f" tiene un valor de 5, en el momento que se ejecuta la instruccin el resultado obtenido es 25. Ahora aprovechamos en esta primera instruccin de explicar el significado que tiene la letra "d" en la instruccin (ADDWF f,d). Una vez finalizada la instruccin, el resultado podr ser almacenado directamente en el acumulador "W" o en el registro "f" para ello se utiliza la letra "d" en el cual podr escribirse "0" o "1"; si la letra d=0el resultado de la operacin se ubicar en el registro "W"; por otro lado si d=1 el resultado de la operacin se ubicar en "f". Hagamos un ejemplo sencillo y supongamos que W=4 y f = 3 antes de ejecutar la instruccin: Si escribimos la instruccin de la siguiente manera: ADDWF f,0 significa que el contenido del registro "f=3" se sumar con el contenido del registro "W=4" y el resultado se alojar en el acumulador "W" tomando el valor de "W=7"; el registro "f" mantendr su valor "f=3". Ahora si la instruccin esta escrita as: ADDWF f,1 significa que el contenido del registro "f=3" se sumar con el contenido del registro "W=4" y el resultado se alojar en el registro "f" tomando el valor de "f=7"; el acumulador mantendr su valor "W=4". Esta explicacin de la letra "d" ser valida de igual manera para todas las instrucciones que contengan este parmetro.
TCNICOS INDUSTRIALES
27 /112
MICROCONTROLADORES PIC
Otro punto importante esta referido a la letra "f" la cual puede ser cualquier nombre y no especficamente la letra "f"; por ejemplo ADDWF regist,1 donde regist es un registro de uso general de la memoria RAM. No. Instruccin 2 ANDWF f,d Descripcin Observacin Operacin Esta instruccin realiza una operacin lgica lgica AND "AND" entre el registro"W" y el registro "f".
El microcontrolador PIC16F84 puede realizar una operacin AND entre dos registros.
Para explicar mejor la operacin AND, supongamos que tenemos un bit A y un bit B que deseamos comparar; entonces tenemos las siguientes alternativas combinaciones entre los dos bits: ENTRADA A B 0 0 0 1 1 0 1 1 RESULTADO Y = A.B 0 0 0 1
Se puede observar claramente que solamente para la condicin de que A=1 Y B=1 tendremos 1 en el resultado; de all el nombre de la operacin AND donde dice: "Si A=1 y B=1 entonces la salida ser 1". Esta explicacin es vlida para cada uno de los Bits entre dos registros. Hagamos un ejemplo sencillo y supongamos que W= 00001111 y f = 11110000 antes de ejecutar la instruccin ANDWF f,d: ENTRADA Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 W 0 0 0 0 1 1 1 1 f 1 1 1 1 0 0 0 0 RESULTAD O W.f 0 0 0 0 0 0 0 0
El microcontrolador procede a comparar cada uno de los ocho bits que conforman a W y a f. Esta comparacin es realizada con cada bit perteneciente a su posicin; es decir, el bit No. 7 de"W" con el Bit No. 7 de "f" y as sucesivamente hasta llegar al Bit No 0. Se puede observar que en ninguno de los ocho Bits de los registros "W" y "f" se obtuvo la condicin de "1 Y 1" por lo que todos los bits resultantes fueron cero (0). En nuestro segundo ejemplo tenemos que W = 01110011 y f = 00101001 antes de ejecutar la instruccin ANDWF f,d tenemos: ENTRADA W f
TCNICOS INDUSTRIALES
RESULTADO W.f
28 /112
MICROCONTROLADORES PIC
0 1 1 1 0 0 1 1
0 0 1 0 1 0 0 1
0 0 1 0 0 0 0 1
Al igual que el caso anterior, el microcontrolador compara Bit a Bit el registro "W" y el registro "f" y podemos observar que tan solo el Bit No. 5 y el Bit No. 0 cumplen con la condicin AND; los dems Bits dan como resultado cero. No. Instruccin 3 ANDLW k Descripcin Observacin Operacin lgica AND entre un literal y W
Esta instruccin, al igual que la instruccin explicada anteriormente, ejecuta el mismo procedimiento pero con ciertas diferencias. La instruccin ANDLW k significa que el microcontrolador realiza una operacin lgica AND entre el registro "W" y el contenido del literal "k", donde "k" es un literal que puede contener cualquier valor entre 0 y 255 asignado por el programador. Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya que este es colocado directamente en en registro "W" y no existir la posibilidad de colocarlo en el registro "k". No. Instruccin 3 CLRF f Descripcin Observacin Borra Esta instruccin borra un registro especifico. registro
El microcontrolador puede borrar un registro "f" cargndolo con el valor "00". Supongamos que tenemos un registro denominado regist = 54 antes de ejecutar la instruccin. Despus de ejecutada la instruccin el valor de regist = 00. No. Instruccin 4 CLRW Descripcin Observacin Borra el Esta instruccin borra el registro "W" solamente registro W
Cuando se ejecuta esta instruccin, el microcontrolador borra el registro "W" cargndolo con "00". No. Instruccin 5 COMP f,d Descripcin Observacin Complemen ta el Esta instruccin complementa el registro "f" registro f
Desde el punto de vista de los nmeros binarios, supongamos que tenemos un registro "f" denominado regist = 00111011; cuando es aplicada la instruccin tenemos que los 0 cambian a valores 1 y los valores 1 cambian a 0 obtenindose un registro invertido. El resultado ser 11000100.. No. Instruccin 6 DECF f,d Descripcin Decrementa un registro f Observacin Esta instruccin decrementa en una sola unidad el registro "f".
Esta instruccin le decrementa en una sola unidad el registro "f". Por ejemplo si nuestro registro denominado regist = 5; cuando se aplica la instruccin DECF f,0 el
TCNICOS INDUSTRIALES 29 /112
MICROCONTROLADORES PIC
resultado ser W=4. Por el contrario, si aplicamos la instruccin DECF f,1 el resultado ser regist = 4.
No. Instruccin
Descripcin Observacin Decrementa y Esta instruccin decrementa en una sola unidad 7 DECFSZ f,d si es igual a el registro "f" en la cual si el registro "f" es igual cero salta. a cero entonces salta a una instruccin
Esta instruccin esta estrechamente relacionada con las dos siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo: INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3 DECFSZ f,d IR A OTRA DIRECCIN SUMAR DOS NMEROS
La instruccin DECFSZ f,d funciona de la siguiente manera: Primero decrementa en una sola unidad el registro "f"; de all pueden suceder dos condiciones. Si el resultado es "0" se ejecuta la instruccin numero 3; pero si el resultado es diferente de cero, se ejecuta la instruccin numero 2 No. Instruccin 8 INCF f,d Descripcin Observacin Incrementa el Esta instruccin incrementa en una sola unidad registro "f" en el registro "f". una unidad
Supongamos que el registro " f = 45 "; cuando se le aplica el comando INCF f,0 se incrementa en una unidad el numero 45 y el resultado es colocado en "W = 46 ". Si aplicamos el comando INCF f,1 se incrementa en una unidad el numero 45 y el resultado es colocado en el registro "f = 46"
No. Instruccin 9 INCFSZ f,d Descripcin Observacin incrementa y Esta instruccin incrementa en una sola unidad si es igual a el registro "f" en la cual si el registro "f" es igual cero salta. a cero entonces salta a una instruccin
Esta instruccin esta estrechamente relacionada con las dos siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo: INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3 INCFSZ f,d IR A OTRA DIRECCIN SUMAR DOS NMEROS
La instruccin INCFSZ f,d funciona de la siguiente manera: Primero incrementa en una sola unidad el registro "f"; de all pueden suceder dos condiciones. Si el resultado es "0" se ejecuta la instruccin nmero 3; pero si el resultado es diferente de cero, se ejecuta la instruccin nmero 2 No. Instruccin 10 IORWF f,d Descripcin Observacin Se aplica un Esta instruccin aplica una operacin lgica OR Inclusivo llamada OR INCLUSIVO entre dos registros.
El microcontrolador PIC16F84 puede realizar una operacin OR INCLUSIVO entre dos registros.
TCNICOS INDUSTRIALES
30 /112
MICROCONTROLADORES PIC
Para explicar mejor la operacin OR INCLUSIVO, supongamos que tenemos un bit A y un bit B que deseamos comparar; entonces tenemos las siguientes alternativas combinaciones entre los dos bits:
ENTRADA A B 0 0 0 1 1 0 1 1
RESULTADO Y=A+B 0 1 1 1
Se puede observar claramente si A=1 o B=1 independientemente, el resultado ser 1; lo cual quiere decir que solamente cualquiera de los dos registros podr tener valor 1 para que su resultado sea 1. Hagamos un ejemplo sencillo y supongamos que W= 00001111 y f = 11110000 antes de ejecutar la instruccin IORWF f,d: ENTRADA Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 W 0 0 0 0 1 1 1 1 f 1 1 1 1 0 0 0 0 RESULTAD O W+f 1 1 1 1 1 1 1 1
El microcontrolador procede a comparar cada uno de los ocho bits que conforman a W y a f. Esta comparacin es realizada con cada bit perteneciente a su posicin; es decir, el bit No. 7 de"W" con el Bit No. 7 de "f" y as sucesivamente hasta llegar al Bit No 0. Podemos observar claramente que el resultado en todos los Bits es 1 ya que cualquiera de los dos registros ( W o f ) contiene un 1 en nuestro segundo ejemplo tenemos que W = 01110011 y f = 00101001 antes de ejecutar la instruccin IORWF f,d tenemos:
RESULTADO W.f 0 1 1 1 1 0 1 1
Al igual que el caso anterior, el microcontrolador compara Bit a Bit el registro "W" y el registro "f" y podemos observar que tan solo el Bit No. 7 y el Bit No. 2 no cumplen con la condicin OR; los dems Bits dan como resultado 1.
TCNICOS INDUSTRIALES 31 /112
MICROCONTROLADORES PIC
Esta instruccin, al igual que la instruccin explicada anteriormente, ejecuta el mismo procedimiento pero con ciertas diferencias. La instruccin IORLW k significa que el microcontrolador realiza una operacin lgica OR entre el registro "W" y el contenido del literal "k", donde "k" es un literal que puede contener cualquier valor entre 0 y 255 asignado por el programador. Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya que este es colocado directamente en el registro "W" y no existir la posibilidad de colocarlo en el registro "k". No. Instruccin 11 MOVF f,d Descripcin Observacin Mueve el Esta instruccin mueve el contenido del registro contenido del "f" en el mismo registro "f" o en "W". registro "f"
Esta instruccin tiene la finalidad de mover el contenido del registro "f" en el mismo registro "f" o hacia el registro "W". Por ejemplo si aplicamos el comando MOVF f,0 tan solo mueve el contenido del registro que se encuentra en "f" hacia el acumulador "W"; por otro lado si aplicamos el comando MOVF f,1 se mueve en contenido del registro "f" en el mismo registro "f". En este ltimo punto, usted podra preguntarse para qu se necesita mover el contenido de un registro y volverlo a colocar dentro del mismo registro? La respuesta estriba en que cuando se ejecuta esta instruccin cambia una bandera dentro de la arquitectura del microcontrolador. Estas banderas sern explicadas posteriormente. No. Instruccin 12 NOP Descripcin No opera Observacin Esta instruccin no ejecuta ningn tipo de accin.
La instruccin NOP no ejecuta ninguna tarea especfica, pero consume 4 ciclos de reloj completos. Cierta utilidad que le hemos encontrado a esta instruccin especficamente esta referida a las rutinas de tiempo. Algunas veces hemos creado algunas rutinas de tiempo que requieren exactitud en la temporizacion y en algunos casos cuando estn siendo ejecutadas le suele faltar algunos ciclos de reloj adicionales para que sean exactas; es all en donde debemos agregar algunas instrucciones NOP. No. Instruccin 13 RLF f,d Descripcin Observacin Rotacin a la Esta instruccin rota a la izquierda todos los bits Izquierda de un registro "f".
Esta Instruccin esta muy relacionada con la bandera denominada Carry perteneciente al registro STATUS. La bandera Carry esta afectada directamente por varias instrucciones de las cuales podemos mencionar: Rotacin a la izquierda, Rotacin a la derecha, Suma, Resta, etc. Por ejemplo, supongamos que nuestro registro " f = 00001111 " y que la bandera CARRY tienen un 0; cuando se aplica el comando RLF f,0 todos los nmeros del
TCNICOS INDUSTRIALES 32 /112
MICROCONTROLADORES PIC
registro "f" se desplazan hacia la izquierda. El valor lgico que se encuentra en la bandera CARRY es colocado en el Bit No. 0 y el Bit No. 7 es colocado en la
bandera CARRY. El resultado de nuestro ejemplo sera: f = 00011110. y CARRY seria 0. El orden lgico de los Bits lo tenemos definidos as: BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0 0 0 0 0 1 1 1 1 Aplicamos la Instruccin RLF f,d 0 0 0 1 1 1 1 0 No. Instruccin Descripcin Observacin Rotacin a la Esta instruccin rota a la Derecha todos los bits 14 RRF f,d Derecha de un registro "f". Al igual que la instruccin anterior, esta muy relacionada con la bandera denominada Carry perteneciente al registro STATUS. La bandera Carry esta afectada directamente por varias instrucciones de las cuales podemos mencionar: Rotacin a la izquierda, Rotacin a la derecha, Suma, Resta, etc. Posteriormente explicaremos las banderas. Por ejemplo, supongamos que nuestro registro " f = 00001111 " y que la bandera CARRY tienen un 0; cuando se aplica el comando RRF f,0 todos los nmeros del registro "f" se desplazan hacia la derecha. El valor lgico que se encuentra en la bandera CARRY es colocado en el Bit No. 7 y el Bit No. 0 es colocado en la bandera CARRY. El resultado de nuestro ejemplo sera: f = 00000111. y CARRY seria 1. El orden lgico de los Bits lo tenemos definidos as: BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0 0 0 0 0 1 1 1 1 Aplicamos la Instruccin RLF f,d 0 0 0 0 0 1 1 1 No. Instruccin Descripcin Observacin Resta el contenido del registro "W" del registro 15 SUBWF f,d Resta W de f "f" El microcontrolador PIC16F84 puede restar el contenido del registro "W" del registro "f"; por ejemplo, supongamos que "W = 4 " y Dato1 = 6; cuando se aplica el comando SUBWF Dato1,0 se resta 6-4 y el resultado es almacenado en el acumulador "W". Por otro lado si se aplica el comando SUBWF Dato1,1 se resta 64 y el resultado es colocado en el registro Dato1. No. Instruccin 33 SUBLW k Descripcin Observacin Resta el contenido del registro "W" de un literal Resta W de k "k"
Al igual que la instruccin anterior, este resta el contenido del registro "W" de un literal "k" donde "k" es una palabra cualquiera con un valor entre 0 y 255. El resultado de la operacin es colocado directamente en el registro "W". No. Instruccin 16 SWAPF f,d Descripcin Intercambio de Bits Observacin Se intercambian los 4 bits mas altos con los 4 bits mas bajos
Este comando tan solo intercambia los cuatro bits mas altos con los cuatro bits mas bajos. Supongamos por ejemplo que tenemos el siguiente nmero binario
TCNICOS INDUSTRIALES 33 /112
MICROCONTROLADORES PIC
almacenado en "f = 00001111"; cuando es aplicado el comando SWAPF f,0 el microcontrolador intercambia los bits altos por los bits bajos de la siguiente forma:
11110000; el resultado es colocado en el acumulador "W". Por otro lado cuando es aplicado el comando SWAPF f,1 el microcontrolador intercambia los bits altos por los bits bajos de la siguiente forma: 11110000; el resultado es colocado en el acumulador "f". No. Instruccin 17 XORWF f,d Descripcin Operacin lgica OR exclusivo Observacin Este comando aplica la operacin lgica de OR Exclusivo a dos registros.
El microcontrolador PIC16F84 puede realizar una operacin OR EXCLUSIVO entre dos registros. Para explicar mejor la operacin OR EXCLUSIVO, supongamos que tenemos un bit A y un bit B que deseamos comparar; entonces tenemos las siguientes alternativas combinaciones entre los dos bits: ENTRADA A B 0 0 0 1 1 0 1 1 RESULTADO Y = A xor B 0 1 1 0
Se puede observar claramente si ambos registros son iguales el resultado ser 0; pero si ambos registros son diferentes entonces el resultado ser 1. Hagamos un ejemplo sencillo y supongamos que W= 00001111 y f = 11110000 antes de ejecutar la instruccin XORWF f,d: ENTRADA Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 W 0 0 0 0 1 1 1 1 f 1 1 1 1 0 0 0 0 RESULTAD O W+f 1 1 1 1 1 1 1 1
El microcontrolador procede a comparar cada uno de los ocho bits que conforman a W y a f. Esta comparacin es realizada con cada bit perteneciente a su posicin; es decir, el bit No. 7 de"W" con el Bit No. 7 de "f" y as sucesivamente hasta llegar al Bit No 0. Podemos observar claramente que el resultado en todos los Bits es 1 ya que cualquiera de los dos registros ( W y f ) contienen Bits diferentes.
En nuestro segundo ejemplo tenemos que W = 01110011 y f = 00101001 antes de ejecutar la instruccin XORWF f,d tenemos:
TCNICOS INDUSTRIALES
34 /112
MICROCONTROLADORES PIC
RESULTADO W.f 0 1 1 1 1 0 1 0
Al igual que el caso anterior, el microcontrolador compara Bit a Bit el registro "W" y el registro "f" y podemos observar que tan solo el Bit No. 7, el Bit No. 2 y el Bit 0 cumplen con la condicin OR EXCLUSIVO; los dems Bits dan como resultado 1. No. Instruccin 34 XORLW k Descripcin Observacin Operacin lgica XOR entre el registro W y el literal "k"
Esta instruccin al igual que la instruccin explicada anteriormente ejecuta el mismo procedimiento pero con ciertas diferencias. La instruccin XORLW k significa que el microcontrolador realiza una operacin lgica OR EXCLUSIVO entre el registro "W" y el contenido del literal "k", donde "k" es un literal que puede contener cualquier valor entre 0 y 255 asignado por el programador. Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya que este es colocado directamente en en registro "W" y no existir la posibilidad de colocarlo en el registro "k". No. Instruccin 18 BCF f,b Descripcin Coloca en Cero un determinado Bit Observacin Este comando pone en Cero el Bit "b" del registro "f"
Para este tipo de instrucciones pensamos que el mejor ejemplo que podemos sealar esta basado visualmente en un nmero binario. Cuando se aplica el comando BCF f,b el microcontrolador pone en cero el Bit "b" del registro "f". Para entenderlo mejor observemos el siguiente ejemplo: Supongamos que tenemos un registro de ocho bits llamado Memory = 01010101. Si se aplica el comando BCF Memory,2 quiere decir que al registro Memory en la posicin del Bit No. 2 se le cargara un valor cero. Ejemplo 1 BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0 0 1 0 1 0 1 0 1 Aplicamos la Instruccin BCF Memory,2 0 1 0 1 0 0 0 1
TCNICOS INDUSTRIALES 35 /112
MICROCONTROLADORES PIC
Ejemplo 2 BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0 1 1 1 1 1 1 1 1 Aplicamos la Instruccin BCF Memory,2 1 1 1 1 1 0 1 1 No. Instruccin Descripcin Observacin Coloca en uno Este comando Pone en 1 el Bit "b" del registro 19 BSF f,b determinado "f" Bit Al igual que la instruccin anterior pensamos que el mejor ejemplo que podemos sealar esta basado visualmente en un nmero binario. Cuando se aplica el comando BSF f,b el microcontrolador pone en 1 el Bit "b" del registro "f". Para entenderlo mejor observemos el siguiente ejemplo: Supongamos que tenemos un registro de ocho bits llamado Memory = 01010101. Si se aplica el comando BSF Memory,3 quiere decir que al registro Memory en la posicin del Bit No. 3se le cargara un valor 1. Ejemplo 1 BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0 0 1 0 1 0 1 0 1 Aplicamos la Instruccin BCF Memory,3 0 1 0 1 1 1 0 1 Ejemplo 2 BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0 0 0 0 0 0 0 0 0 Aplicamos la Instruccin BCF Memory,3 0 0 0 0 1 0 0 0
Descripcin Observacin Prueba el Bit Este comando prueba el Bit "b" del registro "f" y b del registro f salta una linea si esta en 0.
Esta instruccin esta estrechamente relacionada con las dos siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo: INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3 BTFSC f,b IR A OTRA DICRECCION SUMAR DOS NUMEROS
Supongamos que tenemos nuestro registro denominado Memory = 01010101; cuando se le aplica el comando BTFSC Memory,2 el microcontrolador prueba el Bit No. 2 del registro Memory para ver si es igual a cero. En esta comprobacin pueden suceder dos cosas: Si el Bit No. 2 es igual a 0 el microcontrolador ejecuta la instruccin nmero 3; pero en el caso de que el Bit No. 2 sea diferente de 0, el microcontrolador ejecuta la instruccin 2.
TCNICOS INDUSTRIALES
36 /112
MICROCONTROLADORES PIC
Descripcin Observacin Prueba el Bit Este comando prueba el Bit "b" del registro "f" y b del registro f salta una linea si esta en 1.
Esta instruccin esta estrechamente relacionada con las dos siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo: INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3 BTFSS f,b IR A OTRA DICRECCION SUMAR DOS NUMEROS
Supongamos que tenemos nuestro registro denominado Memory = 01010101; cuando se le aplica el comando BTFSS Memory,2 el microcontrolador prueba el Bit No. 2 del registro Memory para ver si es igual a 1. En esta comprobacin pueden suceder dos cosas: Si el Bit No. 2 es igual a 1 el microcontrolador ejecuta la Instruccin numero 3; pero en el caso de que el Bit No. 2 sea diferente de 1, el microcontrolador ejecuta la Instruccin 2 No. Instruccin 22 ADDLW k Descripcin Observacin Suma de dos Este comando suma un valor de un literal al nmeros contenido del registro "W"
Este comando es muy sencillo ya que tan solo cuando es aplicado, toma el contenido del registro y se lo suma al registro "W"; por ejemplo: Supongamos que W = 23 y que tenemos un literal k = 23; cuando se aplica el comando, el resultado es la suma del literal mas el contenido del registro "W", el resultado final queda almacenado en el registro "W". No. Instruccin 24 CALL k Descripcin Observacin Llamada de una Subrrutina con el nombre k
Para entender esta instruccin, primera debemos aclarar que es una Subrutina. La subrutina consiste en un grupo de instrucciones que se encuentran aisladas del programa principal y que se ejecutan cuando son llamadas por un nombre asignado por el programador. Las subrrutinas suelen ser pequeos programas, por ejemplo para obtener retardos de tiempo ( Subrrutina de tiempo ); pero principalmente podemos decir tambin que una Subrrutina es un pequeo programa que se utiliza muchas veces en cualquier parte del programa. Las ventajas que ofrecen las subrrutinas estan referida al ahorro considerable de la memoria de programa y su fcil mantenimiento. A la subrrutina se le podr asignar cualquier nombre, y este es el nombre utilizado en la Instruccin CALL como parmetro. La instruccin CALL k esta estrechamente relacionada con la instruccin denominada RETURN y RETLW ( Ver las siguientes dos Instrucciones ). No. Instruccin 31 RETURN Descripcin Observacin Retorno desde una subrrutina
La Instruccin RETURN es un comando que no podr estar separado cuando se crea una subrrutina. El procedimiento es prcticamente mecnico ya que usted deber crear la subrrutina y darle el nombre para poder ser llamada; al final de la subrrutina se debe escribir la instruccin denominada RETURN. Entonces podemos concluir que una subrrutina esta constituida por un conjunto de instrucciones demarcadas por un nombre que se encuentra al inicio y la instruccin RETURN que se encuentra al
final demarcando el final de la subrrutina. Por ejemplo: supongamos que nuestra Subrrutina se llama RUTINA, entonces tenemos:
TCNICOS INDUSTRIALES 37 /112
MICROCONTROLADORES PIC
RUTINA
Especficamente el comando RETURN le dice al microcontrolador que debe continuar ejecutando las instrucciones en el lugar desde donde la subrrutina fue llamada. Esta es la estructura bsica que conforma a una subrrutina. No. Instruccin 30 RETLW k Descripcin Observacin Retorno de subrrutina y carga a "W" con el contenido del literal "k"
El comando RETLW k se comporta igual al comando RETURN con la diferencia de que esta carga un Valor "k" en el registro "W" cuando finaliza la subrrutina. El rango de este valor "k" esta comprendido entre 0 y 255. No. Instruccin 25 CLRWDT Descripcin Observacin Borra el contenido del registro llamado Watchdog Timer.
Esta instruccin borra el contador del WATCHDOG TIMER (perro guardin), en realidad es un contador interno que va desde 0 hasta 255 y que podr ser activado o desactivado en la configuracin del sistema cuando el microcontrolador va a ser grabado. El tiempo de conteo para este contador tambin podr ser prolongado por un preescalador segn las necesidades del usuario. La instruccin CLRWDT borra el contenido del contador del perro guardin. Si usted activa el Watchdog Timer, usted deber asegurarse de ejecutar el comando CLRWDT antes de que el contador finalice el conteo para que el microcontrolador no se reinicialice automticamente. Existen casos en donde los microcontroladores se confunden y queda bloqueado dejando automticamente de hacer la tarea encomendada. Cuando sucede esto no existir el comando CLRWDT y en consecuencia se reinicializara el microcntrolador. Esta instruccin es muy ventajosa cuando se tienen instalados los sistemas en lugares muy remotos y no puede enviarse a una persona para reinicializar el microcontrolador. No. Instruccin 26 GOTO k Descripcin Observacin El contador de programa salta a una direccin con el nombre "k"
Esta es una de las instruccin mas fcil de entender y consiste tan solo en un salto a otra parte del programa. Cuando se ejecuta el comando GOTO k, el microcontrolador salta a la direccin "k", donde "k" es una etiqueta cualquiera; por ejemplo:
SALTO
TCNICOS INDUSTRIALES
MICROCONTROLADORES PIC
en en ejemplo anterior tenemos que primero se ejecuta la instruccin 1, seguidamente la instruccin de GOTO SALTO la cual le dice al microcontrolador que debe continuar en la instruccin 5. No. Instruccin 28 MOVLW k Descripcin Observacin Se carga el registro "W" con el contenido del literal "k"
Esta instruccin le servir para tomar el contenido de un literal y cargarlo en el registro "W"; donde "k" en una palabra cualquiera que tiene asignado un valor entre 0 y 255. No. Instruccin 29 RETFIE Descripcin Observacin Retorno de llamado a interrupcin
Esta Instruccin es parecida a la Instruccin RETURN, pero a diferencia de esta, RETFIE es utilizada para volver de una subrrutina de interrupcin. No. Instruccin 32 SLEEP Descripcin Observacin Entra en modo de reposo.
Esta Instruccin le da la orden al microcontrolador de quedar en modo suspendido, en este modo el PIC no ejecuta ninguna instruccin hasta que sea nuevamente reinicializado (RESET) comenzando nuevamente el programa. En este modo el consumo de energa del PIC es mnimo. Durante este modo el contador del WATCHDOG TIMER sigue trabajando y si este esta activado el PIC se reseteara por este medio.
LAS BANDERAS
Estas banderas se utilizan para dar informacin adicional cuando se realizan operaciones lgicas y aritmticas dentro del microcontrolador. Usted podr tomar decisiones segn el valor de cada una de las banderas. Existen diferentes tipos de banderas en un microcontrolador; entre ellas tenemos: LAS BANDERAS EN LA SUMA: Los registros bsicos del microcontrolador PIC16F628A tienen una longitud de 8 bits expresados en forma binaria, lo cual quiere decir que el nmero mximo expresado en forma decimal ser el 255. En la suma existen tres tipos de banderas que pueden proporcionarnos mayor informacin del resultado. Estas banderas son denominadas CARRY (C), Acarreo de Dgito (DC) y el Estado Cero (Z). Todas estas banderas son activadas segn sea el caso: Por ejemplo, en la suma, la bandera CARRY se coloca en "1" cuando el resultado supera el nmero 255 y permanecer en "0" indicando que no se present ningn sobreflujo; es decir que el resultado de la suma fue menor. Por otro lado, existe otra bandera denominada Acarreo de Dgito "DC" que expresa lo que sucede con los 4 Bits menos significativos; es decir, si los cuatro Bits menos significativos sobrepasa al numero 15 expresado en forma decimal, entonces la bandera DC = 1, en el caso contrario ser "0". Finalmente la bandera de estado "Z" se activa cuando la operacin aritmtica da como resultado un "1"; de lo contrario se coloca en "0". LAS BANDERAS EN LA RESTA:
TCNICOS INDUSTRIALES
39 /112
MICROCONTROLADORES PIC
En la resta de dos nmeros la bandera CARRY "C" se coloca en "1" cuando el resultado de la operacin sea un nmero positivo, o se pone en cero para el caso contrario. Esto tan sencillamente quiere decir por ejemplo que si tenemos A=20 y B=10 donde X=A-B; el resultado ser X=10 ( Nmero Positivo ); para el caso contrario si tenemos A=10 y B=20 donde X=A-B entonces X=-10. obtenindose un resultado negativo. La bandera de acarreo de dgito "DC" se colocar en "1" cuando los cuatro Bits menos significativos del registro "W" sea menor que los cuatros bits menos significativos del registro que se desea restar, en caso contrario se colocar un cero. La bandera de estado "Z" solamente se activar cuando ambas cantidades sean iguales. LAS BANDERAS EN LA ROTACION El microcontrolador PIC16F84 tiene disponibles dos instrucciones de rotacin las cuales rotan los dgitos de un registro a la derecha o a la izquierda, segun se use. Por ejemplo, para la rotacin a la izquierda supongamos que nuestro registro " f = 00001111 " y que la bandera CARRY tiene un 0; cuando se aplica el comando RLF f,0 todos los nmeros del registro "f" se desplazan hacia la izquierda. El valor lgico que se encuentra en la bandera CARRY es colocado en el Bit No. 0 y el Bit No. 7 es colocado en la bandera CARRY. El resultado de nuestro ejemplo seria: f = 00011110. y CARRY seria 0. El orden lgico de los Bits lo tenemos definidos as:
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0 0 0 0 0 1 1 1 1 Aplicamos la Instruccin RLF f,d 0 0 0 1 1 1 1 0 Ahora para la notacin a la derecha, supongamos que nuestro registro " f = 00001111 " y que la bandera CARRY tiene un 0; cuando se aplica el comando RRF f,0 todos los nmeros del registro "f" se desplazan hacia la derecha. El valor lgico que se encuentra en la bandera CARRY es colocado en el Bit No. 7 y el Bit No. 0 es colocado en la bandera CARRY. El resultado de nuestro ejemplo seria: f = 00000111. y CARRY seria 1. El orden lgico de los Bits lo tenemos definidos as: BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 0 0 0 0 1 1 1 Aplicamos la Instruccin RLF f,d 0 0 0 0 0 1 1 BIT No. 0 1 1
W : es el registro de trabajo y almacena datos de forma momentnea f : es la direccin de un registro, si es llamada apunta al contenido de ese registro
40 /112
TCNICOS INDUSTRIALES
MICROCONTROLADORES PIC
OPERACIONES ORIENTADAS A REGISTROS Nemotcnicos ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF Operacin Estados afectados C,DC,Z Z Z Z Z Z Z Z Z C C C,DC,Z Z
f,d Sumar W y f f,d AND entre W y f f Limpiar f Limpiar W f,d Complementar f f,d Decrementar f f,d Decrementar f, saltar si cero f,d Incrementar f f,d Incrementar f, saltar si cero f,d OR entre W y f f,d Mover f f Mover W a F No Operacin f,d Rotar a la izquierda a travs del carry RRF f,d Rotar a la derecha a travs del carry SUBWF f,d Restar W de f SWAPF f,d Intercambiar nibbles de f XORWF f,d OR exclusiva entre W y f
En este otro cuadro, a dems de f aparece b. que vendra a ser uno de los 8 bits del registro f
Estados afectados
f,b
41 /112
MICROCONTROLADORES PIC
Activar bit b de f Probar bit b de f, saltar si cero Probar bit b de f, saltar si uno
Por ltimo, aparece k que viene a ser una constante de 8 bit, es decir que k puede tomar valores entre 0 y 255, stos inclusive, segn la instruccin a utilizar OPERACIONES ORIENTADAS A LITERALES Y DE CONTROL Nemotcnicos ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW Operacin Estados afectados C,DC,Z Z -TO,-TD Z
k Sumar literal k a W k AND entre k y W k Llamar subrutina Limpiar WDT K Salta a direccin k K OR entre k y W K Cargar W con literal k Retornar de interrupcin K Retornar y cargar W con k Retornar de subrutina Ir al modo de bajo consumo K Restarle k a W K OR exclusiva entre k y W
-TO,-TD C,DC,Z Z
Subrutinas y llamados
IMPORTANCIA DE LAS RUTINAS (*) La mayora de los microcontroladores incluyen en su repertorio de instrucciones algunas que permiten saltar a una rutina y, cuando se complementa su ejecucin, retornar al programa principal
TCNICOS INDUSTRIALES 42 /112
MICROCONTROLADORES PIC
El empleo de subrutinas aporta muchas ventajas entre las que se destacan las siguientes: 1. Se pueden escribir como subrutinas secciones de cdigo y ser empleadas en muchos programas ( por ejemplo, la subrutina de exploracin de un teclado ). 2. Dan a los programas un carcter modular, es decir, se pueden codificar diferentes mdulos para usarlos en cualquier programa. 3. Se reduce notablemente el tiempo de programacin, la deteccin de errores, usando repetidamente una subrutina. 4. El cdigo es ms fcil de interpretar, dado que las instrucciones de las subrutinas no aparecen en el programa principal. Solo figuran las llamadas CALLs. LAS INSTRUCCIONES CALL Y RETURN (*) La instruccin CALL ( llamada la subrutina) consigue que la ejecucin del programa contine en la direccin donde se encuentra la subrutina a la que hace referencia. Es similar a GOTO pero coloca en la pila la direccin de la siguiente instruccin que se debe ejecutar despus de la CALL. La subrutina finaliza con la instruccin RETURN (Retorno de la subrutina) que retoma la direccin guardada en le pila y la coloca en el contador del programa PC continuando el flujo de control con la instruccin que sigue a la CALL. En la familia PIC de gama media la pila tiene ocho niveles de memoria del tipo FIFO (primero en entrar, ltimo en salir). Si se produce la llamada a una subrutina durante la ejecucin de otra subrutina, la direccin de retorno de esta segunda es colocada en la cima de la pila sobre la direccin anterior. Esta segunda direccin es la primera en salir de la pila mediante la instruccin RETURN. Con la pila de ocho niveles, una subrutina puede llamar a otra y sta, a su vez, llamar a otra hasta un mximo de ocho. La gama baja slo puede realizar dos llamadas de este tipo al poseer una pila de slo dos niveles. Las subrutinas deben colocarse al comienzo de las pginas debido a que el bit 8 del contador del programa es puesto a 0 por la instruccin CALL (o por cualquier instruccin que modifica el PC). Las subrutinas deben colocarse en la mitad inicial de las pginas (las 256 palabras). * Tomado de: Microcontroladores PIC, la solucin en un chip, Angulo y otros, Seccin 5.1
MICROCONTROLADORES PIC
TRISA TRISB
Por defecto el PIC tendr todos los I/O port's (es decir los puertos RA y RB), colocados como entrada de datos, y si queremos cambiarlos habr que configurarlos. Al configurar los puertos debers tener en cuenta que: Si asignas un CERO (0) a un pin, ste quedar como salida y... Si le asignas un UNO (1), quedar como entrada Esta asignacin se hace en: TRISA para los pines del PUERTO A (5 bits) TRISB para los pines del PUERTO B (8 bits) .: Por Ejemplo: Si TRISA es igual a 11110 todos sus pines sern entradas salvo RA0 que esta como salida Si TRISB es igual a 00000001 todos sus pines sern salidas salvo RB0 que esta como entrada Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISB estn en el BANCO 1 no queda otra, deberemos cambiar de banco. Esto se logra a travs del Registro STATUS STATUS es un Registro de 8 bits u 8 casillas, en el cual la N 5 (RP0) define la posicin del banco en donde nos encontramos Si pones un CERO (0) a RP0 estaremos en el BANCO 0 Si le pones un UNO (1) ya ves, estaremos en el BANCO 1 REGISTRO STATUS 5 4 3 2 RP0 TO PD Z
7 IRP
6 RP1
1 DC
0 C
Listo, ahora ya sabemos como configurar los puertos, pero lo aclararemos con un ejemplo completo. Vamos a escribir un cdigo que configure todos los pines del puerto A como entrada y todos los del puerto B como salida. ;---------------Encabezado------------list radix p=16f84 hex ; usaremos el PIC 16f84 ; y la numeracin hexadecimal
;------------mapa de memoria--------estado trisa trisb equ equ equ 0x03 0x05 0x06 ; Aqu le asignamos nombres a los ; registros indicando la posicin ; en la que se encuentran
TCNICOS INDUSTRIALES
44 /112
MICROCONTROLADORES PIC
;-------Configuracin de puertos------reset org goto org bsf movlw movwf movlw movwf bcf banco0 ;-----------------------------------------end ; se acab ;-----------------------------------------.: Descripcin del cdigo: Todo lo que escribas luego de un ";" (punto y coma) ser ignorado por el ensamblador, estos son los famosos comentarios, y sirve para saber que hace cada lnea de cdigo. Dicho esto no queda ms que describir el cdigo, as que vamos por partes. 0x00 inicio 0x05 estado,5 ; origen del programa, aqu comenzar ; siempre que ocurra un reset ; salto a "inicio" ; origen del cdigo de programa ; pongo rp0 a 1 y paso al
inicio banco1
b'11111' ; cargo W con 11111 trisa ; y paso el valor a trisa b'00000000' ; cargo W con 00000000 trisb ; y paso el valor a trisb estado,5 ; pongo rp0 a 0 y regreso al
Aqu le indicas al ensamblador para que microcontrolador estas codificando (PIC16F84). y cual ser el sistema de numeracin que utilizars (hexadecimal).
Nota que hay tres columnas, en este caso la primera est vaca. Respeta las tabulaciones para no confundir al ensamblador. ;------------mapa de memoria--------estado trisa trisb equ equ equ 0x03 0x05 0x06 ; Aqu le asignamos nombres a los ; registros indicando la posicin ; en la que se encuentran
Recuerdas lo de la memoria de datos...? Bien, al registro STATUS, que est en la posicin 0x03 de la memoria de datos le puse la etiqueta "estado". equ es algo as comoooo...igual . (Es decir, le estoy asignando el nombre estado al registro que est en la posicin 0x03 de la memoria de datos).
TCNICOS INDUSTRIALES
45 /112
MICROCONTROLADORES PIC
Luego hice lo mismo con trisa y trisb. Ahora sigamos... ;-------Configuracin de puertos------reset org goto org bsf movlw movwf movlw movwf bcf banco0 La directiva org indica el sitio de la memoria en donde se escribe una parte del programa. En este caso el contador de programa apuntar a la direccin 0x00 (reset) entonces ejecutar la instruccin que sigue a continuacin, (saltar a la etiqueta inicio) y nuestro cdigo de programa comienza en la direccin de memoria 0x05 (aqu salto por encima de la interrupcin 0x04) BSF (SET FILE REGISTER), es la instruccin que pone un uno en el bit del registro especificado, en este caso pone a uno el bit 5 del registro STATUS (el rp0), para pasar al banco 1. movlw es algo as como... mueve el siguiente literal al Registro W. W es el Registro de Trabajo, y lo usamos para almacenar momentneamente los datos que queremos mover. una vez hecho esto pasamos el dato a trisa, o a trisb, segn el caso. movwf es algo as como... mueve el contenido del registro W al registro f, en este caso f sera trisa o trisb. BCF (BIT CLEAR FILE REGISTER), sta instruccin limpia el bit del registro especificado, o lo pone a cero, en este caso pone a cero el bit 5 del registro STATUS para regresar al banco 0. ;-----------------------------------------end ; se acab 0x00 inicio 0x05 estado,5 ; origen del programa, aqu comenzar ; siempre que ocurra un reset ; salto a "inicio" ; origen del cdigo de programa ; pongo rp0 a 1 y paso al
inicio banco1
b'11111' ; cargo W con 11111 trisa ; y paso el valor a trisa b'00000000' ; cargo W con 00000000 trisb ; y paso el valor a trisb estado,5 ; pongo rp0 a 0 y regreso al
TCNICOS INDUSTRIALES
46 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 1
ENCENDIDO DE UN LED
;*************************************************************************** ; Febrero 01, 2012 ; nombre: led2.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito de encendido de un led en RB0, del puerto B ; Microcontrolador : PIC16F628A TCNICOS INDUSTRIALES 47 /112
LIST
"P16F628A.INC" 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO1 BSF PORTB,0 ; PRENDE RB0 GOTO INICIO1 ; IR A INICIO1 END ; FIN DEL PROGRAM
TCNICOS INDUSTRIALES
48 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 2
TCNICOS INDUSTRIALES
49 /112
MICROCONTROLADORES PIC
LEER EL ESTADO DE 6 INTERRUPTORES/PULSADORES DEL ENTRENADOR CONECTADOS A RA5-RA0 Y REFLEJAR EL NIVEL LGICO DE LOS MISMOS SOBRE LOS LEDS CONECTADOS A RB5-RB0
;*************************************************************************** ; Febrero 01, 2012 ; nombre: led2.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito puerto B, reflejo de puerto A ; Microcontrolador : PIC16F628A ;---------------------------------------------------
List p=16F628A ;Tipo de procesador include"P16F628A.INC" ;Definiciones de registros internos ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0x00 goto Inicio ;Vector de reset org 0x05 Inicio movlw movlw clrf bsf clrf movlw movwf bcf movf Movwf goto end 0x07 CMCON PORTB ;Borra los latch de salida STATUS,RP0 ;Selecciona banco 1 TRISB ;Puerta B se configura como salida b'00111111' TRISA ;Puerta A se configura como entrada STATUS,RP0 ;Selecciona banco 0 PORTA,W PORTB INICIO1 ;Leer las entradas RA0-RA5 ;Reflejar en las salidas ;Bucle sin fin ;Fin del programa fuente
INICIO1
PRACTICA DE LABORATORIO N 3
TCNICOS INDUSTRIALES 50 /112
MICROCONTROLADORES PIC
LIST
"P16F628A.INC" 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO1 BTFSSPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO APAGA ; SI EST EN 0 PASA A LA SIGUIENTE INSTRUCCIN GOTO PRENDE ; SI EST EN 1 SALTA UNA INSTRUCCIN PRENDE BSF PORTB,0 ; PRENDE RB0 GOTO INICIO1 ; IR A INICIO1 APAGA BCF PORTB,0 ; APAGA RB0 GOTO INICIO1 ; IR A INICIO1 END ; FIN DEL PROGRAM A
DIAGRAMA PARA LA CONEXIN DE UN PIC 16F628A DE ENCENDIDO DE UN LED, CON INTERRUTOR EN EL PUERTO A, (RA0, COMO ENTRADA).
TCNICOS INDUSTRIALES 51 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 4
TCNICOS INDUSTRIALES
52 /112
MICROCONTROLADORES PIC
LIST
"P16F628A.INC" 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO1 BTFSSPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO INICIO1 ; IR A INICIO1 INICIO2 BTFSCPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO INICIO2 ; IR A INICIO2 PRENDE BSF PORTB,0 ; PRENDE RB0 GOTO PRENDE ; IR A PRENDE END ; FIN DEL PROGRAMA
DIAGRAMA PARA LA CONEXIN DE UN PIC 16F628A DE ENCENDIDO DE UN LED, CON PULSADOR PARA EL ENCENDIDO Y RESET PARA EL APAGADO
TCNICOS INDUSTRIALES
53 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 5
TCNICOS INDUSTRIALES
54 /112
MICROCONTROLADORES PIC
ENCENDIDO DE UN LED CON PULSADOR RA0, PARA EL ENCENDIDO Y RA1 PARA EL APAGADO
;*************************************************************************** ; Febrero 01, 2012 ; nombre: led2.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito con pulsador de marcha y parada, como entrada, y un led de salida ; Microcontrolador : PIC16F628A ;---------------------------------------------------
LIST
"P16F628A.INC" 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA (PULSADOR MARCHA) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PULSAMARCHA BTFSSPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO PULSAMARCHA ; IR A PULSAMARCHA CALL Retardo_20ms ; IR A RETARDO DE 20 ms. PULSAMARCHA1 BTFSCPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO PULSAMARCHA1 ; IR A PULSAMARCHA1 CALL Retardo_20ms ; IR A RETARDO DE 20 ms GOTO PRENDE ; IR A PRENDE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; PULSADOR APAGA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PULSASTOP BTFSSPORTA,1 ; PREGUNTA COMO ESTA EL RA1 GOTO PULSASTOP ; IR A PULSASTOP CALL Retardo_20ms ; IR A RETARDO DE 20 ms
TCNICOS INDUSTRIALES 55 /112
MICROCONTROLADORES PIC
PULSASTOP1
BTFSCPORTA,1 ; PREGUNTA COMO ESTA EL RA1 GOTO PULSASTOP1 ; IR A PULSASTOP1 GOTO Retardo_20ms ; IR A RETARDO DE 20 ms GOTO APAGA ; IR A APAGA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRENDE BSF PORTB, ; PRENDE RB0 GOTO PULSASTOP ; IR A PULSASTOP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; APAGA BCF PORTB,0 ; APAGA RB0 GOTO PULSAMARCHA ; IR A PULSAMARCHA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INCLUDE <RETARDOS.INC> END ; FIN DEL PROGRAMA DIAGRAMA PARA LA CONEXIN DE UN PIC 16F628A DE ENCENDIDO DE UN LED, CON PULSADOR RA0, PARA EL ENCENDIDO Y RA1 PARA EL APAGADO
PRACTICA DE LABORATORIO N 6
SUMA DE UN LITERAL Y EL PUERTO A. EL RESULTADO SE VISUALIZA EN EL PUERTO B
TCNICOS INDUSTRIALES 56 /112
MICROCONTROLADORES PIC ;*************************************************************************** ; Febrero 01, 2012 ; nombre: led2.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito de suma ; Microcontrolador : PIC16F628A ;---------------------------------------------------
LIST
"P16F628A.INC" 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1 MOVLW 0X02 ADDWF PORTA,W MOVWF PORTB GOTO INICIO1 END
TCNICOS INDUSTRIALES
57 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 7
TCNICOS INDUSTRIALES 58 /112
MICROCONTROLADORES PIC
LIST
"P16F628A.INC" 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1 MOVLW 0X02 SUBWF PORTA,W MOVWF PORTB GOTO INICIO1 END
TCNICOS INDUSTRIALES
59 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 8
TCNICOS INDUSTRIALES 60 /112
MICROCONTROLADORES PIC LEDS SECUENCIALES, CON LA INSTRUCCIN RLF ;*************************************************************************** ; Febrero 01, 2012 ; nombre: led8.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito utilizando la instruccin rlf, rotar a la izquierda ; Microcontrolador : PIC16F628A ;--------------------------------------------------LIST P=P16F628A INCLUDE "P16F628A.INC" CBLOCK ROTAR ENDC ORG 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO1 MOVLW 0X01 ; CARGA W CON 00000001 MOVWF ROTAR ; LO PASA AL REGISTRO ROTA ROTANDO MOVF ROTAR,0 ; PASA EL CONTENIDO DE ROTAR A W MOVWF PORTB ; Y DE ALLI AL PUERTO B CALL Retardo_20ms CLRF PORTB CALL Retardo_20ms RLF ROTAR,1 ; DESPLAZA UN BIT AL CONTENIDO ; DE ROTAR Y LO GUARDA GOTO ROTANDO INCLUDE <RETARDOS.INC> END
TCNICOS INDUSTRIALES
61 /112
TCNICOS INDUSTRIALES
62 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 9
;CONTADOR CON XOR ;*************************************************************************** ; Febrero 01, 2012 ; nombre: led8.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito utilizando la instruccin rlf, rotar a la izquierda ; Microcontrolador : PIC16F628A ;--------------------------------------------------LIST P=P16F628A INCLUDE "P16F628A.INC" CBLOCK CONT ENDC ORG 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;, ;;;;;;;;;;;;;;;;;;;;;;;; inicio1 bsf PORTB,0 ;PRENDE RB0 DEL PUERTOB CALL Retardo_200ms CALL Retardo_200ms MOVF CONT,0 XORLW B'00111' ;verifica si el contador llego a 19 BTFSC STATUS,2 ;si no es asi salta una linea goto inicio2 ;Si llego a 9 lo atiende en manual INCF CONT,1 ;incrementa el contador MOVF CONT,0 ;pasa el contador a W clrf PORTB CALL Retardo_200ms goto inicio1 inicio2 CLRF CONT ;pone el contador a 0 clrf PORTB goto inicio2 INCLUDE <RETARDOS.INC> end
TCNICOS INDUSTRIALES
63 /112
PRACTICA DE LABORATORIO N 10
;CIRCUITO DESTELLANTE DE UNA LAMPARA LED CON TEMPORIZADOR ;*************************************************************************** ; Febrero 01, 2012 ; nombre: led2.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito un led destellante con temporizador de 2 s ; Microcontrolador : PIC16F628A ;--------------------------------------------------LIST P=P16F628A INCLUDE "P16F628A.INC" TICKS EQU D'78' CBLOCK TIEMPO ENDC ORG 0X20 0X00 ; Origen del programa, aqu comenzar ; siempre que ocurra un reset
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS TCNICOS INDUSTRIALES 64 /112
MICROCONTROLADORES PIC MOVWF TRISA CLRF TRISB ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE TIMER MOVLW b'01010111' ;SEGUN LOS BITS DEL REGISTRO OPTIO MOVWF OPTION_REG BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO1 BSF PORTB,0 CALL PAUSA BCF PORTB,0 CALL PAUSA GOTO INICIO1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CICLO DE TEMPORIZACION PAUSA OTR_TIC SIGUE MOVLW MOVWF MOVLW MOVWF BTFSS GOTO BCF DECFSZ GOTO RETURN END TICKS TIEMPO D'156' TMR0 INTCON,2 SIGUE INTCON,2 TIEMPO,1 OTR_TIC ;TIEMPO_ESPERA = TICKS * OTR_TIC ;GUARDA VALOR EN MEMORIA ;OTR_TIC=256- 156=100 ;OTR_TIC = 0.05632seg ; T= 4 * 0.25us * 100 * 256=0.0256seg ;DESBORDAMIENTO?=256 ;INTCON,2=TOIF , SEGUN REGISTRO INTCON
TCNICOS INDUSTRIALES
65 /112
MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 11
;PROGRAMA DE ARRANQUE EN ESTRELLA TRINGULO DE UN MOTOR ASNCRONO TRIFSICO ;*************************************************************************** ; Febrero 01, 2012 ; nombre: led2.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito de arranque en estrella tringulo de motor asncrono trifsico ; Microcontrolador : PIC16F628A ;---------------------------------------------------
LIST
"P16F628A.INC" 0X20
0X00
goto INICIO ORG 0X04 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CONFIGURACION DE PUERTO A COMO DIGITALES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO MOVLW 0x07 MOVWF CMCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CONFIGURACION DE PUERTOS, COMO I/O ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1 BCF STATUS,6 MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS MOVWF TRISA CLRF TRISB BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0 BCF STATUS,6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLRF PORTB ; LIMPIA PUERTO B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA (PULSADOR MARCHA) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PULSAMARCHA BTFSSPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO PULSAMARCHA ; IR A PULSAMARCHA CALL Retardo_20ms ; IR A RETARDO DE 20 ms. PULSAMARCHA1 BTFSCPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO PULSAMARCHA1 ; IR A PULSAMARCHA1 CALL Retardo_20ms ; IR A RETARDO DE 20 ms GOTO PRENDE ; IR A PRENDE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; PULSADOR APAGA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PULSASTOP BTFSSPORTA,1 ; PREGUNTA COMO ESTA EL RA1
TCNICOS INDUSTRIALES 66 /112
MICROCONTROLADORES PIC
GOTO PULSASTOP ; IR A CALL Retardo_20ms PULSASTOP1 BTFSCPORTA,1 GOTO PULSASTOP1 GOTO Retardo_20ms GOTO APAGA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRENDE BSF PORTB,0
BSF CALL BCF CALL BSF PORTB,1 Retardo_5s PORTB,0 Retardo_500ms PORTB,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GOTO PULSASTOP ; IR A PULSASTOP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; APAGA CLRF PORTB GOTO PULSAMARCHA
INCLUDE <lcd_4bit.INC> INCLUDE <RETARDOS.INC> INCLUDE <LCD_MENS.INC> END
PRACTICA DE LABORATORIO N 11
;PROGRAMA DE ARRANQUE EN ESTRELLA TRINGULO DE UN MOTOR ASNCRONO TRIFSICO ;*************************************************************************** TCNICOS INDUSTRIALES 67 /112
MICROCONTROLADORES PIC ; Febrero 01, 2012 ; nombre: led2.asm) ; Programa producido por: SENATI ZONAL LA LIBERTAD ; Circuito de arranque en estrella tringulo de motor asncrono trifsico ; Microcontrolador : PIC16F628A ;---------------------------------------------------
LIST
Mensajes addwf Mensaje1 DT " MOTOR APAGADO",0X00 Mensaje2 DT "MOTOR ENCENDIDO", 0X00 Mensaje3 DT "START ESTRELLA ", 0x00 Mensaje4 DT "START TRIANGULO ", 0x00
CMCON
BSF STATUS,5 MOVLW B'00010100' MOVWF TRISA CLRF TRISB BCF STATUS,5 CLRF PORTB CLRF PORTA CALL LCD_Inicializa CALL LCD_Linea1 MOVLW Mensaje1 CALL LCD_Mensaje
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; INICIO DEL PROGRAMA (PULSADOR MARCHA) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PULSAMARCHA BTFSSPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO PULSAMARCHA ; IR A PULSAMARCHA CALL Retardo_20ms ; IR A RETARDO DE 20 ms. PULSAMARCHA1 BTFSCPORTA,0 ; PREGUNTA COMO ESTA EL RA0 GOTO PULSAMARCHA1 ; IR A PULSAMARCHA1 CALL Retardo_20ms ; IR A RETARDO DE 20 ms GOTO PRENDE ; IR A PRENDE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TCNICOS INDUSTRIALES 68 /112
MICROCONTROLADORES PIC
; PULSADOR APAGA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PULSASTOP BTFSSPORTA,1 ; PREGUNTA COMO ESTA EL RA1 GOTO PULSASTOP ; IR A PULSASTOP CALL Retardo_20ms ; IR A RETARDO DE 20 ms PULSASTOP1 BTFSCPORTA,1 ; PREGUNTA COMO ESTA EL RA1 GOTO PULSASTOP1 ; IR A PULSASTOP1 GOTO Retardo_20ms ; IR A RETARDO DE 20 ms GOTO APAGA ; IR A APAGA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRENDE BSF PORTB,0
BSF PORTB,1 CALL LCD_Linea1 MOVLW Mensaje2 CALL LCD_Mensaje CALL LCD_Linea2 MOVLW Mensaje3 CALL LCD_Mensaje CALL Retardo_5s
PORTB, ; PRENDE RB0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GOTO PULSASTOP ; IR A PULSASTOP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; APAGA CLRF PORTB GOTO PULSAMARCHA
INCLUDE <lcd_4bit.INC> INCLUDE <RETARDOS.INC> INCLUDE <LCD_MENS.INC> END
BCF PORTB,0 CALL Retardo_500ms BSF PORTB,2 CALL LCD_Linea1 MOVLW Mensaje2 CALL LCD_Mensaje CALL LCD_Linea2 MOVLW Mensaje4 CALL LCD_Mensaje
TCNICOS INDUSTRIALES
69 /112
MICROCONTROLADORES PIC
TCNICOS INDUSTRIALES
70 /112