DL 3155M24 SPA

138
Always leading the pack Laboratorio Time SISTEMAS PROGRAMABLE DL 3155M24

Transcript of DL 3155M24 SPA

Page 1: DL 3155M24 SPA

Always leading the pack

Laboratorio Time

SISTEMAS PROGRAMABLE

DL 3155M24

Page 2: DL 3155M24 SPA

Página blanca

Page 3: DL 3155M24 SPA

DL 3155M24 : Sistemas programables

Questo Training Software affronta lo studio dei sistemi programmabili (microcontrollore):

GUIDA TEORICALezioni:

Introducción a los microcontroladores

Arquitectura hardware de el microcontrolador PIC

Programación

Alrededores y tecnicas de entrevista, interrupt

GUIDA PRATICAUnità:

Programación de el PIC

Puertas I/O, Routine de retraso, EEPROM

Teclado de matriz 4x4

Display

Mini PLC (2 input - 4 output)

Page 4: DL 3155M24 SPA

Página blanca

Page 5: DL 3155M24 SPA

Lección N.1: Introducción a los microcontroladores

Objectivos: Saber:

Que cosa son los microcontroladores

Saber hacer:

Realizar un simple esquema de bloques de un microcontrolador

Requisitos: Nociòn de electronica digital

Contenidos: Microcontroladores y microprocesadores

Los microcontroladores PIC

Page 6: DL 3155M24 SPA

Página blanca

Page 7: DL 3155M24 SPA

1.1 Microprocesadores y microcontroladores

El microprocesador es una pequeña y economica unidad central de elaboraciòn (CPU, Central ProcessingUnit) para las computadoras con tamaño modesto, que puede ser utilizada tambièn como un circuitoindependiente en una gran serie de aplicaciones. Se encuentra realizado sobre una singular lastra de silicio, llamada chip, casi siempre no mide màs de 0,5 cmpor lado y no supera o,5 mm de ancho. Aunque el tamaño no sea grande, un microprocesador puede ser programado para desarrollar un grandenùmero de funciones para administrar las informaciones. Puede funcionar como elaborador para usos generales en diferentes aplicaciones, desde la didàctica a laelaboraciòn de textos, desde el control de màquinas utensilios o para procesos industriales, a el control depersonas enfermas en los hospitales, o ademàs en las calculadoras de bolsillo. La venida de elmicroprocesador ha sido posible considerando como en el tiempo se hayan logrado producir circuitos cadavez màs pequeños (miniaturas) y por los progresos alcanzados en la tecnologia de los semiconductores.

Un microprocesador puede desarrollar el solo un amplia serie o gama de funciones, ya que puede reunirmuchos componentes de un solo chip. Un microprocesador integrado contiene tipicamente una memoria conuna sola lèctura (ROM), es decir una memoria cuyo contenido puede ser leido màs veces, pero no puede sercambiado, y puede disponer de una extenciòn de memoria para acceso casual (RAM) para contener datosprovisorios. Estan presente tambièn algunos registros para contener las instrucciones que hay que seguir,para los datos, y una unidad aritmètico - logica. El conjunto dispone tambièn de una cara interna para conectarse, si es necesario, con memorias externas ycon otros sistemas.

Fig. 1.1

Los microprocesadores estàn clasificados segùn el nùmero de los bit de informaciones que pueden sertransferidos "en paralelo" (es decir al mismo tiempo) y conservados en los registros internos. Este nùmero ha crecido constantemente con el desarrollo de la tècnologia de los circuitos, y actualmente soncomunes microprocesadores con 8, 16 y 32 bit, y han sido tambièn desarrollados integradores con 64 bit.

Page 8: DL 3155M24 SPA

Las memorias con alta densidad para las computadoras, aunque no sean microprocesadores, estan realizadascon la misma tecnologia. En la mitad de los años ochenta, la densidad de memoria normalmente alcanzada era de màs o menos 64.000bit (64 K) para cada uno de los integradores, pero ya se habia logrado alcanzar memorias de 256 K y seestudiaban unidad con un millòn de bit. Otros progresos seran determinados por lo limites minimos, teoricos y pràcticos, de el tamaño de lostransistores.

Uno de los primeros microprocesadores disponibles para las computadoras fue el Intel 8080, que influenciola arquitectura de el Z80, muy popular en su tiempo y, menos directamente, la siguiente linea de losmicroprocesadores 80 x 86 (80286, 80386, 80486 y 80586 o Pentium) actualmente presente en muchascomputadoras). La serie 68000, de la Motorola, encontro un grande uso en la gama de las computadoras Macintosh. En losaños noventa, han sido desarrollados nuevos microprocesadores para aprovechar el èxito de las arquiteturasReduced Instruction Set Computing (RISC), que han aumentado la velocidad de el procesador disminuyendola variedad y la complejidad de los comandos reconocidos. La Advanced Risc Machine (ARM), desarrollada por la casa Ingles Acorn, fue el primer microprocesadorRISC utilizado en una computadora para uso personal o mejor dicho para uso domestico.

Los microcontroladores se parecen a los microsprocesadores, hasta el punto que algunos se ha originadodirectamente de estos ultimos. La diferencia mayor es el hecho que los microcontroladores, ademàs de tenerun nucleo que opera para seguir las instrucciones de un cierto programa, integran en el mismo chip tambiènuna memoria EPROM o EEPROM, en la que el programa se pone en memoria, una memoria RAM para lostemporaneos, ademàs de todos los dispositivos en la cara interna necesarios para comunicar con el mundoexterno.

Ademàs de todo esto, la familia de los microcontroladores màs desarrollados, integran tambièn una serie defunciones de accesorios, como el timer, los cambiadores analogicos/digitales, dispositivos para lacomunicaciòn serial etc. En otras palabras, mientras un microprocesador tiene siempre la necesidad de unaserie de circuitos integrados externos para poder funcionar y conectarse con otros dispositivos, losmicrocontroladores son dispositivos que no necesitan nada. No hay entonces que sosprenderse si muchosproyectos basados sobre los microcontroladores estàn constituidos o formados por el micro mismo.

Page 9: DL 3155M24 SPA

1.2 Microcontroladores PIC

Los PiC son circuitos integrados producidos por la Microchip Technology Inc., que apartienen a la categoriade los microcontroladores, es decir aquellos componentes que integran en un unico dispositivo todos loscircuitos necesarios para realizar un completo sistema digital programable. Como se puede observar en la Figura 24.1.2:

Fig. 1.2

Los PIC (en este caso un PIC6F84) se presentan externamente como normales circuitos integrados TTL oCMOS, pero en el interior disponen de todos los dispositivos tipicos de un sistema con microprocesador, esdecir:

Una CPU (Central Processor Unit es decir unidad central de elaboraciòn) cuyo objetivo o intenciòn esaquella de interpretar la instrucciones de el programa.

Una memoria PROM (Programmable Read Only Memory o tambièn memoria programable con sololèctura) donde se encuentran en memoria de manera permanente las instrucciones de el programa quehay que realizar.Una memoria RAM (Random Access Memory es decir memoria para acceso casual) utilizada paragrabar las variables utilizadas por el programa.Una serie de lineas de I/O para pilotar dispositivos externos o recibir impulsos desde sensores,pulsadores, etc.Una serie de dispositivos auxiliares a el funcionamiento cuales generador de clock, bus, contadores, etc.

Page 10: DL 3155M24 SPA

Fig. 1.3

La presencia de todos estos dispositivos en un espacio muy pequeño, permite a quien proyecta de aprovecharlas ventajas dadas por utilizar un sistema con microprocesadores, tambièn en aquellos circuitos que hastahace poco tiempo estaban destinados a ser realizados con circuitos tradicionales.

Los PIC estan disponibles en una amplia gama o serie de modelos para adaptarse mejor a las exigencias delos proyectos especificos, la diferencia està en los nùmeros de las lineas de I/O y en la dotaciòn de losdispositivos. Se comienza con los modelos mas pequeños identificados con la sigla PIC12Cxx con solo 8pin, hasta llegar a los modelos màs grandes con la sigla PIC17xx con 40 pin.

Para nuestro objetivo hemos elegido un modelo intermedio de PIC el PIC16F84. El mismo contiene 18 Pin de los cuales 13 estàn disponibles para el I/O es decir para las conexiones con elresto de nuestro circuito y de algunas caracteristicas que lo vuelven muy adapto para la exigencias denuestro curso. En particular El PIC16F84 dispones de una memoria para contener el programa de el tipo EEPROM es decirElectrical Erasable Programmable Read Only Memory, que se puede escribir todas las veces que se quiera ypor lo tanto es ideal para nuestras ejercitaciones y conexiones para la programaciòn on - board, es decir paraponer al dia el programa interno a el chip sin tener que quitar el chip mismo de el circuito de prueba. Estacaràcteristica està aprovechada por el programador DL3155M24.

Veamos ahora la reproducciòn de el PIC16F84, representada en la siguiente figura:

Page 11: DL 3155M24 SPA

Fig. 1.4

Como es posible observar el PIC16F84 contiene un total de 18 pin colocados en dos filas paralelas con 9 pincada una. Los Pin 1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 17 y 18 representan las lineas I/O disponibles para nuestrasaplicaciones, los pin 5 y 14 las alimentaciones y al final los pin 4, 15, 16 estan reservados para elfuncionamiento de el PIC (MCLR para el reset y OSC1, OSC2 para el clock). En las pròximas clases se exàminaran màs detalladamente el funcionamiento de los mismos y losutilizaremos de manera pràctica.

Page 12: DL 3155M24 SPA

Página blanca

Page 13: DL 3155M24 SPA

Lección N.2: Arquitectura hardware de el microcontrolador PIC

Objectivos: Saber:

Donde se memoriza el programa

Donde se memorizan los datos

Que cosa es: Una ALU, un Acumulador, un Program Counter, un Stack, un Registre File.

Saber hacer:

Realizar un esquema en bloques de los dispositivos contenidos en el PIN ydescribir como es la interacciòn entre ellos.

Requisitos: Nociones de electronica digital

Contenidos: Area de programa y el Register File

La ALU y el registro W

El Programa Counter y el Stack

Page 14: DL 3155M24 SPA

Página blanca

Page 15: DL 3155M24 SPA

2.1 Area de programa y register file

Comenzamos observando como està hecho un PIC, cuales dispositivos contiene y como es la interacciònentre ellos. En la figura 24.2.1 està representado un esquema en bloques en forma simple de la arquitectura interna de elPIC16F84.

Fig. 2.1

Comenzamos con la memoria EEPROM y con el REGISTER FILE. La EEPROM es una memoria especial, que no se puede borrar electricamente, utilizada en el PIC paragrabar en la memoria el programa que hay que realizar.

Su capacidad de memoria es de 1024 arremdamientos cada una puede contener un opcode con 14 bit es deciruna instrucciòn base de el PIC. El programa màs complejo que se lograra realizar no podrà ser màs largo de1024 instrucciones. Las direcciones reservadas a la EEPROM van de 0000H a 03FFH. El PIC puede solamente seguir lasinstrucciones en la memoria de estos arremdamientos. No puede de ninguna forma leer, escribir o borrar loque se encuentra contenido en los mismos. Para escribir, leer y borrar estos arremdamientos es necesario un dispositivo externo llamado programador. La primera zona de memoria, en la direcciòn 0000H, debe contener la primera instrucciòn que el PIC deberà

Page 16: DL 3155M24 SPA

realizar en el reset y por lo tanto es llamada Reset Vector. El REGISTER FILE es un conjunto de arremdamientoso zonas de memoria RAM llamados REGISTROS(Figura 2.2).

A diferencia de la memoria EEPROM destinada acontener el programa, el area de memoria RAM esdirectamente visible por el programa mismo. Entonces se podra escribir, leer y cambiartranquilamente cada arremdamiento de el REGISTERFILE en nuestro programa cada vèz que se presente lanecesidad de hacerlo.

La unica limitaciòn es el hecho que algunos de estosregistros cumplen una funciòn especial para el PIC y nopueden ser utilizados para intenciones diferentes para lascuales no han sido reservados. Estos registros especialesse en cuentran en las zonas màs bajas de la area dememoria RAM segùn como se explicara ahora.

Las zonas o los arremdamientos de memoria presente enel REGISTER FILE se encuentran dirigidasdirectamente en un espacio de memoria que va de 00H a2FH para un total de 48 byte, llamado Bank 0 (Figura2.2). Un segundo espacio de direcciòn llamado BanK 1 vadesde 80 H a AFH. Para acceder a este segundo espacioes necesario recurrir a los dos bit auxiliares RPO y RP1que se examinaran màs adelante. Los primeros 12 arrendamientos el banco 0 (de 00H a0BH) y de el banco 1 (de 80 H a 8BH) son reservados alas funciones especiales para el funcionamiento de elPIC y, como ya se ha dicho, no pueden ser utilizadospara otros objetivos. Los 36 arrendamientos en Bank 0 dirigidos de 0CH a"FH pueden ser utilizados libremente por nuestrosprogramas para memorizar variables, contadores, etc.

Los registros especializados, como por ejemplo TRISA yTRISB, de el PIC se utilizan con mucha frecuencia enlos programas.

Fig. 2.2

Por ejemplo, se utiliza la copia de estos registros, para definir cuales de estas lineas de I/O son entradas yquales salidas. El mismo estado logico de las lineas de I/O dipende de el valor de los dos registros PORTA y PORTB. Algunos registros contienen el estado de funcionamiento de los dispositivos internos a el PIC o el resultadode operaciones aritmèticas y lògicas. Es necesario conocer entonces exactamente cuales funciones desarrollan cada uno de los registros epecialesy cuales efectos se obtienen en la manipulaciòn de el contenido. Para facilitar las operaciones sobre los registros especializados, en el fili PI16F84.INC la Microchips haincluido una lista de nombres que identifican cada uno de los registros especializados y a los cuales estanasociados las direcciones correspondientes en la area de los REGISTER FILE. Si, por ejemplo, quisieramos definir todas las lineas de la puerta B de el PIC como salidas actuando sobre elregistro TRISB, podemos elegir las referencias directa para cada registro es decir se podra elegir cada

Page 17: DL 3155M24 SPA

registro con su respectiva direcciòn:

movlw B'00000000' movwf 06H

o tambien, obtener el mismo registro con referencia su nombre simbolico:

movlw B'00000000' movwf TRISB

Hay que pero tener cuidado de introducir el orden INCLUDE "P1684.INC" en el programa que surge.

Page 18: DL 3155M24 SPA

2.2 La ALU y el registro W

Vamos ahora a ilustrar otras dos componentes fundamentales para la arquitectura de el PIC, la ALU y elregistro W o acumuladores.

La ALU (acronimo de Arithmetic and Logic Unit es decir unidad aritmètica y lògica) es la parte màscomplicada de el PIC ya que contiene todo el circuito que tiene la funciòn de calculo y manipulaciòn de losdatos mientras se realiza un programa. La ALU es un componente que se encuentra presente en todos los microprocesadores y de ella dependedirectamente la capacidad de calculo de el micro mismo. La ALU de el PIC16F84 puede operar con valor de 8 bit, es decir valores nùmericos no mayores de 255. Directamente conectado con la ALU se encuentra el registro W llamado tambièn acumulador. Este registro està formado por una simple zona de memoria que logra contener un solo valor a 8 bit. La diferencia màs importante entre el registro W y las demàs zonas de memoria es proprio el hecho que,para dar una referencia a el registro W, la ALU no debe dar ninguna direcciòn de memoria , ma puedeacceder directamente. El registro W se utiliza muchas veces durante la realizaciòn de el programa en el interior de el PIC.

Hagamos un ejemplo pràctico. Supongamos de querer introducir en la zona de memoria 0CH de el REGISTER FILE el valor 01H. Buscando entre las instrucciones de el PIC nos damos cuenta de una vèz que no existe una instrucciòn unicaque permita de efectuar esta operaciòn pero tenemos que necesariamente recurrir a el acumulador y utilizardos instrucciones en serie. Veamos porque. El opcode de una instrucciòn no puede ser màs grande de 14 bit mientras a nosotros nos sirven , 8 paraespecificar el valor que queremos introducir en la zona de memoria, 7 para especificar en que zona de lamemoria queremos introducir nuestro valor y 6 para especificar cual de las instrucciones queremos utilizar.

En total: 8 + 7 + 6 = 21 bit.

Debemos entonces recurrir a dos instrucciones, es decir:

movlw 01H movwf 0CH

che introducen en el registro W el valor 01H con la instrucciòn MOV y Literal to W y despues lo "mueven"en la zona 0CH con la instrucciòn MOV y W to F.

Page 19: DL 3155M24 SPA

2.3 El Program Counter y el Stack

En esta parte se analizara el funcionamiento de el Programa Counter y de el Stack que son dos partesimportantes para entender las instrucciones de salto y llamada a sobroutine.

El PIC16F84 comienza la realizaciòn de el programa empezando por el Reset Vector es decir por la zona dememoria 0000H. Despues de aver seguido esta instrucciòn se pasa a la instrucciòn siguiente grabada en la zona 0001H y asien adelante. Si no existieran las instrucciones capazes de influenciar la realizaciòn progresiva de el programa, el PICllegariaen poco tiempo a realizar la instrucciòn grabada en la ùltima locazione y no sabria màs como iradelante. Cualquier sistema con microprocesador o lenguaje de programaciòn contiene instrucciones de salto, es decirinstrucciones que puedan modificar el flujo para realizar los programas. Una de estas instrucciones es elgoto (de el ingles go to, ve para). Cuando el PIC encuentra un goto no sigue la instruccione inmediatamente siguiente si no salta directamentea la zona de memoria especificada en la instrucciòn.

Un ejemplo: ORG 00H Salto1 movlw 10 goto Salto1

En el reset el PIC seguira la instrucciòn movlw 10 em memoria en la zona 0000H que metera en elacumulador el valor decimal 10. Entonces pasara a la instrucciòn siguiente goto Salto 1. Esta instrucciòn determinara un salto a la zona de memoria señalada por la label Salto 1 es decir de nuevo ala zona 0000H. El programa no harà otra cosa que un ciclo infinito realizando continuamente las dos instrucciones de lalista. Durante este ciclo, para determinar cual es la siguiente instrucciòn que hay que llevar a cabo, el PIC utilizaun especial registro llamado Program Counter es decir contador de programa. El mismo se attualiza siempre es decir se mantiene al dia a travèz de una direcciòn con la proximainstrucciòn que se tendra que realizar. En el reset el mismo se pone en cero, provocando el comienzo de laejecuciòn desde la direcciòn 0000H, a cada instrucciòn se aumenta, en vèz, de uno para permitir el pasaje ala instrucciòn siguiente.

La instrucciòn goto permite de introducir un nuevo valor en el Program Counter y el siguiente salto a unazona cualqiera de la area programa de el PIC.

Otra instrucciòn muy interesante es la call es decir la llamada a subroutine. Esta instrucciòn funciona de manera muy parecida a la goto con la unica diferencia que antes de realizar elsalto pone en memoria, en una zona de memoria particular llamada Stack, la direcciòn de la que deberia serla proxima instrucciòn que se tendra que realizar si no se hubiera aparecido la call. Veamos mejor con un ejemplo:

ORG 00H Salto1 movlw 10 call Llamada1 goto Salto1 Llamada1 movlw 11 return

Page 20: DL 3155M24 SPA

En este caso el PIC, despues de realizar la movlw 10 pasa a realizar la call Llamada 1. Antes de saltar pone en memoria en el Stack la direcciòn 0002H, es decir la direcciòn de la zona siguiente ala call. Pasa entoces a realizar la instrucciòn movlw 11, pone en memoria en relaciòn a la label Chiamata 1. En este momento encuentra una nueva instrucciòn la return que, como se puede pensar observando elnombre, permite "regresar", es decir regresar a realizar la instrucciòn siguiente a la call. La operaciòn apenasefectuada se llama: "Llamada a subroutine". Para poder comenzar de donde se habia interrumpido el programa, el PIC utiliza el ultimo valor introducidoen el Stack y lo introduce de nuevo en el Program Counter. La palabra stack " pila o monton" sirve pa "amontonar" uno sobre la otra todas las direcciones para despuesrecuperar las mismas cuando sea necesario. Este tipo de grabaciòn o de poner en memoria se llama tambièn LIFO que proviene de el ingles Last In FirstPut, donde el ultimo elemento introducido (last in) debe necesariamente salir de primero (last out). Gracias ael stack es posible efectuar màs call, una adentro de la otra y mantener siempre la huella de el punto dondese retoma el programa en el momento que se encuentra una instrucciòn return. Veamos otro ejemplo:

ORG 00H Salto1 Movlw 10 Call Llamada1 Goto Salto1 Llamada1 movlw 11 call Llamada2 return Llamada2 movlw 12 return

En este caso en la subroutine Llamada 1 se efectua otra call màs a la subroutine Llamada 2. En el regreso de esta ultima el programa tendra que regresar en la subroutine Llamada 1 realizar el return yentonces regresar atras. Las direcciones que hay que grabar en el stack son dos ya que se encuentra una segunda call antes deencontrar el return correspondiente de la primera. Se dice entonces que las call son "en nido" es decir una dentro de la otra. El PIC16F84 contiene un stack con8 niveles, es decir un stack que permite hasta 8 llamadas en nido. Es importante estar seguro, que durante la realizaciòn de un programa, exista siempre una instrucciòn returnpara cada llamada o call para evitar errores en el stack que durante la ejecuciòn puedan dar problemas queson dificiles de observar.

Page 21: DL 3155M24 SPA

Lección N.3: Programación

Objectivos: Saber:

Las instrucciones de el PIC

Saber hacer:

Escribir y llenar un programa en assembler

Analizar un source assembler

Requisitos: Lecciòn 1 y lecciòn 2

Contenidos: Set de instrucciones de el PIC16F84

Escritura y llenado de un programa en assembler

Page 22: DL 3155M24 SPA

Página blanca

Page 23: DL 3155M24 SPA

3.1 Set de instrucciones de el PIC 16F84

Sintassi Descripciòn Microchip Operaciòn equivalente

ADDLW k Add Literal and W W = W + k

ADDWF f,d Add W and f d = W + f (donde d puede ser w o f)

ANDLW k AND Literal with W W = W AND k

ANDWF f,d AND W with f d = W AND f (donde d puede ser w o f)

BCF f,b Bit Clear f f(b) = 0

BSF f,b Bit Set f f(b) = 1

BTFSC f,b Bit Test f, Skip if Clear f(b) = 0 ? Si, salta una instrucciòn

BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Si, salta una instrucciòn

CALL k Subroutine Call llama la subroutine en la direcciòn k

CLRF f Clear f f = 0

CLRW Clear W Register W = 0

CLRWDT Clear Watchdog Timer Watchdog timer = 0

COMF f,d Complement f d = not f (donde d puede ser W o f)

DECF f,d Decrement f d = f -1 (donde d puede ser W o f)

DECFSZ f,d Decrement f, Skip if 0 d = f -1 (donde d puede ser W o f) si d=0 salta

GOTO k Go to address Salta en la direcciòn k

INCF f,d Increment f d = f +1 (donde d puede ser W o f)

INCFSZ f,d Increment f, Skp if 0 d = f +1 (donde d puede ser W o f) se d = 0 salta

IORLW k Inclusive OR Literal with W W = W OR k

IORWF f,d Inclusive OR W with f d = f OR W (donde d puede ser W o f)

MOVLW k Move literal to W W = k

MOVF f,d Move f d = f (donde d puede ser W o f)

MOVWF f Move W to f f = W

NOP No Operation Ninguna operaciòn

OPTION Load Option Register OPTION = W

RETFIE Return from Interrupt Regresa de un interrupt handler

RETLW k Return Literal to W Regresa de una subroutine con W = k

RETURN Return from Subroutine Regresa de una subroutine

RLF f,d Rotate Left f through Carry d = f << 1 (donde d puede ser W o f)

RRF f,d Rotate Right f through Carry d = f >> 1 (donde d puede ser W o f)

SLEEP Go into Standby Mode Pone en standby el PIC

SUBLW k Subtract W from Literal W = k - W

SUBWF f,d Subtract W from f d = f - W (donde d puede ser W o f)

SWAPF fSwap f f = Swap dei bit 0123 con 4567 di

TRIS f Load TRIS Register TRIS di f = W

XORLW k Exclusive OR Literal with W W = W XOR k

XORWF f,d Exclusive OR W with f d = f XOR W (donde d puede ser W o f)

Page 24: DL 3155M24 SPA

ADDLW ADD Literal and W Status Register

Suma la constante K a W

Sintassi: addlw k

Operaciones equivalentes: W = W + kDescripciòn: Suma la constante K al valor grabado en el acumulador W y pone el resultado

en el acumulador.Ejemplo: org 00H

start movlw 10 addlw 12

Despues de haber realizado este programa el acumulador W valdra 22.Nota esta instrucciòn influencia i bit Z, DC y C de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale o.DC vale 1 si el resultado de la operaciòn es un nùmero superior de 15.C vale 1 si el resultado es positivo es decir si el bit 7 de el registro quecontiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit deel registro que contiene el resultado vale 1.

Page 25: DL 3155M24 SPA

ADDWF ADD W and F Status Register

Suma el valor contenido en W con el valor contenido en el registro F

Sintassi: addwf f,d

Operaciones equivalentes: d = W + f (donde d puede ser W o f)Descripciòn: Esta instrucciòn suma el valor contenido en el acumulador W con el valor

contenido en el registro dirigido por el parametro f. El parametro d es un flagque indica en cual registro debe ser puesto en memoria el resultado.Para d = W el resultado se graba en el registro WPara d = F el resultado se graba en el registro f

Ejemplo: Veamos un ejemplo de suma entre dos registros:

add1 equ 0CHadd2 equ 0DH org 00H movlw 10 ;Primer addendo = 10 movwf add1 movlw 15 ;Segundo addendo = 15 movwf add2 movf add1,W ;W = add1 addwf add2,W ;W = W + add2

Nota Esta instrucciòn influencia i bit Z, DC y C de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.DC vale 1 si el resultado de la operaciòn es un nùmero superior a 15.C vale 1 si el resultado es positivo es decir si el bit 7 de el registro quecontiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit 7de el registro que contiene el resultado vale 0.

Page 26: DL 3155M24 SPA

ANDLW AND Literal with W Status Register

Efectua el AND entre W y una constante K

Sintassi: andlw k

Operaciones equivalentes: W = W AND kDescripciòn: Efectua el AND entre el valor contenido en el acumulador W y el valor

constante K. El resultado es memorizado en el acumulador.Ejemplo: org 00H

start movlw 10101010B andlw 11110000B ...

Despues de haber realizador este programa el acumulador W valdra 10100000B.Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 27: DL 3155M24 SPA

ANDWF AND W with F Status Register

Efectua el AND logico entre el valor contenido en W y el valor contenido en el registro F

Sintassi: andwf f,d

Operaciones equivalentes: d = W AND f (donde d puede ser W o f)Descripciòn: Esta instrucciòn efectua el AND lògico entre el valor contenido en el

acumulador W y el valor contenido en el registro dirigido por el parametro f. Elparametro d es un flag que indica en cual registro se debe grabar el resultado.Para d = W el resultado està grabado en el registro WPara d = F el resultado està grabado en el registro f

Ejemplo: Muchas veces el AND logico se utiliza para cubrir el valor de algunos bit en elinterior de un registro. Si por ejemplo quisieramos extraer de el nùmero binario01010101B los cuatros bit menos importantes para poder de esta maneraobtener el siguiente valor 00000101B, serà necesario solo preparar una mascarade el tipo 00001111B y realizar el AND con nuestro valor inicial, veamoscomo:.

movlw 01010101B ;Graba en el registro movwf 0CH ;0CH el valor inicial que hayque ocultar movlw 00001111B ;Prepara la mascara de el bit andwf 0CH,W ;Efectua el AND y graba el ;resultado en el acumulador W

El resultado en W sera 00000101B como solicitado.

W = 00001111 AND f = 01010101 = W = 0000010101

Nota La ANDWF influencia el bit Z de el registro STATUS que valdra 1 si el

resultado de la operaciòn es cero.

Page 28: DL 3155M24 SPA

BCF Bit Clear F Status Register

Pone en cero un bit que se encuentra en el registro F

Sintassi: bcf f,b

Operaciones equivalentes: f(b) = 0Descripciòn: Esta instrucciòn pone en cero el bit b de el registro en la direcciòn f.Ejemplo: parm1 equ 0CH

org 00H movlw 11111111B ;Valor inicial movwf parm1 bcf parm1,0 ;D0=0

Al final de el programa el registro parm 1 vale 11111110BNota Esta instrucciòn no influencia ningun bit de estado.

Page 29: DL 3155M24 SPA

BSF Bit Set F Status Register

Mette en uno un bit en el registro F

Sintassi: bsf f,b

Operaciones equivalentes: f(b) = 1Descripciòn: Esta instrucciòn mete en uno el bit b de el registro en la direcciòn f. Ejemplo: parm1 equ 0CH

org 00H movlw 00000000B ;Valore inicial movwf parm1 bsf parm1,0 ;D0=1

Al final de el programa el registro vale 00000001B.Nota Esta instrucciòn no influencia ningun bit de estado

Page 30: DL 3155M24 SPA

BTFSC Bit Test F, Skip if Clear Status Register

Salta la instrucciòn siguiente si un bit en el registro vale 0

Sintassi: Btfsc f,b

Operaciones equivalentes: f(b) = 0 ? Si, salta una instrucciònDescripciòn: Prueba el bit b que se encuentra en el registro en la direcciòn f y salta la

instrucciòn siguiente si el mismo vale cero.Ejemplo: parm1 equ 0CH

org 00H movlw 11111110B ;Valore inicial movwf parm1loop btfsc parm1,0 ;D0 = 0 ? Si, sale goto loop ;No, efectua el loop

Esta programa efectua un loop infinito el mismo programa no efectua el loop sireemplazamos la instrucciòn : movlw 11111110B ;Valor inicialcon la instrucciòn: movlw 11111111B ;Valor inicial

Nota Esta instrucciòn no influencia ningun bit de estado

Page 31: DL 3155M24 SPA

BTFSS Bit Test F, Skip if Set Status Register

Salta la instrucciòn siguiente si un bit en el registro F vale 1

Sintassi: btfss f,b

Operaciones equivalentes: f(b) = 1 ? Si, salta una instrucciònDescripciòn: prueba el bit b que se encuentra en el registro en la direcciòn f y salta la

instrucciòn siguiente si el mismo vale 1.Ejemplo: parm1 equ 0CH

org 00H

movlw 11111111B ;Valor inicial movwf parm1loop btfss parm1,0 ;D0 = 1 ? Si, sale goto loop ;No, efectua el loop

Este programa efectua un loop infinito el mismo programa no efectua el loop sireemplazamos la instrucciòn:

movlw 11111111B ;Valor inicial

con la instrucciòn:

movlw 11111110B ;Valor inicial

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 32: DL 3155M24 SPA

CALL Subroutine CALL Status Register

Llamada a subroutine

Sintassi: call k

Operaciones equivalentes: Descripciòn: Llama durante la ejecuciòn una subroutine grabada en la direcciòn K.

El parametro K puede ser especificado utilizando directamente el valornùmerico de la direcciòn o tambièn la correspondiente label.

Ejemplo: org 00H

call ledOn ...

;Subroutine cuando un led se prendeledOn bsf PORTB,LED1 return

Cuando la CPU de el PIC encuentra una instrucciòn CALL, graba en el STACKel valor de el registro PC + 1 de esta manera se logra volver a comenzar laejecuciòn de la instrucciòn siguiente a la CALL, entonces escribe en el PC ladirecciòn de la subroutine saltando a la ejecuciòn de esta ultima.El valor original de el PC se restablece en la salida de la subroutine con laejecuciòn de la instrucciòn de regreso RETURN o RETLW.En el PIC16F84 estan disponibles 8 niveles de stack, por lo tanto el nùmeromàximo de CALL que regresan, es decir de instrucciones CALL en el interiorde la subroutine que a su vèz contienen otras CALL, se limita a 8 niveles.

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 33: DL 3155M24 SPA

CLRF CLeaR F register Status Register

Pon en cero el registro F

Sintassi: clrf f

Operaciones equivalentes: f = 0Descripciòn: Esta instrucciòn pone en cero el valor contenido en el registro dirigido por el

parametro f.Ejemplo: Hagamos la hipòtesis de poner de nuevo en cero el registro TMRO cuya

direcciòn es 01H esadecimal, la instrucciòn que hay que realizar serà:

clrf 01H

O tambièn, se puede incluir al principio de nuestro source el file P16F84. INC,se puede utilizar el nombre simbolico de el registro TMR0.

clrf TMR0

Despues de la ejecuciòn de esta instrucciòn el bit Z de el registro STATUS selleva a 1.

Nota

Page 34: DL 3155M24 SPA

CLRW CLeaR W register Status Register

Pone en cero el registro W

Sintassi: clrw

Operaciones equivalentes: W = 0Descripciòn: Pone en cero el valor contenido en el registro W.Ejemplo: Nota Despues de la ejecucuòn de esta instrucciòn el bit Z de el registro STATUS se

lleva a 1.

Page 35: DL 3155M24 SPA

CLRWDT CLeaR WatchDog Timer Status Register

Reset de el timer de el watchdog

Sintassi: clrwdt

Operaciones equivalentes: Descripciòn: Esta instrucciòn debe ser utilizada cuando se programa el PIC con la opciòn

Watchdog habilitada (fusible WDTE). En esta modalidad el PIC habilita un timer que, una vez que pasa el tiempodeterminado, efectua el reset de el PIC. Para evitar el reset el programa nuestro tendra que efectuar la instrucciònCLRWDT en forma ciclica para poder poner en cero el timer antes de el tiempomismo. Si no ponemos en cero el timer en tiempo, el circuito de el watchdog (de elingles perro guardian) entendera esta situaciòn como un bloqueo de el programaque se esta realizando o ejecutando y efectuara el reset para desbloquear.

Ejemplo: org 00H

loop clrwdt goto loop

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 36: DL 3155M24 SPA

COMF COMplement F Status Register

Efectua el complemento de el registro F el registro F

Sintassi: comf f,d

Operaciones equivalentes: d = NOT f (donde d puede ser W o f)Descripciòn: Esta instrucciòn efectua el complemento de el valor que se encuentra en el

registro dirigido por el parametro f. El parametro d determina la destinaciòn de el valor obtenido.

Ejemplo: parm1 equ 0CH

org 00H

movlw 01010101B movwf parm1

comf parm1,F ...

Al final de la ejecuciòn de el programa el valor de el registro parm1 serà10101010B.

Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 37: DL 3155M24 SPA

DECF DECrement F register Status Register

Disminuye el contenido de el registro F

Sintassi: decf f,d

Operaciones equivalentes: d = f - 1 (donde d puede ser W o f)Descripciòn: Esta instrucciòn disminuye el contenido de el registro dirigido por el parametro

f. El parametro d es un flag que indica en cual registro se debe grabar el resultado.

Para d = W el resultado se graba en el registro WPara d = F el resultado se graba en el registro f

Ejemplo: Con el siguiente programa se escribe el valor 23 H en el registro a la direcciònOCH disminuyendo por lo tanto de 1. Cuando termina la ejecuciòn el registro en la zona 0CH habra el valor 22H.

movlw 23H ;Escribe en W el valor 23 H movwf 0CH ;Copia en el registro 0CH el valorde W decf OCH,F ;Reduce el valor contenido en elregistro 0CH

Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 38: DL 3155M24 SPA

DECFSZ DECrement F, Skip if Zero Status Register

Reduce el valor de el registro f y salta la instrucciòn siguiente si el resultado vale cero.

Sintassi: decfsz f,d

Operaciones equivalentes: d= f - 1 (donde d puede ser W o f) si d = 0 saltaDescripciòn: Reduce el valor de el registro en la direcciòn f y si el resultado vale cero salta la

instrucciòn siguiente. El resultado de la reducciòn puede ser grabado en el mismo registro f o tambiènen el acumulador W en base a el valor de el flag d.

Para d = W el resultado se graba en el registro WPara d = F el resultado se graba en el registro f

Ejemplo: counter equ 0CH

org 00H

movlw 10 ;counter = 10 movwf counterloop decfsz counter,F ;counter = counter –1 ;counter = 0 ? Si sale goto loop ;No, continua

Este programa efectua por 10 veces las instrucciones decfsz hasta que sale paracounter = 0.

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 39: DL 3155M24 SPA

GOTO GO TO address Status Register

Ve en ejecuciòn a la direcciòn K

Sintassi: goto k

Operaciones equivalentes: Descripciòn: Determina un salto de el programa en ejecuciòn en la direcciòn K.

El parametro K puede ser especificado utilizando directamente el valornùmerico de la direcciòn o tambièn la correspondiente label.

Ejemplo: org 00H

loop goto loop

Este programa efectua un ciclo (loop) infinito.Nota Esta instrucciòn no influye ningun bit de estado.

Page 40: DL 3155M24 SPA

INCF INCrement F Status Register

Aumenta el valor de el registro en la direcciòn F

Sintassi: incf f,d

Operaciones equivalentes: d = f + 1 (donde d puede ser W o f)Descripciòn: Aumenta el contenido de el registro en la direcciòn f y graba el resultado en el

mismo registro o en el acumulador W en base a el valor de el flag d:

Para d= W el resultado se graba en el registro WPara d = F el resultado se graba en el mismo registro F

Ejemplo: Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 41: DL 3155M24 SPA

INCFSZ INCrement F, Skip if Zero Status Register

Aumenta el valor de el registro f y salta la instrucciòn siguiente si el resultado vale cero.

Sintassi: incfsz f,d

Operaciones equivalentes: d= f + 1 (donde d puede ser W o f) si d = 0 saltaDescripciòn: Aumenta el valor de el registro en la direcciòn f y si el resultado vale cero salta

la instrucciòn siguiente. El resultado de la reducciòn puede ser grabado en el mismo registro f o tambiènen el acumulador W en base a el valor de el flag d.

Para d = W el resultado se graba en el registro WPara d = F el resultado se graba en el registro f

Ejemplo: Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 42: DL 3155M24 SPA

IORLW Inclusive OR Literal with W Status Register

Efectua el OR entre W y una constante K

Sintassi: iorlw k

Operaciones equivalentes: W = W OR kDescripciòn: Efectua el OR incluido entre el valor contenido en el acumulador W y el valor

costante K.Ejemplo: org 00H

start movlw 00001111B iorlw 11110000B ...

Despues de haber realizado este programa el acumulador W vale 11111111B .Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 43: DL 3155M24 SPA

IORWF Inclusive OR W with F Status Register

Efectua el OR incluido entre el valor contenido en W y el valor contenido en el registro F

Sintassi: iorwf f,d

Operaciones equivalentes: d = f OR W (donde d puede ser W o f)Descripciòn: Esta istrucciòn efectua el OR inclusivo entre el valor contenido en el

acumulador W y el valor contenido en el registro dirigido por el parametro f. El parametro d determina donde se graba el resultado de la operaciòn:

Para d = W el resultado se graba en el acumulador W.Para d = F el resultado se graba en el registro f.

Ejemplo: parm1 equ 0CH

org 00H

movlw 00001111B movwf parm1

movlw 11111111B iorwf parm1,F

Al final de la ejecuciòn el valor de el registro parm 1 serà: 11111111B.Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 44: DL 3155M24 SPA

MOVLW MOVe Literal to W Status Register

Da a W un valor constante

Sintassi: movlw k

Operaciones equivalentes: W = kDescripciòn: Da al acumulador W el valor constante K.Ejemplo: org 00H

start movlw 20 ...

Despues de haber realizado este programa el acumulador W vale 20.

Nota Esta instrucciòn no influye ningun bit de estado.

Page 45: DL 3155M24 SPA

MOVF MOVe F Status Register

Mueve el contenido de el registro F

Sintassi: movf f,d

Operaciones equivalentes: d = f (donde d puede ser W o f)Descripciòn: Esta instrucciòn copia el contenido de el registro dirigido por el parametro f o en

el acumulador W o en el mismo registro F. El parametro d determina la destinaciòn.

Per d = W el valor se graba en el registro WPer d = F el valor se deja en el registro f. En este caso la utilidad de lainstrucciòn es que se altera el bit Z de el flag STATUS enbase a el valorcontenido en el registro f.

Ejemplo: El ejemplo siguiente copia el valor contenido en el registro en la direcciòn 0CHen el accumulatore W:

movf 0CH,W

Nota La ejecuciòn de la MOVF no influencia ningun bit de estado.

Page 46: DL 3155M24 SPA

MOVWF MOVe W to F Status Register

Mueve el contenido de el registro W en el registro F

Sintassi: movwf f

Operaciones equivalentes: f = WDescripciòn: Esta instrucciòn copia el contenido de el registro W en el registro dirigido por el

parametro f.Ejemplo: Hagamos la ipotesi de quere escribir el valor 10H (esadecimal) en el registro

TMRO. Las instrucciones que habrà que realizar o seguir seran las siguientes.

movlw 10H ;Escribe en el registro W el valor10H movwf 01H ;Y lo graba en el registro TMR0

Para los registros utilizados por el PIC para funciones especificas, normalmenteno se introduce directamente la direcciòn ma el correspondiente nombresimbolico definido en el file P16F84.INC. El codigo serà, entonces el siguiente:

movlw 10H ;Escribe en el registro W el valor10H movwf TMR0 ;y lo graba en el registro TMR0

Nota La ejecuciòn de la MOVWF no influencia ningun bit de estado.

Page 47: DL 3155M24 SPA

NOP No OPeration Status Register

Ninguna operaciòn

Sintassi: nop

Operaciones equivalentes: Descripciòn: Esta instrucciòn no sigue ninguna operaciòn pero es util para introducir un

retraso de un ciclo de màquina.Ejemplo: Utilizando un quarzo de 4 MHz se podra obtener un retraso de 1 ?s para cada

instrucciòn NOP introducida en nuestro source..

nop ;Sigue un retraso de 1µs

Nota La NOP no influencia ningun bit de estado.

Page 48: DL 3155M24 SPA

OPTION load OPTION register Status Register

Asigna el valor en W a el registro OPTION

Sintassi: option

Operaciones equivalentes: OPTION = WDescripciòn: Esta instrucciòn graba en el registro especial OPTION el valor contenido en el

acumulador W. Ejemplo: org 00H

start movlw 01000100B option ...

Esta instrucciòn existe para mantener la compatibilidad con los PIC producidoshasta ahora, la Microchip da el consejo de no utilizarla. Es en vèz bueno utilizar las siguientes instrucciones.

org 00H

start bsf STATUS,RP0 ;Activa el banco deregistros 1

movlw 01000100B movwf OPTION_REG ...

En otras palabras se aconseja escribir directamente en el registro OPTIONpresente en el banco 1 de los registros de el PIC utilizando la MOVWF en vèzde la instrucciòn OPTION que en un futuro podra no ser màs utilizada.

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 49: DL 3155M24 SPA

RETFIE RET From Interrupt Status Register

Regresa a una subroutine

Sintassi: retfie

Operaciones equivalentes: Descripciòn: Esta instrucciòn debe ser introducida al final de cada subroutine de gestion de

los interrupt para dar de nuevo el control a el programa principal.Ejemplo: org 00H

loop goto loop ;Loop infinito

org 04H ;Interrupt vector

intHandler

retfi ;Regresa de el interrupt

En esta source el programa principal realiza un loop infinito. Si se habilita uno de los interrup de el 16F84 apenas el mismo se realizara elcontrol serà dado automaticamente a el programa que se encuentra en ladirecciòn 04H (en el ejemplo intHandler), la instrucciòn RETFI determinaraentonces el regreso a el lopp principal.

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 50: DL 3155M24 SPA

RETLW RETurn Literal to W Status Register

Regresa de una subroutine con una constante en W

Sintassi: retlw k

Operaciones equivalentes: Descripciòn: Esta instrucciòn regresa el control de una subroutine a el programa principal.

Diferentemente de la instrucciòn RETURN la misma permite de pasar, a travèzde el acumulador W, el valor constante K a el programa principal.

Ejemplo: rtc equ 0CH org 00H

call mySub1 movwf rtc

...

mySub1 nop retlw 10

Una vèz que se realiza este programa graba en el registro rtc el valor 10 pasandopor la subroutine mysub 1.

Nota Esta instrucciòn no influencia ningun bit de estado

Observar tambièn la instrucciòn RETURN.

Page 51: DL 3155M24 SPA

RETURN RETURN from subroutine Status Register

Regresa de una subroutine

Sintassi: return

Operaciones equivalentes: Descripciòn: Esta instrucciòn debe ser introducida al final de cada subroutine para comenzar

de nuevo la ejecuciòn de el programa principal.Ejemplo: org 00H

call mySub1 ....

mySub1 nop return

Nota: En el PIC16F84 pueden ser colocadas en forma de nido hasta 8 llamadasa subroutine de el tipo:

org 00H

call mySub1 ....

mySub1 call mySub2 return

mySub2 call mySub3 return

mySub3 return

Nota Esta instrucciòn no influencia ningun bit de estado.

Observar tambien la instrucciòn RETLW.

Page 52: DL 3155M24 SPA

RLF Rotate Left F through carry Status Register

Gira a la izquierda el contenido de el registro f pasando por el Carry

Sintassi: rlf f,b

Operaciones equivalentes: d = f << 1 (donde d puede ser W o f)Descripciòn: Gira el bit contenido en el registro en la direcciòn f hacia la izquierda (es decir

de los bit meno significativos hacia aquellos màs significativos) pasando por elbit CARRY de el registro STATUS.El contenido de el bit CARRY de el registro status es llevado o cambiado en elbit DO mientras el valor en la salida de el bit D7 es cambiado hacia el CARRY.El valor de el parametro d determina la destinaciòn de el resultado obtenido alfinal de la rotaciòn:

Para d = W el resultado se graba en el registro W dejando el registro finvariable.Para d = F el resultado se graba en el mismo registro f

Ejemplo: parm1 equ 0CH

org 00H

clrf C,STATUS ;Pone en cero el CARRY

movlw 01010101B ;Valore inicial movwf parm1

rlf parm1,F

Al final de el programa el registro parm 1 valdra 10101010B mientras elCARRY tendra un valor cero.

Nota Esta instrucciòn no influencia ningun otro bit de estado ademàs de el CARRY.

Page 53: DL 3155M24 SPA

RRF Rotate Right F through carry Status Register

Gira a la derecha el contenido de el registro f pasando por el Carry

Sintassi: rrf f,b

Operaciones equivalentes: d = f >> 1 (dove d può essere W o f)Descripciòn: Gira el bit contenido en el registro en la direcciòn f hacia la derecha ( es decir

desde los bit màs significativos hacia los bit menos significativos) pasando porel bit CARRY de el registro STATUS como està representado en la Figura 3.2:

Fig. 3.2

El contenido de el bit CARRY de el registro status se pone en el bit D7 mientrasel valor en la salida de el bit D0 se introduce en el CARRY.El valor de el parametro d determina la destinaciòn de el resultado obtenido alfinal de la rotaciòn:

Per d = W El resultado se graba en el registro W dejando el registro f sincambiar.Per d = F el resultado se graba en el mismo registro f

Ejemplo: parm1 equ 0CH org 00H

clrf C,STATUS ;Pone en cero el CARRY movlw 01010101B ;Valor inicial

movwf parm1 rrf parm1,F

Al final de el programa el registro parm 1 vale 00101010B mientras el CARRYvale 1.

Nota Esta instrucciòn no influencia ningun otro bit de estado ademàs de el CARRY.

Page 54: DL 3155M24 SPA

SLEEP go into standby mode Status Register

Mete il PIC en standby

Sintassi: sleep

Operaciones equivalentes: Descripciòn: Esta instrucciòn bloquea la ejecuciòn de el programa que se està realizando y

pone el PIC en un estado de stanby (sleep de el Ingles to sleep, dormir). Ejemplo: org 00H

start sleep

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 55: DL 3155M24 SPA

SUBLW SUBtract W from Literal Status Register

Sustrae a K el valor en W

Sintassi: sublw k

Operaciones equivalentes: W = k - WDescripciòn: Sustrae a la constante K el valor grabado en el acumulador W.Ejemplo: org 00H

start movlw 10 sublw 12 ...

despues de haber realizado este programa el valor de el acumulador W vale 2.Nota esta instrucciòn influencia i bit Z, DC y C de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.DC vale 1 si el resultado de la operaciòn es un nùmero superior a 15.C vale 1 si el resultado es positivo es decir si el bit 7 de el registro quecontiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit 7de el registro que contiene el resultado vale 1.

Page 56: DL 3155M24 SPA

SUBWF SUBstract W from F Status Register

Sustrae el valor contenido en W con el valor contenido en el registro F

Sintassi: subwf f,d

Operaciones equivalentes: d = f - W (donde d puede ser W o f)Descripciòn: Esta instrucciòn sustrae el valor contenido en el registro W con el valor

contenido en el registro dirigido por el parametro f. El parametro d es un flag que indica en cual registro debe ser grabado elresultado.Para d = W el resultado es grabado en el registro WPara d= F el resultado se encuentra grabado en el registro f

Ejemplo: Hagamos el analisis con un ejemplo tomado de la data sheet de la Microchip:Si intruducimos la instrucciòn:

subwf REG1,F

Donde reg 1 es la direcciòn de un cualquier registro especificado a travèz de elcomando:

REG1 RES 1

Para los valores iniciales de REG1=3 y W=2, despues de la ejecuciòn tendremosREG1=1 y C=1 visto que el resultado es positivo. Para los valores iniciales de REG1=2 y W=2 despues de la ejecuciòn tendremosREG1=0 y C=1 porque el resultado es siempre positivo.Para los valores iniciales de REG1=1 y W=2, tendremos REG1=FFH es decir -1entonces C=0 porque el resultado es negativo.

Nota Esta instrucciòn influencia i bit Z, DC y C de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.DC vale 1 si el resultado de la operaciòn es un nùmero superior a 15.C vale 1 si el resultado es positivo es decir si el bit 7 de el registro quecontiene el resultado vale 0 y 1 si el resultado es negativo es decir si el bit 7de el registro que contiene el resultado vale 1.

Page 57: DL 3155M24 SPA

SWAPF SWAP F Status Register

Cambia el valor de los cuatros bit màs significativos de el registro en la direcciòn F con los quatros bitmenos significativos.Sintassi: swap f,d

Operaciones equivalentes: f = Swap de los bit 0123 con 4567 de fDescripciòn: Cambia el valor de los cuatros bit màs significativos (D7 - D4) contenidos en el

registro en la direcciòn f con los cuatros bit menos significativos (D3 - D0) de elmismo. El resultado se graba en el acumulador W o en el mismo registro f en base a elvalor de d:

Para d = W el resultado se graba en el registro WPara d = F il risultato se graba en el registro F

Ejemplo:

Nota Esta instrucciòn no influencia ningun bit de estado

Page 58: DL 3155M24 SPA

TRIS load TRIS register Status Register

Asigna el valor a el registro TRIS

Sintassi: tris f

Operaciones equivalentes: TRIS di f = WDescripciòn: Esta instrucciòn graba en uno de los registros especiales TRIS el valor

contenido en el acumulador W. Los registros TRIS determinan el funzionamiento en entrada y en salida de lalinea de I/O de el PIC. Exiate un registro TRIS para cada puerta de I/O llamado TRISA, TRISB etc.

Ejemplo: org 00H

start

movlw 11111111B tris PORTA ...

Nota: Esta instrucciòn existe para matener la compatibilidad con los PIC hastaahora producidos, la Microchip no aconseja su uso. Es en vès aconsejadoutilizar las siguientes instrucciones.

org 00H

start bsf STATUS,RP0 ;Activa banco de registros 1

movlw 11111111B movwf TRISA ...

En otras palabras se aconseja de escribir directamente en los registros TRISpresentes en el banco 1 de losregistros de el PIC utilizando la MOVWF en vèzde la instrucciòn TRIS que en un futuro podria no ser màs utilizada.

Nota Esta instrucciòn no influencia ningun bit de estado.

Page 59: DL 3155M24 SPA

XORLW Exclusive OR Literal with W Status Register

Efectua el OR exclusivo entre W y una constante K

Sintassi: xorlw k

Operaciones equivalentes: W = W XOR kDescripciòn: Efectua el OR exclusivo entre el valor contenido en el acumulador W y el valor

constante K.Ejemplo: org 00H

start movlw 00000000B xorlw 11110000B ...

Despues de haber realizado este programa el acumulador W vale 11110000B.Nota Esta instrucciòn influencia el bit Z de el registro STATUS.

Z vale 1 si el resultado de la operaciòn vale 0.

Page 60: DL 3155M24 SPA

XORWF eXclusive OR W with F Status Register

Efectua el OR exclusivo entre el valor contenido en W y el valor contenido en el registro F.

Sintassi: xorwf f,d

Operaciones equivalentes:

d = f XOR (donde d puede ser W o f)

Descripciòn: Esta instrucciòn efectua el OR exclusivo (XOR) entre el valor contenido en el acumulador Wy el valor contenido en el registro dirigido por el parametro f. El parametro d es un flag que indica en cual registro debe ser grabado el resultado. Para d = W el resultado se graba en el registro W Para d = F el resultado se graba en el registro f

Esta instrucciòn influencia los bit Z de el registro STATUS que vale 1 si el resultado de laoperaciòn es 0.

Ejemplo: Hagamos la hipotesis de tener que efectuar el XOR entre el registro W y el registro REG1definido por nosotros en la direcciòn 0CH con el comando:

REG1 EQU 0CH

Podemos utilizar la instrucciòn IORWF en dos formas segun a donde queremos poner elresultado, es decir:

xorwf COUNTER,F ;COUNTER = COUNTER XOR W

O tambièn:

xorwf COUNTER,W ;W = COUNTER XOR W

Nota El OR exclusivo (XOR) es una operaciòn entre dos bit donde el bit que resulta vale o si los

dos bit son iguales. Muchas veces el XOR se utiliza en el assembler de el PIC para efectuar la comparaciòn entredos valores cuando falta una instrucciòn especifica.

Observemos como: Hipotisamos de tener un valor en el registro REG1 y de querer verificar si es igual a 57H.Las instrucciones que hay que seguir son las siguientes:

movlw 57H ;W = Valor que hay que comparar = 57H ;resultado W = 57H

xorwf REG1,W ;W = W XOR REG1 Efectua el XOR con ;el valor en REG 1

btfss STATUS,Z ;Salta la instrucciòn siguiente si el ;resultado de el XOR vale o, es decir ;si el valor de REG 1 es par a 57 H

goto diverso ;Salta si es diferente de 57 H goto uguale ;Salta si es igual a 57 H

Page 61: DL 3155M24 SPA

Status Register

Page 62: DL 3155M24 SPA

3.2 ESCRITURA Y COMPILACION O REDACCION DE UN PROGRAMA EN ASSEMBLER

Como para cualquier sistema con microprodesador, tambièn para el PIC es necesario preparar un programa. Un programa està formado por una lista de instrucciones una despues de la otra, cada una de las cualesidentifica la funciòn de base que el PIC es capaz de efectuar. Cada instrucciòn està representada por un còdigo de operaciòn (en inglès operation code o abreviadoopcode) a 14 bit y està grabada en una zona de memoria EEPROM. Esta memoria en el PIC16F84 dispone de 1024 zonas oarremdamientos cada una de las cuales es capaz decontener una sola instrucciòn. Un ejemplo de opcode escrito en forma binomia se puede observar a continuaciòn:

00 0001 0000 0000B

Es màs probable pero, que un opcode este representado en forma esadecimal es decir:

0100H

que representa exactamente el mismo valor pero en la forma màs breve. La letra H, que se coloca al final deel valor 0100, indica el tipo de nota o escritura (Hexadecimal). El mismo valor puede ser representado en assembler con la notaciòn 0x 100 que proviene de el lenguaje C oH'0100'. Estos codigos, que parecen sin sentido, son los unicos que el PIC es capz de entender. Para facilitarla tarea al programador, se recurre a algunos instrumentos y convenciones para volver la instrucciòn màscomprensible.

La primera convenciòn es aquella que asocia a cada opcode (en total 35 para el PIC16F84) una siglamnemonica, es decir una sigla que ayude a acordarse de el significado de la instrucciòn. Regresando al ejemplo nuestro el opcode 0100H corresponde a la instrucciòn mnemonica CLRW que es laforma breve de la instrucciòn LEAR W REGISTER, es decir pone en cero el registro W. Otras convencionespermiten definir variables, constantes, etiquetas (label) que sriven como referencias de las direcciones dememoria, Etc. El conjunto de estas convenciones que sirven para facilitar la redacciòn de un programa para PIC es llamadolenguaje assenbler. Un programa escrito en el lenguaje assembler puede ser escrito en un PC utilizando un cualquier wordprocessor o editor capaz de generar file ASCII. Un file ASCII o, mejor dicho, un file de texto que tenga unprograma en assembler es llamado source o fuente assembler. Una vèz preparado nuestro source assembler, se necesita un programa capaz de traducir las instruccionesmnemoniche y todas las demàs formas convencionales que se han utilisado para escribir nuestro source enuna serie de nùmeros (los opcode) reconocidos directamente por el PIC.

Este programa se llama redactor assembler o ensamblador. En la figura 3.3 se representa el esquema abloques de las operaciònes y de los file que se generan para pasar de un source assembler a u PICprogramado.

Page 63: DL 3155M24 SPA

Fig. 3.3

Como ya se ha dicho antes la primera operaciòn que hay que efectuar es la escritura de el source assembler ysu grabaciòn en un file de texto con extensiòn ASM. Para realizar esto debemos como hemos ya dicho utilizar un editor ASCii, es decir un programa de escrituracomo por ejemplo el NOTEPAD.EXE de Windows o el EDIT.EXE de el DOS. Es posible generar este file tambièn con programas de elaboraciòn de textos màs sofisticados como Word oWordperfect con cuidado de grabar siempre el file producido en el formato o tamaño de texto con extensiòn.ASM. Esto para evitar que se graben tambièn las letras de control de la formataciòn de el texto que el redactorassembler no es capaz de tratar. En el primer ejemplo utilizaremos el file UD1PRG1.ASM.

El paso siguiente es la redacciòn de el source, es decir la transformaciòn en opcode de los codigosmnemonici o instrucciones assembler en ellos contenidos. El redactor assembler que usaremos es el MPASMWIN.EXE pruducido por la Microchip. Ademàs de elsource nuestro con extensiòn. ASM. Es necesario dar a redactor un file segundo producido por la Microchipcon extensiòn. INC diferente segùn el tipo de PIC que estamos utilizando. En nuestro caso el file es el P16F84.INC. Este source contiene algunas definiciones que dependen de el chiputilizado que veremos màs adelante.

Durante la redacciòn de el source, el redactor assembler genera una serie de file con nombre identico a elsource pero con extensiòn diferente.

Page 64: DL 3155M24 SPA

.HEX es el file que contiene los còdigos de operaciòn que se enviaran a el PIC a travèz de elprogramador.

.LST es un file de texto donde se lleva el entero source assembler y la correspondiente traducciòn enopcode. No se utiliza para la programaciòn de el PIC pero es muy util para verificar los procesosde redacciòn que ha hecho el redactor.

.ERR contiene una lista con los errores de redacciòn que se han encontrado y el nùmero de linea en elinterior de el source assembler donde se han encontrado.

Los file .LST, .ERR se utilizan para el control de lo que se ha hecho durante la redacciòn. Solo el file. HEX se utiliza realmente para programar el PIC. Veamos ahora como los file .HEX no son fileen formato binomio y no reflejan directamente el contenido que tendra la EEPROM de el PIC. Su formato pero refleja directamente cuanto se transferira a el PIC en forma legible y con algunasinstrucciones màs. Sin entrar en los detalles es util saber que este formato es directamente reconocible por elprogramador que suministrara mientras se harà la programaciòn el cambio en binomio y contiene, ademàs delos opcode otras informaciones como las direcciones donde seran llevados los opcode. En el paso siguiente se llevara a cabo el analisis de el primer source assembler nuestro y veremos gran partede las convenciones utilizadas en el lenguaje assembler.

ANALISIS DE UN PROGRAMA

Analizaremos a continuaciòn una por una cada linea de el contenido de el siguiente programa :

TITLE ‘UD1prg1’ PROCESSOR 16F84 ; Programa scrito por micro 16F84 RADIX DEC ; Los nùmeros sin nota ; son decimales INCLUDE “P16F84.INC” ; Incluye elfile P16F84.INC ;...................................................................... LED EQU 0 ; LED es equivalente a 0 ORG 0CH ; zona de los datos FILE REGISTER ; dedes la direcciòn 0CH Count RES 2 ; Reserva 2 byte en la Label Count ORG 00H ; Introduce las instrucciones en la ; EEPROM comenzando por 00H ;...................................................................... bsf STATUS,RP0 ; Mete en uno el quinto bit de el file ; register STATUS movlw 00011111B ; Carga en el acumulador (W) el ; valor constante 00011111B movwf TRISB ; Copia el contenido de W en el ; registro TRISB movlw 11111110B ; Carga 11111110B en W movwf TRISA ; Copia W en el registro TRISA bcf STATUS,RP0 ; Pone en cero el quinto bit de el file ; register STATUS bsf PUERTA,LED ; Mete en 1 (accensione LED) RA0 ; de el registro PUERTA ;...................................................................... MainLoop ; Ciclo INTERMITENTE LED call Delay ; Llamada a la sobroutine Delay btfsc PORTA,LED ; Controla si el LED està prendido o ; apagado goto SetToZero ; Si es si, salta en la label SetToZero bsf PUERTA,LED ; Prendido LED goto MainLoop ; Salta en la label MainLoop

Page 65: DL 3155M24 SPA

;...................................................................... SetToZero ; Ciclo de apagado LED bcf PUERTA,LED ; Pone en cero (spegnimento LED) RB0 ; de el registro PUERTB goto MainLoop ; Salta en la label MainLoop ;...................................................................... Delay ; Ciclo de retrazo clrf Count ; Ponen en cero las dos zonas de el RAM clrf Count+1 ; reservadas con la instrucciòn ; Count RES 2 ;...................................................................... DelayLoop ; Ciclo de retrazo decfsz Count,1 ; Disminuye el contenido de el Count, ; salta si el valor alcanzado es 0 goto DelayLoop ; Salta en la label DelayLoop decfsz Count+1,1 ; Disminuye el contenido de el Count+1, ; salta si el valor alcanzado es 0 goto DelayLoop ; Salta en la label DelayLoop return ; Salida de el retrazo ; y salto a la instrucciòn siguiente ; a la Call Delay ;...................................................................... END ; Final de el programa

Comemzemos con la primera linea de còdigo:

PROCESSOR 16F84PROCESSOR es un mando de el redactor assembler que permite de definir para cual microprocesadorse escribio nuestro source. Los mandos no son intrucciones mnemoniche que el redactor traduce en el correspondiente opcode,sino simples indicaciones para el redactor para que pueda determinar el funcionamiento mientras serealiza la redacciòn. En este caso informamos a el redactor que las instrucciones que hemos introducido en nuestro sourceestan relacionadas con un PIC16F84.

RADIX DECEl mando RADIX sirve para informar el redactor que los nùmeros que se encuentran sin nota, sonnùmeros decimales. Es decir si queremos especificar, por ejemplo el nùmero esadecimal 10 (16 decimal) no podemosescribir solo 10 porque se interpreta o entiende como 10 decimal, pero 10 h o tambièn 0x10 o H'10'.

INCLUDE “P16F84.INC”Este es otro mando. Esta vèz indicamos a el redactor la intenciòn nuestra de introducir en el sourceotro file llamado P16F84.INC. El redactor no hara otra cosa que cambiar el mando INCLUDE con el contenido de el file indicado yefectuara la redacciòn como si el mismo formara parte de nuestro source (veer listado al final de elparagrafo).

LED EQU 0EL mando EQU es muy importante ya que nos permite de definir las constantes simbolicas en elinterior de nuestro source. En particular la palabra LED en el source de ahora en adelante sera equivalente a el valor 0. Laintenciòn principal de la existencia de el mando EQU es en otras palabras covertir los source màsfaciles de leer y permitir de cambiar los valores constantes en un unico punto de el source. Es importante notar que la palabra LED no identifica un variable si no sinplemente un nombresimbolico valido durante la redacciòn. No serà posible introducir instrucciones de el tipo LED = 3 en el interior de el source ya que la

Page 66: DL 3155M24 SPA

asignaciòn dinamica de un valor a una variable es una operaciòn que necesita la mano de la CPU de elPIC y que por lo tanto debe ser expresada con instrucciones y no con mandos. Los mandos tienen sentido solo cuando se compila el source es decir un PIC no podra nuncaresponder a un mando.

Veamos ahora la linea siguiente:

ORG 0CHTambièn ORG es un mando y nos permite de definir la direcciòn de donde queremos que el redactorempieze a colocar los datos o las instrucciones siguientes. En este caso estamos por definir una zona de datos en el interior de el PIC es decir una zona dondegrabar variables y contadores mientras ejecuta nuestro programa. Esta zona coincide con la zonaRAM de el PIC definida por la Microchip como zona de los FILE REGISTER. Los file register no sonmàs que zonas RAM disponibles para el usuario a partir de la direcciòn 0CH. Esta direcciòn de comienzo es fija y no puede ser cambiada ya que las zonas anteriores estan ocupadaspor otros registros especiales para uso interno.

Count RES 2En esta linea encontramos una label y un mando. El mando RES indica a el redactor que queremos reservar algunos nùmeros de byte o mejor dicho defile registre en el interior de la zona de datos; en este caso 2 byte. La label Count , donde Count es un nombre escogido por nosotros, es un marcador que el resto de elsource tendra el valor de la direcciòn donde ha sido introducido. Si como anteriormente comodirecciòn de comienzo se escogio la 0CH con la direcciòn ORG, Count tendra el valor 0CH. Si por ejemplo se introduce una label tambien a la linea siguiente la misma tendra el valor 0CH + 2(dos son los byte que hemos reservado) es decir 0EH. Los nombres de las label pueden ser cualquieraexcepto las palabras reservadas para el redactor (como las instrucciones mnemoniche y los mandos). Una label se distingue de una constante simbolica porque su valor se calcula en la fase de la redacciòny no està asignado por nosotros.

ORG 00HEste segundo mando ORG se refiere a una direcciòn en zona programa (en la EEPROM) en vèz queen la zona datos. De este momento en adelante se introduciran las instrucciones mnemoniche que el redactor deberacambiar en los opcode convenientes para los PIC. El primero opcode que realiza el PIC despues de el reset es aquel grabado en la zona 0, de donde seobtiene el valor 00H introducido en la ORG.

bsf STATUS,RP0Esta es la primera instrucciòn mnemonica completa de parametros. Los PIC tienen una CPU interna de el tipo RISC para la cual cada una da las instrucciones ocupa unasola zona de memoria, opcode y parametros incluidos. En este caso la instrucciòn mnemonica bsf quiere decir BIT SET FILE REGISTER es decir pon enuno (condiciòn lògica alta) uno de los bit que se encuentran en la zona de RAM especificada. El parametro STATUS es definido en el file P16F84.INC a travèz de un mando EQU (observar la listaal final de el paragrafo). El valor asignado en este file es 03H y corresponde a un file register (es deciruna zona RAM reservada en la zona de los datos) reservado. Tambièn el parametro RPO està definidoen el file P16F84. INC con valor 05H y corresponde a el nùmero de el bit que se quiere poner en uno.

Cada file register es largo 8 bit y la numeraciòn de cada uno comienza con 0 (bit con memorsignificado) hasta llegar a 7 (bit con mayor significado) Esta instrucciòn pràcticamente pone en 1 elquinto bit de el file register STATUS. Esta operaciòn es necesaria, como se prodra observar en laslecciones siguientes, para acceder a los file register TRISA y TRISB.

movlw 00011111BEsta instrucciòn significa : MOVE LITERAL TO W REGISTER es decir mueve un valor constanteen el acumulador. El acumulador es un particular registro utilizado por la CPU en todas las situaciones donde se

Page 67: DL 3155M24 SPA

efectuan operaciones entre dos valores o tambièn en operaciones de cambios entre zonas de memoria.En otras palabras es un registro de apoyo utilizado por la CPU para grabar temporaneamente un bytecada vèz que se presente la necesidad. El valor constante que hay que grabar en el acumulador es 00011111B es decir un valor binomio a 8bit donde el bit màs hacia la derecha representa el bit 0 o bit con menos significado.

En La instrucciòn siguiente:

movwf TRISBEl valor 00011111 se graba en el registro TRIBS (como para el registro STATUS tambièn TRISB estàdefinido a travèz de un mando EQU) cuya funciòn es aquella de definir el funcionamiento de cadalinea de I/O de la puerta B. En particular cada bit con uno de el registro TRIBS determina una entradaen la correspondiente linea de la puerta B mientras cada 0 determina una salida. En la tabla de la Figura 3.4 està representada la confuguraciòn que tomaran los pin de el PIC despuesde la ejecuciòn de esta instrucciòn:

Fig. 3.4

Las dos instrucciones siguientes desarrollan las mismas funciones para la puerta A de el PIC:

movlw B’11111110' movwf TRISA

en este caso la definiciòn de las lineas serà la siguiente:

Fig. 3.5

Page 68: DL 3155M24 SPA

Como es posible observar los bit 5, 6 y 7 no corresponden a ninguna linea de I/O y por lo tanto elvalor de los mismos no tienen ninguna influencia. Hay que notar como el valor 0 en el bit 0 de el registro TRISA determine la configuraciòn en la salidade la correspondiente linea de el PIC. En nuestra aplicaciòn en efecto esta linea se utiliza para pilotarel LED que habra que poner en intermitencia. (Figura 3.6).

Fig. 3.6

Hemos observado que la instrucciòn movwf TRISA muda el valor contenido en el acumulador(comenzado de manera oportuna con la instrucciòn movlw 11111110B) en el registro TRISA. Elsignificado de movwf es en efecto MOVE W TO FILE REGISTER.

bcf STATUS,RP0Esta instrucciòn es parecida a la bsf que vimos antes, con la sola diferencia que pone en cero el bit envèz que ponerlo en uno. La sugla en este caso es BIT CLEAR FILE REGISTER. De el punto de vista funcional estainstrucciòn ha sido introducida para permitir el acceso a los registros internos de el banco 0 en vèzque a los registros internos de el banco 1 donde se encuentran TRISA y TRISB.

bsf PORTA,LEDCon esta instrucciòn se efectua la primera operaciòn que tiene alguna influencia en el exterior de elPIC. En particular se prende el LED conectado con la linea RA0. PUERTA es una constante definida enP16F84. INC y permite de marcar con una referencia el file register correspondiente a las lineas de I/Ode la puerta A mientras LED es el nùmero de la linea que hay que colocar en 1. Al pricipio de el source la constante LED fue definida igual a 0, entonces la linea interesada serà RA0.

MainLoopEsta linea contiene una label es decir una referencia simbolica a una direcciòn de memoria. El valor de la label, como se dijo anteriormente, se calcula en la fase de la redacciòn en base a elnùmero de las instrucciones, a los mandos ORG y a las otras instrucciones que de alguna maneraocupan espacio en la memoria de el PIC. En este caso, si contamos las instrucciones introducidas comenzando desde el ultimo mando ORGpodemos calcular el valor que se asignara a MainLOOP es decir 07H. En realidad el valor que asumenlas label no tienen mucha importancia ya que su intenciòn es aquella de evitar de tener que conocer laposiciòn precisa de los opcode en la memoria de el PIC permitiendo de todas formas de ponerreferencias a una determinada zona de memoria. En este caso la label MainLoop se utiliza como punto de entrada de un ciclo (de el ingles Loop) deencendido y de apague de el led, es decir una parte de codigo que se repetira en ciclo al infinito.

Page 69: DL 3155M24 SPA

Encontraremos màs adelante una referencia a esta label.

call DelayEsta intrucciòn determina una llamada (de el ingles call) a una subroutine que comienza desde la labelDelay. En este caso la subroutine introduce un retraso igual al tiempo de encendido y apagado de el LED.

btfsc PORTA,LEDEl significado de esta instrucciòn es BIT TEST FLAG, SKIP IF CLEAR es decir controla el estado deun bit en el interno de un registro y salta la instrucciòn siguiente si el valor de este bit es cero. El bit que hay que controlar corresponde a la linea de salida que se encuentra conectada con el diodoLED, a travèz de este test se podra determinar o calcular si el LED esta prendido o apagado y por lotanto actuar segun el caso, es decir : si el LED està ya prendido lo apagaremos, si el LED està apagadolo prenderemos.

Goto SetToZeroEsta instrucciòn es un salto sin condiciòn (de el ingles GO TO, ve para o ve hacia) en la labelSetToZero donde consegriremos las instrucciones para apagar el LED. Esta instrucciòn sera saltada por la instrucciòn siguiente si el LED està ya apagado.

bsf PORTA,LED goto MainLoopEstas dos instrucciones simplemente prenden el LED y ponen el programa en la entrada de el ciclo deintermitencia.

SetToZero bcf PORTA,LED goto MainLoopEsta dos instrucciones simplemente apagan el LED y vuelven amandar el programa en la entrada de elciclo de intermitencia.

Subroutine DelayLa sobroutine Delay introduce un retraso de casi un segundo y puede ser llamada màs veces en elsouerce a travèz de la instrucciòn call Delay Veamos como funcionan:

Delay Clrf Count clrf Count+1 DelayLoop decfsz Count,1 goto DelayLoop decfsz Count+1,1 goto DelayLoop return

Delay y Delay Loop son dos label. Delay identifica la direcciòn de inicio de la subroutine y se utilizapara las llamadas de el cuerpo principa de el programa. Delay Loop es llamado interiormente por la subroutine y sirve como punto de entrada para el ciclo (deel ingles loop) de retraso. En otras palabras el retraso se obtiene siguiendo miles de instrucciones que no hacen nada. Este tipo de retraso se llama retraso software. Es el tipo de retraso màs simple de introducir y puede ser utilizado cuando no se necesita que el PICrealize otras tareas mientras se efectua el retrazo. Las instrucciones:

clrf Count clrf Count+1

Page 70: DL 3155M24 SPA

CLEAR FILE REGISTER ponen encero las dos zonas de RAM reservadas anteriormente con lainstrucciòn: Count RES 2 Estas dos zonas son adyacente comenzando desde la direcciòn con la referencia desde la label count.

decfsz Count,1

La instrucciòn significa DECREMENT FILE REGISTER, SKIP IF ZERO es decir disminuye elcontenido de un registro (en este caso Count y salta la instrucciòn siguiente si el valor que se alcanzaes cero). Si el valor que se alcanza no es cero se efectua la instrucciòn siguiente:

goto DelayLoop

Que vuelve a mandar la ejecuciòn al principio de el ciclo de retraso. Una vèz que se haya alcanzado el cero con el contador Count se efectuan las instrucciones:

decfsz Count+1,1 goto DelayLoop

Que disminuyen el registro siguiente hasta que este no alcanza el valor cero. El registro Count + 1 enparticular serà aumentado de uno por cada 256 deducciones de Count. Cuando tambièn Count + 1 alcanzara el zero la instrucciòn:

return

cuyo significado es RETURN FROM SUBROUTINE determinara la salida de la routine de retraso yla continuaciòn de la ejecuciòn de la instrucciòn siguiente la cal 1 Delay.

ENDPara terminar END es un mando que indica al el redactor el final de la source assembler.

Page 71: DL 3155M24 SPA

Lección N.4: Alrededores y tecnicas de entrevista, interrupt

Objectivos: Saber:

El funcionamiento de las lineas de I/O, de el registro contador TMRO y de elPRESCALER

La gestiòn de los interrupt

El funcionamiento de el Power Down Mode

Saber hacer:

Programar las lineas de I/O

Utilizar el registro contador TMRO

Programar el PRESCALER

Programar un interrupt

Utilizar el Power Down Mode

Requisitos: Nociones de electronica digital

Contenidos: Las puertas A y B

Estadios de saluda de los I/O

El registro contador TMRO

El prescaler

El interrupt

El power Down Mode (sleep)

Page 72: DL 3155M24 SPA

Página blanca

Page 73: DL 3155M24 SPA

4.1 Las puertas A y B

El PIC16F84 contiene un total de 13 lineas de input/Output organizadas en dos puertas llamadas puerta A ypuerta B. La puerta A contiene 5 lineas en configuraciòn sea como entradas que como salidas identificadascon las siglas: RA0, RA1, RA2, RA3, RA4,. La puerta B dispone de 8 lineas esas tambièn en configuraciòn sea como entradas que como salidasidentificadas con las siglas: RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7.

Fig. 4.1a

Page 74: DL 3155M24 SPA

Fig. 4.1b

La subdivisiòn de las lineas en dos puertas diferentes està dictada por los vìnculos de la arquitectura interiorde el PIC16F84 que preve la gestiòn de los datos con longitud màxima de 8 bit. Para la gestiòn de las lineas de I/O de programa, el PIC contiene dos registros internos para cada puertallamados TRISA y PUERTA para la puerta A y TRISB y PORTB para la puerta B. Los registros TRISA y TRISB, determinan el funcionamiento como entrada o salida de cada una de laslineas, los registros pORTA y PORTB determinan el estado de las lineas en la salida o ponen de nuevo elestado de las lineas en entrada. Cada uno de los bit contenidos en los registros citados corresponden de manera univoca a una linea de I/O.

Por ejemplo el bit 0 de el registro PORTA y de el registro TRISA corresponde a la linea RA0, el bit 1 a lalinea RA1 y asi siempre. Si el bit 0 de el registro TRISA se pone en cero, la linea RA0 serà configurada como linea de salida,entonces el valor de el bit 0 de el registro PORTA determinara el estado lògico de esta linea (0 = 0V, 1 =5V). Si el bit 0 de el registro TRISA se coloca en uno, la linea RA0 serà configurada como una linea de entrada,entonces el estado lògico determinado por el circuito externo relativo a la linea RA0 se reflejara sobre elestado de el bit 0 de el registro PORTA.

Page 75: DL 3155M24 SPA

Hagamos un ejemplo, supongamos de conectar un LED sobre la linea RB0 y un pulsador sobre la linea RB4,las instrucciones que habra que escribir seran:

movlw 00010000B movwf TRIS B

En este caso se pone en cero el bit 0 (linea RB0 como salida) y en 1 el bit 4 (linea RB4 como entrada). Serecuerda que en la representaciòn en binomio de el assembler el bit hacia la derecha corresponde a el bit quetiene un significado menor es decir a el bit 0. Para prender el lED se tendra que escribir la siguiente instrucciòn:

bsf PORTB,0

Para apagarlo:

bcf PORTB,0

Para leer el estado de el pulsador o botòn conectado con la linea RB4:

btfss PORTB,4 goto PulsanteOn goto PulsanteOff

Page 76: DL 3155M24 SPA

4.2 Estadios de salida de las lineas de I/O

Para hacer que los PIC sean màs versàtiles cuando realizan las diferentes aplicaciones, la Microchip hadesarrollado diferentes tipos de estados de salida para las lineas de I/O. Existen entonces grupos de pin cuyaconducta es se diferencia de poco respecto a otros grupos. Conociendo mejor el funcionamiento de los diferentes estadios de salida se podran aprovechar suscaracteristicas para poder optimizar el uso en las diferentes aplicaciones.

Stadio de salida de las lineas RA0, RA1, RA2 y RA3 (Figura 4.2)

Fig. 4.2

Como se dijo anteriormente, la configuraciòn de una linea como entrada o como salida depende de elestado de los bit en el registro TRISA para la puerta A y TRISB para la puerta B. Pongamos como ejemplo la linea RA0 y analizemos el funcionamiento de es estadio de salida seacuando la linea funciona como entrada, que como salida.

Funcionamiento como entradaPara configurar la linea RA0 como entrada, debemos plantear el bit 0 de el registro TRISA 1 con lainstrucciòn:

bsf TRISA,0

Esto determina una conmutaciòn en 1 de el estado lògico de el flip - flop de el tipo D - latchindicado en la Figura 4.2 con el nombre TRIS latch. Para cada linea de I/O existe un flip - flop donde el estado dipende muy de cerca a el estado lògicode el correspondiente bit en el registro TRIS.

Page 77: DL 3155M24 SPA

La salida Q de el TRIS latch està conectada en la entrada de una puerta lògica OR. Esto significaque, no importa que valor tenga la otra entrada, la salida de la puerta OR tendra siempre el valor 1visto que una de las dos entradas vale 1. En esta condiciòn el transistor P no conduce y mantiene lalinea RA0 desconectada de la tensiòn positiva de alimentaciòn. De la misma forma la salida negada de el TRIS latch se encuentra conectada en la entrada de unapuerta AND entonces la salida de esta valdra siempre 0. En esta condiciòn tambièn el transistor Nno conduce manteniendo la linea RA0 desconectada de la tierra. El estado lògico de la linea RA0depende solo de el circuito externo con quien se encuentra conectado. Aplicando una tensiòn de 0V o 5V a el pin RA0, serà posible leer el valor utilizando el bloqueo dela entrada representado por el TTL input buffer y por el latch.

Funcionamiento como salidaPara realizar la configuraciòn la linea RA0 como salida, necesita metter en 0 el bit 0 de el registroTRISA con la instrucciòn:

bcf TRISA,0

Este determina la conmutaciòn en 0 de la salida Q de el TRIS latch y en uno de la salida Q negada.

En este estado el valor presente en las salidas de las puertas OR y AND depende solo de el estadode Q negado de el Data Latch. Como para el TRIS latch, tambièn el Data Latch depende de el estado de un bit en un registro, enparticular de el registro PUERTA. Su salida negada es enviada a la entrada de las dos puertaslògicas OR y AND es decir directamente en la base de los transistores P y N. Si colocamos en 0 el bit 0 de el registro PORTA con la instrucciòn: se habra la conducciòn de el transistor N logrando poner en cero la linea RA0. Si en vèz colocamos en 1 el bit 0 con la instrucciòn:

bcf PORTA,0

se lograra la conducciòn de el transistor P colocando en 5V la linea RA0. En esta condiciòn es siempre posible volver a leer el valor enviado sobre la linea a travèz de elcircuito de entrada.

Estadio de salida de la linea RA4Hagamos en este momento el analisis de el funcionamiento de el estadio de la linea RA4 que sedistingue de todas las otras lineas de I/O ya que utilizan el mismo pin de el PIC16F84 con el TOCKIque veremos màs adelante. En la figura 4.3 se representa el esquema en bloques de el estadio de la salida extraìdo de la datasheep Microchip:

Page 78: DL 3155M24 SPA

Fig. 4.3

La lògica de conmutaciòn es identica a el grupo de lineas RA0 - RA3 con excepciòn de la flta de lapuerta OR y de el transistor P, es decir de toda la cadena que permite de conectar a el positivo de lalinea RA4. Esto significa, en terminos pràcticos, que cuando la linea RA4 se programa en salida, en verdad no seconecta con el positivo sino se queda desconectada. Este tipo de configuraciòn es llamada con el conector abierto y es una aplicaciòn util donde esnecesario usar el mismo conector con màs pin de salida y es necesario colocar en alta impedenza unalinea de salida sin tener que volverla a programar como linea de entrada. Si queremos estar seguros que la linea RA4 va en 1 tendremos que conectar externamente unaresistencia de pull - up, es decir una resistencia conectada con el positivo de la alimentaciòn. Veremosa continuaciòn como se utiliza la linea indicada en el esquema con TMR0 clock input.

Estadio de salida de las lineas RB0, RB1, RB2, RB3Tambièn para este grupo de lineas premanece sin cambiar la lògica de conmutaciòn. Las mismas poseen ademàs un circuito de week pull - up que se puede activar cuando las lineas seprpgraman como entradas. Como entradas en efecto, como ya se ha explicado, las lineas se desconectan completamente de el PICya que sea el transistor P que el transistor N son abiertos. El estado de las lineas depende entonces solo de el circuito externo. Si este circuito es de el tipo conrecogedor abierto o de manera màs simple se encuentra formado por un simple pulsador que, cuandose presiona, conecta a la tierra la linea de I/O, es necesario introducir una resistencia de pull - up haciael positivo para estar seguros que cuando se suelte el pulsador se logre una condiciòn lògica en 1estable sobre la linea de entrada. El circuito de weak pull - up permite de evitar la utilizaciòn de resistencias de pull - up y puede seractivada o desactivada actuando sobre el bit RBPU de el registro OPTION.

Page 79: DL 3155M24 SPA

En la Figura 24.4.4 se representa el esquema en bloques de el estadio de salida.

Fig. 4.4

La sola linea RB0 ademàs, presenta una caracteristica muy importante. Ella, cuando se encuentra configurada como linea de entrada, puede generar, en correspondencia deun cambio de estado lògico, un interrupt, es decir una interrupciòn inmediata de el programa que seejecuta y una llamada a una subroutine especial llamada interrupt handler que veremos màs adelante.

Estadio de salida de las lineas RB4, RB5, RB6, RB7El circuito de comunicaciòn de este grupo de lineas es igual a el de RB0, RB3 (Figura 4.5). Estas lineas disponen tambièn de el circuito de weak pull - up. Ademàs respecto a las lineas RB0 - RB3 tienen un estadio que logra observar las variaciones deestado en cualquier linea y de generar un interropt.

Page 80: DL 3155M24 SPA

Fig. 4.5

Page 81: DL 3155M24 SPA

4.3 El registro contador TMR0

El registro TMR0 es un contador, es decir un particular tipo de registro donde el contenido de el mismo esaumentado con un ritmo regular y programado directamente por el hardware de el PIC. En otras palabras, con la diferencia de los demàs registros, el TMR0 no mantiene igual el valor grabado,pero lo aumenta contenuamente, si por ejemplo se escribe el valor 10 con las siguientes instrucciones:

movlw 10 movwf TMR0

Despues de un tiempo de màs o menos cuatro ciclos de la màquina, el contenido de el registro comienza aaumentar a 11, 12, 13 y asi en adelante con un ritmo constante y independiente de la ejecuciòn de el resto deel programa. Si, por ejemplo, despues de haber introducido un valor en el registro TMR0, realizaremos un loop infinito:

movlw 10 movwf TMR0 loop goto loop

El registro TMR0 es aumentado igualmente por el hardware interno en el PIC al mismo tiempo que el looprealiza la ejecuciòn. Una vez que se alcanza el valor 255 el registro TMR0 se pone en cero automàticamente comenzando denuevo a contar no desde el valor en origen colocado pero desde el cero. La frecuencia para contar es directamente proporcional a la frecuencia de clock aplicada a el chip y puedeser cambiada programando en la mejor manera algunos bit de configuraciòn. En la Figura 4.6 se encuentran los bloques internos de el PIC que determinan el funcionamiento de elregistro TMR0.

Fig. 4.6

Page 82: DL 3155M24 SPA

Los bloques Fosc/4 y T0Cki representan las dos fuentes disponibles de el señal para el contador TMR0. Fosc/4 es un señal generado internamente en el PIC de el circuito de el clock y es igual a la frecuencia declock dividida por cuatro. T0CKI es un señal generado de un eventual circuito externo y aplicado en el PIN T0CKI correspondiente deel pin 3 en el PIC16F84.

Los bloques T0CS y PSA son dos conmutadores de señal en cuya salida se presenta uno de los dos señalesen entrada en base a el valor de los bit T0CS y PSA de el registro OPTION. El bloque PRESCALER es un divisor programable cuyo funcionamiento serà explicado màs adelante. Veamos en pràctica como es posible actuar sobre estos bloques para obtener diferentes modalidades paracontar en el registro TMR0.

Comenzamos programando el bit T0CS en 0 y PSA en 1. Como hemos ya dicho antes, la fracuencia Fosc/4 es de un cuarto de la frecuencia de un clock. Utilizando un cuarzo de 4MHz se obtiene una Fosc/4 de 1 MHz. Esta frecuencia es enviada directamente enel registro TMR0 sin cambiar para nada. El ritmo de la cuenta que se obtiene es igual a 1 millon deaumentos por cada segundo de el valor presente en TMR0. Hagamos la hipotesis de cambiar el estado de el bit T0CS de 0 a 1. Esta vèz sera el señal aplicado a el pinTOCKI de el PIC que sera mandado directamente en el contador TMR0 determinando la frecuencia de lacuenta. Aplicando por ejemplo a este pin una frecuencia igual a 100 Hz se obtiene una frecuencia de cuentade 100 aumentos por cada segundo.

La presencia de la puerta lògica XOR en la entrada TOCKI de el PIC permite de determinar a travèz de el bitT0SE de el registro OPTION si el contador TMR0 debe ser aumentado segun la bajada (T0SE = 1) o elaumento de el señal aplicado desde el exterior.

Page 83: DL 3155M24 SPA

4.4 El prescaler

El ultimo bloque que hay que analizar todavìa para poder utilizar completamente el registro TMR0 es elPRESCALER. Si se configura el bit PSA de el registro OPTION en 0 se envia a el registro TMR0 el señal en la salida de elPRESCALER. El PRESCALER està formado en pràctica por un divisor programable con 8 bit que se utilizara cuando lafrecuencia de la cuenta enviada a el contador TMR0 sea muy grande para nuestras intenciones. En el ejemplo de el paragrafo anterior hemos visto que utilizando un quarzo de 4 MHz se puede obtener unafrecuencia de cuenta de 1 MHz que para muchas aplicaciones es muy grande. Utilizando el PRESCALER podemos dividir todavìa màs la frecuencia Fosc/4 configurando en una mamerajusta los bit PS0. PS1 y PS2 de el registro segun la tabla.

Fig. 4.7

Probemos ahora a escribir la subroutine para introducir un retrazo de un segundo utilizando el registroTMR0. Debemos antes que nada programar el PRESCALER para obtener una frecuencia de cuenta convenienteintroduciendo las siguientes instrucciones al principio de el programa:

movlw 00000100B movwf OPTION_REG

Page 84: DL 3155M24 SPA

En otras palabras debemos programar los bit T0CS en 0 para elegir como fuente de la cuenta el clock de elPIC, el bit PSA en 0 para asignar el PRESCALER a el registro TRM0 en vèz de el Watch Dog Timer ( queveremos màs adelante) y los bit de configuraciòn de el PRESCALER en 100 para obtener una frecuencia dedivisiòn de:

1 : 32

La frecuencia de cuenta que se obtiene en el TRM0 serà:

Fosc = 1MHz/32 = 31.250 Hz

La subroutine Delay debera utilizar muy bien el registro TMR0 para obtener un retraso de un segundo.Veamos como. Las primeras instrucciones que se realizan en la Delay son:

Delay movlw 6 movwf TMR0 movlw 125 movwf Count

Las primeras dos graban en TMR0 el valor 6 de manera que el registro TMR0 alcanze el cero despues de250 cuentas (256 - 6 = 250) se obtiene de esta manera una frecuencia de pases por el cero de TMR0 igual a:

31.250/250 = 125 Hz

Las instrucciones siguientes graban en un registro a 8 bit (Count) el valor 125 de manera que, disminuyendoeste registro de uno por cada vèz que pasa por cero TMR0, se obtenga una fracuencia de pase por el cero deel registro Count que vale:

125/125 = 1Hz

Las instrucciones introducidas en el loop Delay Loop se ocupan entonces de controlar si TMR0 haalcanzado el cero. Cuando Count alcanzara el tambièn cero entonces habra pasado un segundo y la subroutine podra regresaren el programa que hace la llamada.

DelayLoop movf TMR0,W btfss STATUS,Z goto DelayLoop movlw 6 movwf TMR0 decfsz Count,1 goto DelayLoop return

Page 85: DL 3155M24 SPA

4.5 El interrupt

El interrupt es una particular caràcteristica de los PIC que permiten de interceptar un acontecimientoexterno, interrumpir por algunos momentos el programa que se està realizando, efectuar una parte de elprograma especializado para la gestiòn de el acontecimiento que se presenta y volver a comenzar laejecuciòn de el programa principal.

Es claro que es mejor controlar un acontecimiento con un interrupt en vèz que controlar ciclicamente unacontecimiento con el programa principal. Gran parte de los aspectos que tienen que ver con la gestiòn de el interrupt son tratados ademàs directamentepor el hardware interno de el PIC donde el tiempo de la respuesta para el acontecimiento es pràcticamenteinmediato.

Fig. 4.8

Tipos de acontecimientos y bit de habilitaciòn El PIC16F84 es capaz de gestir en interrupt cuatro acontecimientos diferentes: 1. El cambio de estado sobre la linea RB0 (External interrupt RB0/INT pin.) 2. El final de la cuenta de el registro TMR0 (TMR0 overflow interrupt). 3. El cambio de estado sobre una de las lineas de RB4 y RB7 (PORTB change interrupts). 4. El final de la escritura sobre una zona EEPROM (EEPROM write complete interrupt).

El interrupt sobre cada uno de estos acontecimientos puede ser habilitado o no habilitado,independientemente de los otros, actuando sobre los siguientes bit de el registro INTCON:

Page 86: DL 3155M24 SPA

Fig. 4.9

INTE (bit 4) si este bit es colocado en 1 se habilita el interrupt sobre el cambio de estado sobre la lineaRB0

T0IE (bit 5) si este bit es colocado en 1 se habilita el interrupt en el final de la cuenta de el registroTMR0

RBIE (bit 3) si este bit es colocado en 1 se habilita el interrupt en el cambio de estado sobre una de laslineas de RB4 a RB7

EEIE (bit 6) si este bit es colocado en 1 se habilita el interrupt al final de la escritura sobre una zonaEEPROM.

Existe ademàs un bit de habilitaciòn general de los interrupt que debe ser settato el tambièn en uno es decirel bit GIE (Global Interrupt Enable bit) colocado sobre el bit 7 de el registro INTCON.

Page 87: DL 3155M24 SPA

Interrupt vector ed Interrupt handlerCualquiera sea el acontecimiento habilitado, cuando se presenta el PIC interrumpe la ejecuciòn de elprograma que se està efectuando, graba automàticamente en el STACK el valor de ese momento de elPROGRAM COUNTER y salta a la intrucciòn presente en la zona de memoria 0004H llamadaInterrupt vector (vector de interrupt). Es desde este momento que debemos introducir la subroutine nuestra que sirve para la gestiòn de elinterrupt llamada Interrupt Handler (controlador de interrupt). Si se pueden habilitar màs interrupt, entre las primeras tareas de el interrupt handler està verificarcual, entre los acontecimientos habilitados, ha generado el interrupt y la ejecuciòn de la parte de elprograma respectivo.Interrupt flagDado que cualquiera de los interrupt genera una llamada en la zona 04H, en el registro INTCON estànpresentes los flag que indica cual es el acontecimiento que ha generado el interrupt:

INTF (bit 1) Si vale 1 el interrupt ha sido generado por el cambio de estado sobre la linea RB0.T0IF (bit 2) Si vale 1 el interrupt ha sido generado al final de la cuenta de el timer TMR0.RBIF (bit 0) Si vale 1 el interrupt ha sido generado por el cambio de estado de una de las lineasdesde RB4 a RB7.

Como se puede observar para el interrupt en el final de la escritura en EEPROM no està previstoningun flag de señalaciòn que indique a el interrupt handler que tiene que considerar que el interrupthaya sido generado por este acontecimiento cuando todos los tres flag antes mencionados valgan 0. Importante : Una vèz que se observa cual flag es activo, el interrupt handler debe ponerlo en cerosino no se generara màs nunca el interrupt correpondiente.

Regreso desde un interrupt handlerCuando se genera un interrupt el PIC quita la habilitaciòn automàticamente de el bit GIE (GlobalInterrupt Enable) de el registro INTCON de manera que se quite la habilitaciòn de todos los interruptmientras es ya en ejecuciòn un interrupt handler. Para poder regresar a el programa principal y volver a colocar en 1 este bit se necesita utilizar lainstrucciòn RETFIE.

Page 88: DL 3155M24 SPA

4.6 El power down mode

El Power Down Mode o Sleep Mode es un particular estado de funcionamiento de el PIC utilizando parareducir el consumo de la corriente en los momentos donde el PIC no se utiliza porque espera unacontecimiento externo.

L’istruzione SLEEP

La instrucciòn SLEEP se utiliza para colocar el PIC en Power Down Mode y reducir de consecuencia lacorriente absorbida que pasara desde màs o menos 2m A (5 volt y colck de 4 MHz) hasta màs o menos 2 ?A.

Para entrar en Power Down Mode basta introducir SLEEP en un punto cualquiera de nuestro programa.Cualquiera de las instrucciones presente despues de la SLEEP no sera realizada por el PIC que terminara eneste punto su ejecuciòn, apagara todos los circuitos internos, ecepto los necesarios para mantener el estadode las puertas de I/O (estado lògico alto, bajo o alta impedenza) y para observar las condiciones derenovaciòn.

Para reducir el consumo de corriente es este estado, no deber estar presentes circuitos conectados con laslineas de salida de el PIC que absorben corriente. O mejor estos circuitos deben ser proyectados de maneraque se puedan limitar que estos circuitos absorban en las condiciones de Power Down. Otro cosa importante que recomienda la Microchip es conectar a el positivo (Vdd) o al negativo (Vss) dealimentaciòn todas las lineas en alta impedenza no utilizadas incluyendo la linea RA4 / T0CKI (pin 3).

Para despertar de su sueño el PIC pueden ser utilizadas diferentes tècnicas:

Reset de el PIC poniendo en 0 el pin MCLR (pin 4)Timeout de el timer de el Watchdog (si està habilitado)Cuando existe una situaciòn de interruptt (interrupt desde el pin RB0 / INT, cambio de estado sobre lapuerta B, termina la operaciòn de escritura sobre EEPROM).

En los casos 1 y 2 el PIC se pone en reset y la ejecuciòn retomada desde la zona 0. En el caso 3 el PIC se porta como en la gestiòn normal de un interrupt efectuando de primero la interrupthandler y entonces comenzando de nuevo la ejecuciòn despues de la instrucciòn SLEEP. Porque el PIC seadespertado por un interrupt deben ser habilitados los flag de el registro INTCON.

Los bit TO y PD de el registro STATUS pueden ser utilizados cuando se despierta para determinar si lacausa de el despierte es la simple operaciòn de prender el PIC, el reset o tabièn se debe a que llega uninterrupt.

Page 89: DL 3155M24 SPA

Unidad N.1: Programación de el PIC

Objectivos:

Realizar un simple cicuito de prueba

Escribir y redactar un programa en Assembler

Transferir el programa desde PC a el Pic a travèz de el softwareDL3155M24SW

Requisitos:

Adquisiciòn de la guìa teorica

Instrumentos: PC con sistema de operaciòn WINDOWS 95 o superior

Redactor Assembler MPASWIN.EXE Microchip

Software DL 3155M24SW

Cable de comunicaciòn (puerta paralela)

Set o conjunto de cables pequeños

Page 90: DL 3155M24 SPA

Página blanca

Page 91: DL 3155M24 SPA

Programación de el PIC

Lista de componentes

• R1, R2, R4 = 10kΩ - 1/4W - 5% • R3 = 220Ω - 1/4W - 5% • R5, R10 = 4.7kΩ - 1/4W - 5% • R6, R8 = 1kΩ - 1/4W - 5% • R7, R15, R14, R11 = 10kΩ - 1/4W - 5% • R9, R12, R16 = 1.5kΩ - 1/4W - 5% • R17, R13 = 100Ω - 1/4W - 5% • R18 = 470Ω - 1/4W - 5% • C1 = 47mF - Tantalio • C2 = 100nF - Estratos multiplo • C3, C4 = 22pF - Ceramico • C5, C6, C7 = 100nF - Estratos multiplo • N1 = PIC16F84 • V1, V3 = Diodos LED rojos • R/W CHECK = Diodo LED verde • V2 = 7812 • V4, V6 = BC557 • V5, V7, V8 = BC337 • X1 = Conector 25 polos • G1 = Cuarzo 4MHz • RESET, TEXT = Pulsadores NA

Esquema topográfico

Fig. 1.1

Page 92: DL 3155M24 SPA

Fig. 1.2

Programa UD1prg1;====================================================================== ; DL3155M24 DE LORENZO ROZZANO (MI) ITALY ; LED ;====================================================================== TITLE 'UD1prg1' PROCESSOR 16F84 ; Programa que ha sido escrito para micro 16F84 RADIX DEC ; Los numeros sin nota ; son decimales INCLUDE "P16F84.INC" ; Incluir el file P16F84.INC ;...................................................................... LED EQU 0 ; LED es equivalente a 0 ORG 0CH ; Zona datos en el FILE REGISTER ; desde la direcciòn 0CH Count RES 2 ; Reserva 2 byte ala Label Count ORG 00H ; Introduce las instrucciones ; EEPROM comenzando por 00H ;...................................................................... bsf STATUS,RP0 ; Pone en 1 el quinto bit de el file ; register STATUS movlw 00011111B ; Carga en el acumulador (W) el ; valor constante 00011111B movwf TRISB ; Copia el contenido de W en el ; registro TRISB movlw 11111110B ; Carga 11111110B en W movwf TRISA ; Copia W en el registro TRISA bcf STATUS,RP0 ; Pone en cero el quinto bit de el file ; register STATUS bsf PORTA,LED ; Pone en 1 (accensione LED) RA0 ; de el registro PORTA ;......................................................................

Page 93: DL 3155M24 SPA

MainLoop ; Ciclo intermitente LED call Delay ; Llamada a la sobroutine Delay btfsc PORTA,LED ; Controla si el LED se encuentra prendido o ; apagado goto SetToZero ; Si es si, salta en la label SetToZero bsf PORTA,LED ; Prendido LED goto MainLoop ; Salta en la label MainLoop ;...................................................................... SetToZero ; Ciclo de apagado LED bcf PORTA,LED ; Pone en cero (apagado LED) RB0 ; de el registro PORTB goto MainLoop ;Salta en la label MainLoop ;...................................................................... Delay ; Ciclo de retraso clrf Count ; Pone en cero las dos zonas de RAM clrf Count+1 ; rreservadas con la instrucciòn ; Count RES 2 ;...................................................................... DelayLoop ; Ciclo de retraso decfsz Count,1 ; Disminuye el contenido de Count, ; salta si il valor alcanzado es 0 goto DelayLoop ; Salta en la label DelayLoop decfsz Count+1,1 ; Disminuye el contenido de Count+1, ; salta si el valor alcanzado es 0 goto DelayLoop ; Salta en la label DelayLoop return ; salida de la routine de retraso ; y salto a la instrucciòn siguiente ; de la Call Delay ;...................................................................... END ; Final de el programa

Page 94: DL 3155M24 SPA

EXPERIMENTACIÓNintroducir el Modulo 24 en la consolle y colocar en ON el interruptor general.Conectar, a travèz de un cable para la conexiòn, la puerta que se encuentra de manera paralela a elModulo 24 de el PC;Prender el PC y crear una directory de trabajo: C : \ DL3155M24;Preparar un Editor ASCII (Note Pad, Word, Word Perfect en un ambiente WINDOWS o Edit en MS -DOS);9) Escribir el siguiente programa: UD1prg1. ASMsalvar el programa en un formato txt en la directory para el trabajo con el nombre UD1prg1. ASM;Copiar el software MPASNWIN. EXE (Microchips), para redactar el programa source UD1 prg 1. ASM,en la DIR: C\ DL3155M24;Copiar el file P16F84. INC y la guìa de el redactor en la DIR : C \ DL3155M24; NOTA: La Microchip es disponible en la direcciòn http://www.microchip.com para dar el proprio assemblerMPASM en doble versiòn para el sistema de operaciòn Microchips Windows 3.x/ 95 / 98 y para elambiente MS - DOS.Redactar el programa UD1 prg1. ASM de la siguiente manera: dejar el programa MPASNWIN. EXE,elegir el procesador 16F84, RADIX (Default), WARNING LEVEL (Default), HEX OUTPUT (Default),GENERATED FILES (Error File, List File, Cross Reference File), SAVE SETTINGS ON EXIT(Habilitado), cargar el file fuente UD1 prg1. ASM y ensamblar el programa; NOTA: para otras informaciones consultar las instrucciones suministradas por la Microchip.El ensamblador crea en la DRR : C\ DL3155M24 los siguientes file: UD1 prg1. HEX, UD1 prg1. LST,UD1 prg1. ERR, UD1 prg1. COD y el documento de el texto UD1 prg1. XRF;Conectar, a travèz de cables pequeños, el circuito como en la Figura. 1.1;Instalar y lanzar el programa DL3155M24SW;Cargar (LOAD) el programa UD1 prg 1. HEX contenido en la DIR : C\ DL3155M24Elegir en la ventana en la parte alta en la izquierda con la correspondiente flecha el procesador 16F84, lapuerta paralela utilizada (LPT1 o LPT2), Oscillator (XT), Protection (OFF), Programme (CODE; FUSES;EEPROM);Programar el procesador presionando la tecla PROGRAM: mientras se efectua el transferimento de losdatos el LED R / W CHECK indicarà el correcto funcionamiento con algunas intermitencias,Mientras se efectua la programaciòn aparecerà la ventana FUSES STATE que indicarà el estado de losfusibles: dejar inalterables los paltiamientos y cerrar la ventana;Una vèz que se ha terminado la programaciòn presionar sobre VERIFY para comparar el file contenido enel microprocesador con aquel elegido con el comando LOAD: si se encuentran algunos problemas elprogramador genera un mensaje de error. En este ultimo caso hay que borrar a travèz de la tecla o el botònERASE el PIC y volver a programar el mismo;Remover las conexiones;Conectar el circuito como en la Fig. 1. 2 y observar que el LED V1 efectua intermitencias que indican queel programa se està efectuando de manera correcta;

Remover todas las conexiones.

Page 95: DL 3155M24 SPA

Unidad N.2: Puertas I/O, Routine de retraso, EEPROM

Objectivos:

Comienzo y gestiòn de las puertas I/O y utlilizaciòn de los registros

Gestiòn de las rutinas de retraso

Pulsador o boton antirebote

Gestiòn EEPROM

Requisitos:

Adquisiciòn de la guìa teòrica

Adquisiciòn de la U. D. 1 (Guìa para las Operaciones)

Instrumentos: PC con sistema de operaciòn WINDOWS 95 o superior

Redactor Assembler MPASWIN. EXE (Microchip)

Software DL 3155M24SW

Cable de comunicaciòn (puerta paralela)

Set o conjutos de cables pequeños (cablecitos).

Page 96: DL 3155M24 SPA

Página blanca

Page 97: DL 3155M24 SPA

Puertas I/O - Routine de retraso, EEPROM

Esquema eléctrico

Fig. 2.1a

Fig. 2.1.b

Page 98: DL 3155M24 SPA

Lista de componentes

RS1 = Red resistiva SIL 330Ω - 1/4W - 2% - 9 pin H0, H1, H2, H3, H4, H5, H6, H7 = diodos LED rojos S0, S1, S2, S3 = Pulsadores NA S4, S5, S6, S7 = desviadores con deslize

Esquema topográfico

Fig. 2.2a (puertas I/O - Routine de retraso)

Page 99: DL 3155M24 SPA

Fig. 2.2b (Gestiòn EEPROM)

Page 100: DL 3155M24 SPA

Programa UD2prg1 ;====================================================================== ; DL3155M24 DE LORENZO ROZZANO (MI) ITALY ; Puertas I/O ;====================================================================== TITLE ‘UD2prg1’ PROCESSOR 16F84 RADIX DEC INCLUDE “P16F84.INC” LIST F=INHX8M ;................................................................ STAT EQU 03H PORTA EQU 05H PORTB EQU 06H INTCON EQU 0BH TR_A EQU 85H TR_B EQU 86H ;................................................................ #define LED0 PORTB,0 ;................................................................ ORG 0 goto Start nop nop nop goto Interp ;................................................................ Start bsf STAT,5 movlw b’0010' movwf TR_A movlw b’00000000' movwf TR_B clrf INTCON bcf STAT,5 clrf PORTA clrf PORTB bsf LED0 ;................................................................ Main clrwdt goto Main ;................................................................ Interp retfie ;................................................................ END

Page 101: DL 3155M24 SPA

Programa UD2prg2

;;====================================================================== ; DL3155M24 DE LORENZO ROZZANO (MI) ITALY ; ; ROUTINE DE RETRASO EJEMPLO 1 ;====================================================================== TITLE ‘UD2prg2’ PROCESSOR 16F84 RADIX DEC INCLUDE “P16F84.INC” ;................................................................ STAT EQU 03H PORTA EQU 05H PORTB EQU 06H INTCON EQU 0BH TR_A EQU 85H TR_B EQU 86H FR01 EQU 0CH FR02 EQU 0DH FR03 EQU 0EH FR04 EQU 0FH ;................................................................ #define LED0 PORTB,0 #define LED1 PORTB,1 ;................................................................ ORG 0 goto Start nop nop nop goto Interp ;................................................................ Delay movlw .20 movwf FR01 movlw .177 Del0 movwf FR02 Del1 clrwdt nop decfsz FR02 goto Del1 decfsz FR01 goto Del0 return ;................................................................ Start bsf STAT,5 movlw b’0010' movwf TR_A movlw b’00000000' movwf TR_B clrf INTCON bcf STAT,5 clrf PORTA clrf PORTB bsf LED0 ;................................................................

Page 102: DL 3155M24 SPA

movlw .5 movwf FR04 Rit1 movlw .50 movwf FR03 Rit2 call Delay decfsz FR03 goto Rit2 decfsz FR04 goto Rit1 bsf LED1 Main clrwdt goto Main ;................................................................ Interp retfie ;................................................................ END

Programa UD2prg3 ;======================================================================

; DL3155M24 DE LORENZO ROZZANO (MI) ITALY ; ; ROUTINE DE RETRASO EJEMPLO 2 ;================================================================ TITLE ‘UD2prg3’ PROCESSOR 16F84 RADIX DEC INCLUDE “P16F84.INC” ;................................................................ RTCC EQU 01H STAT EQU 03H PORTA EQU 05H PORTB EQU 06H INTCON EQU 0BH TR_A EQU 85H TR_B EQU 86H OPTIO EQU 81H FR01 EQU 0CH FR02 EQU 0DH FR03 EQU 0EH ;................................................................ ORG 0 goto Start nop nop nop goto Interp ;................................................................ Delay clrwdt movf RTCC,0 SKPZ goto Delay movlw .128 movwf RTCC return

Page 103: DL 3155M24 SPA

;................................................................ Start bsf STAT,5 movlw b’0010' movwf TR_A movlw b’00000000' movwf TR_B clrf INTCON movlw b’11000110' movwf OPTIO bcf STAT,5 clrf PORTA clrf PORTB ;................................................................ movlw .128 movwf RTCC Rit1 movlw .50 movwf FR03 Rit2 call Delay decfsz FR03 goto Rit2 movlw b’00000001' xorwf PORTB,1 goto Rit1 ;................................................................ Interp retfie ;................................................................ END

Programa UD2prg4 ;====================================================================== ; DL3155M24 DE LORENZO ROZZANO (MI) ITALY ; ; PULSADOR ANTIREBOTE ;================================================================ TITLE ‘UD2prg4’ PROCESSOR 16F84 RADIX DEC INCLUDE “P16F84.INC” ;................................................................ RTCC EQU 01H STAT EQU 03H PORTA EQU 05H PORTB EQU 06H INTCON EQU 0BH TR_A EQU 85H TR_B EQU 86H OPTIO EQU 81H FR01 EQU 0CH FR02 EQU 0DH FR03 EQU 0EH ;................................................................ #define LED0 PORTB,0 #define P2 PORTA,1 ;................................................................ ORG 0 goto Start

Page 104: DL 3155M24 SPA

nop nop nop goto Interp ;................................................................ Dela2M bcf FR03,0 bsf FR03,1 Waims clrwdt btfsc P2 bsf FR03,0 btfss P2 bcf FR03,1 movf RTCC,0 SKPZ goto Waims movlw .128 movwf RTCC return ;................................................................ Start bsf STAT,5 movlw b’0010' movwf TR_A movlw b’00000000' movwf TR_B clrf INTCON movlw b’11000110' movwf OPTIO bcf STAT,5 clrf PORTA clrf PORTB movlw .128 movwf RTCC ;................................................................ Main call Dela2M btfss FR03,0 goto Accend btfsc FR03,1 goto Spegni goto Main Accend bsf LED0 goto Main Spegni bcf LED0 goto Main ;................................................................ Interp retfie ;................................................................ END

Programa UD2prg5 ;====================================================================== ; DL3155M24 DE LORENZO ROZZANO (MI) ITALY ; ; GESTION EEPROM ;================================================================ TITLE ‘UD2prg5’ PROCESSOR 16F84

Page 105: DL 3155M24 SPA

RADIX DEC INCLUDE “P16F84.INC” ;................................................................ RTCC EQU 01H PCL EQU 02H STAT EQU 03H PORTA EQU 05H PORTB EQU 06H EDATA EQU 08H EADR EQU 09H ECON1 EQU 88H ECON2 EQU 89H INTCON EQU 0BH TR_A EQU 85H TR_B EQU 86H OPTIO EQU 81H ;................................................................ FR01 EQU 0CH FR02 EQU 0DH FR03 EQU 0EH ;................................................................ #define P1 PORTB,7 #define P2 PORTB,6 #define P3 PORTB,5 #define P4 PORTB,4 ;................................................................ ORG 0 goto Start nop nop nop goto Interp ;................................................................ Leggi clrf EADR bsf STAT,5 bsf ECON1,0 bcf STAT,5 nop movf EDATA,0 movwf PORTB return ;................................................................ Delay bcf FR01,7 bcf FR01,6 bcf FR01,5 bcf FR01,4 Lpdel clrwdt btfsc P1 bsf FR01,7 btfsc P2 bsf FR01,6 btfsc P3 bsf FR01,5 btfsc P4 bsf FR01,4 movf RTCC,0 SKPZ

Page 106: DL 3155M24 SPA

goto Lpdel movlw .128 movwf RTCC return ;................................................................ Memo clrf EADR movf PORTB,0 movwf EDATA bsf STAT,5 bsf ECON1,2 movlw 55H movwf ECON2 movlw 0AAH movwf ECON2 bsf ECON1,1 Lpw1 clrwdt btfss ECON1,4 goto Lpw1 bcf ECON1,4 bcf STAT,5 Ril call Delay btfss P1 goto Ril btfss P2 goto Ril btfss P3 goto Ril btfss P4 goto Ril goto Main ;................................................................ Start bsf STAT,5 movlw b’0000' movwf TR_A movlw b’11110000' movwf TR_B clrf INTCON movlw b’01000110' movwf OPTIO bcf STAT,5 movlw .128 movwf RTCC movlw b’0000' movwf PORTA call Leggi ;................................................................ Main call Delay btfss FR01,7 goto Puls1 btfss FR01,6 goto Puls2 btfss FR01,5 goto Puls3 btfss FR01,4 goto Puls4 goto Main Puls1 movlw b’11110001'

Page 107: DL 3155M24 SPA

movwf PORTB goto Memo Puls2 movlw b’11110010' movwf PORTB goto Memo Puls3 movlw b’11110100' movwf PORTB goto Memo Puls4 movlw b’11111000' movwf PORTB goto Memo ;................................................................ Interp retfie ;................................................................ END

EXPERIMENTACIÓNintroducir el Modulo 24 en la consolle y colocar en ON el interruptor general;conectar, a travèz de un cable de conexiones, la puerta paralela de el PC a el Modulo 24;Utilizar el PC, escribir los siguientes programas con un editor ASCII e introducir el comentario para cadauna de las rayas o lineas; UD2prg1.ASM UD2prg2.ASM UD2prg3.ASM UD2prg4.ASM UD2prg5.ASMsalvar los programas en formato txt en la directory de el trabajo con los nombres UD2 prg1. ASM, UD2prg2. ASM, UD2 prg3. ASM, UD2 prg4. ASM, UD2 prg5. ASMredactar los programas UD2 prg1. ASM, UD2 prg2. ASM, UD2 prg3. ASM, UD2 prg4. ASM, UD2 prg5.ASM;transferir un programa a la vèz en el PIC como se encuentra explicado en la U.D.1;conectar el circuito como en la Fig. 2.2;Observar lo que pasa o mejor dicho los acontecimientos para cada uno de los programas, hacer uncomentario de los resultados y dibujar el diagrama de flujo (flow - chart); NOTA: utilizar la tecla o el botòn de Reset para comenzar de nuevo el programa.

Remover todas las conexiones.

Page 108: DL 3155M24 SPA

Página blanca

Page 109: DL 3155M24 SPA

Unidad N.3: Teclado de matriz 4x4

Objectivos:

Gestiòn de un teclado de matriz formada por 4 rayas y 4 columnas

Requisitos:

Adquisiciòn de la Guìa Teòrica

Adquisiciòn de las U.D.1 y U.D.2 (Guìa para las operaciones)

Instrumentos: Pc con sistema de operaciòn WINDOWS 95 o superior

Redactor Assembler MPASWIN. EXE (Microchip)

Software DL 3155M24SW

Cable de comunicaciòn (puerta paralela)

Set o conjunto de cables pequeños

Page 110: DL 3155M24 SPA

Página blanca

Page 111: DL 3155M24 SPA

Teclado de matriz 4x4

Esquema eléctrico

Fig. 3.1

Lista de componentes

RS1 = Rete resistiva SIL 330Ω - 1/4W - 2% - 9 pinTECLADO CON MATRIZ CON 16 TECLAS (4X4)

Page 112: DL 3155M24 SPA

Esquema topográfico

Fig. 3.2

Programa UD3prg1;======================================================================; DL3155M24 DE LORENZO ROZZANO (MI) ITALY;; Control de un teclado con matriz 4x4;====================================================================== TITLE ‘UD3prg1’ PROCESSOR 16F84 INCLUDE “P16F84.INC” LIST F=INHX8M;................................................................PORT_B EQU 06PORT_A EQU 05PIC84 EQU 03FF;................................................................Init ORG 0000H MOVLW b’11110000' TRIS PORT_B MOVLW b’00000000' TRIS PORT_A BSF PORT_B,0 BSF PORT_B,1 BSF PORT_B,2 BSF PORT_B,3;................................................................Main BCF PORT_B,0 BTFSS PORT_B,4 MOVLW d’1'

Page 113: DL 3155M24 SPA

BTFSS PORT_B,5 MOVLW d’4' BTFSS PORT_B,6 MOVLW d’7' BTFSS PORT_B,7 MOVLW d’15';................................................................ BSF PORT_B,0 BCF PORT_B,1 BTFSS PORT_B,4 MOVLW d’2' BTFSS PORT_B,5 MOVLW d’5' BTFSS PORT_B,6 MOVLW d’8' BTFSS PORT_B,7 MOVLW d’0';................................................................ BSF PORT_B,1 BCF PORT_B,2 BTFSS PORT_B,4 MOVLW d’3' BTFSS PORT_B,5 MOVLW d’6' BTFSS PORT_B,6 MOVLW d’9' BTFSS PORT_B,7 MOVLW d’14';................................................................ BSF PORT_B,2 BCF PORT_B,3 BTFSS PORT_B,4 MOVLW d’10' BTFSS PORT_B,5 MOVLW d’11' BTFSS PORT_B,6 MOVLW d’12' BTFSS PORT_B,7 MOVLW d’13' BSF PORT_B,3;................................................................ MOVWF PORT_A GOTO Main ORG PIC84 GOTO Init;................................................................

END

EXPERIMENTACIÓNintroducir el Mòdulo 24 en la consolle y colocar en ON el interruptor general;conectar, a travèz de un cable de conexiòn, la puerta paralela de el PC en el Modulo 24;utilizar el PC y escribir el siguiente programa a travèz de un editor ASCII:UD3prg1.ASMsalvar el programa en un formato txt en la directory de trabajo con el nombre UD3prg1.ASM;redactar el programa UD3 prg1. ASM;transferir el programa en el PIC como se encuentra explicado en la U.D.1;conectar el circuito como està representado en la Fig.3.2 y colocar S1 sobre ON;observar los acontecimientos, comentar los resultados y dibujar el diagrama de flujo (flow - chart);

Remover todas las conexiones.

Page 114: DL 3155M24 SPA

Página blanca

Page 115: DL 3155M24 SPA

Unidad N.4: Display

Objectivos:

Gestiòn de un display con 7 segmentos

Gestiòn de dos display en multiplexer

Gestiòn display alfanùmerico LCD

Requisitos:

Adquisiciòn de la Guìa Teòrica

Adquisiciòn de las U.D.1, U.D.2 y U.D.3 (Guìa para las operaciones)

Instrumentos: Pc con sistema WINDOWS 95 o superior

Redactor Assembler MPASWIN. EXE (Microchip)

Software DL 3155M24SW

Cable de comunicaciòn (puerta paralela)

Set o conjunto de cables pequeños

Page 116: DL 3155M24 SPA

Página blanca

Page 117: DL 3155M24 SPA

Display

Esquema eléctrico

Fig. 4.1a (Display con 7 segmentos)

Page 118: DL 3155M24 SPA

Fig. 4.1b (2 display en multiplexer)

Fig. 4.1c (LCD 16x2)

Page 119: DL 3155M24 SPA

Lista de componentes

R1 = 100Ω - 1/4W - 5%R2, R3 = 1kΩ - 1/4W - 5%R4 = 10kΩ - Trimmer con multiplos girosR5 = 470Ω - 1/4W - 5%C1 = 33pF estrato multiploRS1 = Red resistiva DIL 220Ω - 1/4W - 2%V1 = TIL 311V2, V3 = HD1105 Display LED con anodo comùnV4, V5 = BC327Display LCD alfanùmerico dos lineas - 16 letrasS1 = Desviador Esquema topográfico

Fig. 4.2a (Display con 7 segmentos)

Page 120: DL 3155M24 SPA

Fig. 4.2b (2 display en multiplexer)

Fig. 4.2c (LCD 16x2)

Page 121: DL 3155M24 SPA

Programa UD4prg1;======================================================================; DL3155M24 DE LORENZO ROZZANO (MI) ITALY;; GESTION DE UN DISPLAY CON 7 SEGMENTOS;================================================================ TITLE ‘UD4prg1’ PROCESSOR 16F84 RADIX DEC INCLUDE “P16F84.INC”;................................................................RTCC EQU 01HPCL EQU 02HSTAT EQU 03HPORTA EQU 05HPORTB EQU 06HINTCON EQU 0BHTR_A EQU 85HTR_B EQU 86HOPTIO EQU 81H;................................................................FR01 EQU 0CHFR02 EQU 0DH;................................................................ZER_O EQU 003HUNO EQU 09FHDUE EQU 025HTRE EQU 00DHQUATT EQU 099HCINQUE EQU 049HSEI EQU 041HSETTE EQU 01FHOTTO EQU 001HNOVE EQU 009H;................................................................ ORG 0 goto Start nop nop nop goto Interp;................................................................Delay clrwdt movf RTCC,0 SKPZ goto Delay movlw .128 movwf RTCC return;................................................................Displa movf FR02,0 addwf PCL,1 retlw ZER_O retlw UNO retlw DUE retlw TRE retlw QUATT retlw CINQUE retlw SEI retlw SETTE retlw OTTO retlw NOVE;................................................................Start bsf STAT,5 movlw b’0000' movwf TR_A movlw b’00000000' movwf TR_B clrf INTCON movlw b’11000100' movwf OPTIO bcf STAT,5

Page 122: DL 3155M24 SPA

movlw .128 movwf RTCC movlw b’0000' movwf PORTA movlw b’11111111' movwf PORTB;................................................................Main clrf FR02Main1 call Displa movwf PORTB movlw .200 movwf FR01Loop call Delay decfsz FR01 goto Loop incf FR02 movlw .10 xorwf FR02,0 btfss STAT,2 goto Main1 goto Main;................................................................Interp retfie;................................................................END

Programa UD4prg2

;======================================================================; DL3155M24 DE LORENZO ROZZANO (MI) ITALY;; GESTION DE 2 DISPLAY EN MULTIPLEXER;================================================================ TITLE ‘UD4prg2’ PROCESSOR 16F84 RADIX DEC INCLUDE “P16F84.INC” LIST F=INHX8M;................................................................RTCC EQU 01HPCL EQU 02HSTAT EQU 03HPORTA EQU 05HPORTB EQU 06HINTCON EQU 0BHTR_A EQU 85HTR_B EQU 86HOPTIO EQU 81H;................................................................FR01 EQU 0CHFR02 EQU 0DHFR03 EQU 0EH;................................................................#define DISP1 PORTA,0#define DISP2 PORTA,1;................................................................ZER_O EQU 003HUNO EQU 09FHDUE EQU 025HTRE EQU 00DHQUATT EQU 099HCINQUE EQU 049HSEI EQU 041HSETTE EQU 01FHOTTO EQU 001HNOVE EQU 009H;................................................................ ORG 0 goto Start nop nop

Page 123: DL 3155M24 SPA

nop goto Interp;................................................................Delay clrwdt movf RTCC,0 SKPZ goto Delay movlw .128 movwf RTCC return;................................................................Displa addwf PCL,1 retlw ZER_O retlw UNO retlw DUE retlw TRE retlw QUATT retlw CINQUE retlw SEI retlw SETTE retlw OTTO retlw NOVE;................................................................Visual movf FR02,0 call Displa movwf PORTB bcf DISP1 call Delay bsf DISP1 movf FR03,0 call Displa movwf PORTB bcf DISP2 call Delay bsf DISP2 movlw b’11111111' movwf PORTB return;................................................................Start bsf STAT,5 movlw b’0000' movwf TR_A movlw b’00000000' movwf TR_B clrf INTCON movlw b’11000100' movwf OPTIO bcf STAT,5 movlw .128 movwf RTCC movlw b’1111' movwf PORTA movlw b’11111111' movwf PORTB;................................................................Main clrf FR02 movlw .9 movwf FR03Main1 movlw .100 movwf FR01Loop call Visual decfsz FR01 goto Loop incf FR02 decf FR03 movlw .10 xorwf FR02,0 btfss STAT,2 goto Main1 goto Main;................................................................Interp

Page 124: DL 3155M24 SPA

retfie;................................................................

END

Programa UD4prg3;======================================================================; DL3155M24 DE LORENZO ROZZANO (MI) ITALY;; GESTION DE DISPLAY ALFANUMERICO LCD 16x2 ;================================================================ TITLE ‘UD4prg3’ PROCESSOR 16F84 RADIX DEC LIST F=INHX8M;................................................................RTCC EQU 01HPCL EQU 02HSTAT EQU 03HPORTA EQU 05HPORTB EQU 06HEDATA EQU 08HEADR EQU 09HECON1 EQU 88HECON2 EQU 89HINTCON EQU 0BHTR_A EQU 85HTR_B EQU 86HOPTIO EQU 81H;................................................................FR01 EQU 0CHFR02 EQU 0DH;................................................................#define RP0 STAT,5#define CLK PORTA,3#define RW PORTA,2#define RS PORTA,1;................................................................ ORG 0 goto Start ORG 4 retfie;................................................................Delay movlw .20 movwf FR01 movlw .177Del0 movwf FR02Del1 clrwdt nop decfsz FR02 goto Del1 decfsz FR01 goto Del0 return;................................................................Clock2 bcf CLK bsf CLK bcf CLK movlw .50 movwf FR01Delc0 movwf FR02Delc1 nop clrwdt nop decfsz FR02 goto Delc1 decfsz FR01 goto Delc0 return;................................................................Reslcd bcf RW bcf RS

Page 125: DL 3155M24 SPA

movlw 038H movwf PORTB call Clock2 movlw 01H movwf PORTB call Clock2 movlw 0EH movwf PORTB call Clock2 return;................................................................Write movwf PORTB bsf RS call Clock2 bcf RS movlw 06H movwf PORTB call Clock2 return;................................................................Start bsf STAT,5 movlw b’0000' movwf TR_A movlw b’00000000' movwf TR_B clrf INTCON movlw b’01000110' movwf OPTIO bcf STAT,5 movlw .128 movwf RTCC;................................................................Main call Delay call Reslcd movlw ‘D’ call Write movlw ‘L’ call Write movlw ‘3’ call Write movlw ‘1’ call Write movlw ‘5’ call Write movlw ‘5’ call Write movlw ‘M’ call Write movlw ‘2’ call Write movlw ‘4’ call Write movlw ‘ ‘ call Write movlw ‘U’ call Write movlw ‘.’ call Write movlw ‘D’ call Write movlw ‘.’ call Write movlw ‘0’ call Write movlw ‘4’ call Write movlw 0C0H movwf PORTB call Clock2 movlw ‘D’ call Write movlw ‘i’

Page 126: DL 3155M24 SPA

call Write movlw ‘s’ call Write movlw ‘p’ call Write movlw ‘l’ call Write movlw ‘a’ call Write movlw ‘y’ call Write movlw ‘ ‘ call Write movlw ‘L’ call Write movlw ‘C’ call Write movlw ‘D’ call Write movlw ‘ ‘ call Write movlw ‘1’ call Write movlw ‘6’ call Write movlw ‘x’ call Write movlw ‘2’ call WriteLpatt clrwdt goto Lpatt;................................................................ END

EXPERIMENTACIÓNintroducir el Mòdulo 24 en la consolle y colocar en ON el interruptor general;conectar, a travèz de un cable de conexiòn, la puerta paralela de el PC en el Modulo 24;utilizar el PC y escribir los siguientes programas a travèz de un editor ASCII:UD4prg1.ASMUD4prg2.ASMUD4prg3.ASMsalvar el programa en un formato txt en la directory de trabajo con los nombres UD4prg1. ASM, UD4prg2. ASM, UD4 prg3. ASM;Redactar los programas UD4prg1. ASM, UD4 prg2. ASM, UD4 prg3. ASM;Transferir un programa a la vèz en el PIC como se encuentra explicado en el U.D.1;Conectar los correspondientes circuitos como se encuentra representado en la Fig.4.2;Observar los acontecimientos en cada uno de los programas, comentar los resultados y dibujar el diagramade flujo (flow - chart) para cada programa;

Remover todas las conexiones.

Page 127: DL 3155M24 SPA

Unidad N.5: Mini PLC (2 input - 4 output)

Objectivos:

Gestiòn de un mini PLC con: 2 entradas ON/OFF, 2 salidas RELE, 1 salidaESTATICA y 1 salida (BUZZER)

Activaciòn de 2 relè a travèz de 2 pulsadores externos

Generador de el señal B.F.

Generador de un señal PWM (Pulse Width Modulation)

Requisitos:

Acquisiciòn de la Guìa Teòrica

Acquisiciòn de las unidades didàcticas anteriores

Instrumentos: PC con sistema de operaciòn WINDOWS 95 o superior

Redactor Asembler MPASWIN.EXE (Microchip)

Software DL 3155M24SW

Cable de comunicaciòn (puerta paralela)

Set de cables pequeños.

Page 128: DL 3155M24 SPA

Página blanca

Page 129: DL 3155M24 SPA

Mini PLC (2 input - 4 output)

Esquema eléctrico

Fig. 5.1a (Activaciòn de 2 relè a travèz de 2 pulsadores)

Fig. 5.1b (Generador de señal B.F.)

Page 130: DL 3155M24 SPA

Fig. 5.1c (Generador de señal PWM)

Lista de componentes

R1, R3 = 3.9kΩ - 1/4W - 5%R2, R4 = 1.5kΩ - 1/4W - 5%R5, R6, R8, R11, R14 = 22kΩ - 1/4W - 5%R7, R10, R13 = 10kΩ - 1/4W - 5%R9 = 1.5kΩ - 1/4W - 5%R12, R15 = 330Ω - 1/4W - 5%CHECK IN 1, IN 2, OUT 1, OUT 2, OUT 3 = diodos LED rojosV1, V2, V3, V4, V5, V6, V7, V8, V13, V15 = DIODI 1N4148V11 = DIODO FAST 1N4935V9, V12, V14 = BC337V10 = TIP122N1, N2 = Fotocopiadores 4N35K1, K2 = Relé DIL en miniatura, tensiòn nominal 5V DC dos coctactos de cambioB1= MINI BUZZER Esquema topográfico

Page 131: DL 3155M24 SPA

Fig. 5.2a (Activaciòn de 2 relè a travèz de 2 pulsadores)

Fig. 5.2b (Generador de señal B:F.)

Page 132: DL 3155M24 SPA

Fig. 5.2c (Generador de señal PWM)

Programa UD5prg1;====================================================================== ; DL3155M24 DE LORENZO ROZZANO (MI) ITALY;; ACTIVACION DE 2 RELE' A TRAVEZ DE 2 PULSADORES EXTERNOS;================================================================ TITLE ‘UD5prg1’ PROCESSOR 16F84 INCLUDE “P16F84.INC” LIST F=INHX8M;................................................................PORT_A EQU 05PORT_B EQU 06COUNT_1 EQU 0CCOUNT_2 EQU 0DPIC84 EQU 03FFSTATUS EQU 03CARRY EQU 00USCITA EQU 0EP1 EQU 02P2 EQU 03RL1 EQU 00RL2 EQU 01RLSTATUS EQU 0F;................................................................Init ORG 0000H MOVLW 00 MOVLW B’11111100' TRIS PORT_A MOVLW 0FF MOVWF COUNT_1 MOVLW 0FF MOVWF COUNT_2

Page 133: DL 3155M24 SPA

MOVLW 00 MOVWF RLSTATUS MOVF RLSTATUS,0 MOVWF PORT_A CALL Delay;................................................................Main BTFSS PORT_A,P2 CALL Rele1 BTFSS PORT_A,P1 CALL Rele2 MOVF RLSTATUS,0 MOVWF PORT_A CALL Delay GOTO Main;................................................................Rele1 MOVF RLSTATUS,0 XORLW B’00000001' MOVWF RLSTATUS RETURN;................................................................Rele2 MOVF RLSTATUS,0 XORLW B’00000010' MOVWF RLSTATUS RETURN;................................................................Delay DECFSZ COUNT_1,1 GOTO Delay MOVLW 0FF MOVWF COUNT_1 DECFSZ COUNT_2,1 GOTO Delay MOVLW 0FF MOVWF COUNT_1 MOVLW 0FF MOVWF COUNT_2 RETURN;................................................................ ORG PIC84 GOTO Init;................................................................

END

Page 134: DL 3155M24 SPA

Programa UD5prg2;======================================================================; DL3155M24 DE LORENZO ROZZANO (MI) ITALY;; GENERADOR DE EL SEñAL B.F.;================================================================ TITLE ‘UD5prg2’ PROCESSOR 16F84 INCLUDE “P16F84.INC” LIST F=INHX8M;................................................................PORT_A EQU 05PORT_B EQU 06TMR0 EQU 01COUNT_1 EQU 0CCOUNT_2 EQU 0DPIC84 EQU 03FFSTATUS EQU 03INTCON EQU 0BHTMR0 EQU 01HOPT EQU 01;................................................................#define SUONO 0B9;................................................................Int ORG 04 MOVF PORT_A,0 XORLW 01 MOVWF PORT_A MOVLW SUONO MOVWF TMR0 BCF INTCON,2 BSF INTCON,7 RETFIE;................................................................Init ORG 0050H BSF STATUS,5 BCF OPT,5 BCF OPT,3 BSF OPT,0 BSF OPT,1 BCF OPT,2 BCF STATUS,5 BSF INTCON,5 MOVLW SUONO MOVWF TMR0 MOVLW 00 TRIS PORT_B MOVLW 018H TRIS PORT_A BSF INTCON,7;................................................................Main NOP NOP GOTO Main ORG PIC84 GOTO Init;................................................................ END

Page 135: DL 3155M24 SPA

Programa UD5prg3;======================================================================; DL3155M24 DE LORENZO ROZZANO (MI) ITALY;; GENERADOR DE EL SEÑAL PWM;================================================================ TITLE ‘UD5prg3’ PROCESSOR 16F84 RADIX DEC LIST F=INHX8M;................................................................FZERO EQU 00HRTCC EQU 01HPCL EQU 02HSTAT EQU 03HFSR EQU 04HPORTA EQU 05HPORTB EQU 06HEDATA EQU 08HEADR EQU 09HECON1 EQU 88HECON2 EQU 89HINTCON EQU 0BHTR_A EQU 85HTR_B EQU 86HOPTIO EQU 81H;................................................................REG1 EQU 0CHREG2 EQU 0DHFREQUE EQU 0EHDUTYC EQU 0FH;................................................................#define RP0 STAT,5#define CARRY STAT,0#define ZER STAT,2#define OUTPWM PORTB,0;................................................................ ORG 0 goto Start ORG 4 retfie;................................................................Start bsf STAT,5 movlw b’0000' movwf TR_A movlw b’11110000' movwf TR_B clrf INTCON movlw b’01000110' movwf OPTIO bcf STAT,5 movlw .128 movwf RTCC;................................................................Main movlw .242 movwf FREQUE movf PORTB,W andlw b’11110000' iorlw b’00000001' movwf DUTYC subwf FREQUE,1 bsf OUTPWMLpb1 decfsz DUTYC goto Lpb1 bcf OUTPWM clrwdtLpb2 decfsz FREQUE goto Lpb2 clrwdt goto Main;................................................................ END

Page 136: DL 3155M24 SPA

EXPERIMENTACIÓNintroducir el Mòdulo 24 en la consolle y colocar en ON el interruptor general;conectar, a travèz de un cable de conexiòn, la puerta paralela de el PC en el Modulo 24;utilizar el PC y escribir los siguientes programas a travèz de un editor ASCII:UD5prg1.ASMUD5prg2.ASMUD5prg3.ASMsalvar el programa en un formato txt en la directory de trabajo con los nombres UD5prg1.ASM,UD5prg2.ASM, UD5prg3.ASM;Redactar los programas UD5prg1.ASM, UD5prg2.ASM, UD5prg3.ASM;Transferir un programa a la vèz en el PIC como se encuentra explicado en el U.D.1;Conectar los correspondientes circuitos como se encuentra representado en la Fig.5.2;Observar los acontecimientos en cada uno de los programas, comentar los resultados y dibujar el diagramade flujo (flow - chart) para cada programa;

Remover todas las conexiones.

Page 137: DL 3155M24 SPA

© 1996 - 2000 DE LORENZO SRL - Printed in Italy - All right reserved

DE LORENZO SRLV.le Romagna, 20 - 20089 Rozzano (MI) ItalyTel. ++39 02 8254551 - Telefax ++39 02 8255181E-mail: [email protected] site: www.delorenzogroup.com

Page 138: DL 3155M24 SPA