Sunteți pe pagina 1din 92

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

MICROCONTROLADOR 16F628
DESCRIPCION DE PINES

Nombre
RA0 / AN0 RA1 / AN1 RA2 / AN2 / VREF RA3 / AN3 / CMP1 RA4 / TOCKI / CMP2 RA5 / MCLR / THV RA6 / OSC2 / CLKOUT RA7 / OSC1 / CLKIN RB0 / INT RB1 / RX / DT RB2 / TX / CK RB3 / CCP1 RB4 / PGM RB5 RB6 / T1OSO / T1CKI RB7 / T1OSI VSS VDD

Pin #
17 18 1 2 3 4 15 16 6 7 8 9 10 11 12 13 5 14

Tipo E/S/P
E/S E/S E/S E/S E/S E/P E/S E/S E/S E/S E/S E/S E/S E/S E/S/P E/S/P P P

Tipo Buffer
ST ST ST ST ST ST ST ST TTL TTL TTL TTL TTL TTL TTL TTL -------

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

BANCOS DE REGISTROS DEL PIC 16F628

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

CONJUNTO DE INSTRUCCIONES
El conjunto de instrucciones de los microprocesadores PIC 16FXXX consiste en un pequeo repertorio de solo 35 instrucciones. En este curso se ha optado por clasificarlas, desde el punto de vista del programador, en cinco categoras bien definidas de acuerdo con la funcin y el tipo de operandos involucrados.

Instrucciones de Byte que operan con Registros


Estas instrucciones pueden ser de simple o doble operando de origen. El primer operando de origen ser siempre el registro seleccionado en la instruccin, el segundo, en caso de existir, ser el registro W. El destino, es decir donde se guardara el resultado, ser el registro seleccionado o el W, segn se seleccione con un bit de la instruccin. El formato genrico de estas instrucciones es el siguiente :
11 10 9 8 7 6 5 4 3 2 1 0

Los bits 0 a 4 (5 bits), denominados f permiten seleccionar uno de 35 registros de la memoria interna. El bit 5, denominado d, permite especificar el destino del resultado. Si d = 1 el resultado se guardara en el registro seleccionado. Si d = 0 el resultado se guardara en W. Los bits 6 a 11 identifican la instruccin especifica a realizar. Instrucciones de operaciones lgicas de doble operando :
ANDWF f,d ;operacin AND lgica, destino = W f IORWF f,d ;operacin OR lgica, destino =Wf XORWF f,d ;operacin XOR lgica, destino = W f

Los nombres mnemnicos de estas instrucciones provienen de : AND W con F, Inclusive OR W Con F y XOR W con F. Instrucciones de operaciones aritmticas y lgicas sencillas de simple operando :
MOVF f,d ;movimiento de datos, destino = f COMF f,d ;complemento lgico, destino = NOT f INCF f,d ;incremento aritmtico, destino = f + 1 DECF f,d ;decremento aritmtico, destino = f - 1

Los mnemnicos de estas instrucciones provienen de : MOVe File, COMplement File, NCrement File y DECrement File. En las siete instrucciones anteriores el nico bit afectado de la palabra de estado del procesador es el Z, que se pone en 1 si el resultado de la operacin es 00000000, y se pone en 0 si el resultado tiene cualquier otro valor.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Instrucciones de rotacin de bits a travs del CARRY :


RLF f,d ;rotacin a la izquierda, destino = f ROT RRF f,d ;rotacin a la derecha, destino = f ROT

En estas operaciones (Rotate Left File y Rotate Right File) los bits son desplazados de cada posicin a la siguiente, en sentido derecho o izquierdo. El desplazamiento es cerrado, formando un anillo, con el bit C (CARRY) de la palabra de estado. En estas dos instrucciones, el nico bit afectado de la palabra de estado del procesador es el bit C, que tomar el valor que tenia el bit 7 o el bit 0, segn sea el sentido del desplazamiento. Estas instrucciones son muy tiles para la manipulacin de bits, y adems para realizar operaciones aritmticas, ya que en numeracin binaria, desplazar un nmero a la izquierda es equivalente a multiplicarlo por 2, y hacia la derecha, a dividirlo por 2. Instruccin que realiza el intercambio de posiciones entre los cuatro bits menos significativos y los cuatro ms significativos (nibble bajo y nibble alto).
SWAPF f,d ;intercambia nibbles, destino = SWAP f

Esta instruccin (SWAP File) no afecta ninguno de los bits de la palabra de estado del procesador. Esta instruccin es muy til para el manipuleo de nmeros BCD empaquetados, en los que en un solo byte se guardan dos dgitos BCD (uno en cada nibble). Instrucciones de operaciones de la suma y la resta aritmticas :
ADDWF f,d ;suma aritmtica, destino = f + W SUBWF f,d ;resta aritmtica, destino = f - W

Estas operaciones (ADD W a F y SUBstract W de F) afectan a los tres bits de estado C, DC y Z. El bit Z se pone en 1 si el resultado de la operacin es 00000000, y se pone en 0 si el resultado tiene cualquier otro valor. La suma se realiza en aritmtica binaria pura sin signo. Si hay un acarreo del bit 7, es decir que el resultado es mayor que 255, el bit C (carry) resulta 1, en caso contrario resulta 0. Si hay un acarreo del bit 3, es decir que la suma de las dos mitades (nibbles) menos significativas (bits 0 a 3) resulta mayor que 15, se pone en 1 el bit DC (digit carry), en caso contrario se pone en 0.
Ejemplos :

1010 0010 + 0100 1111 1111 0001 C DC Z + 0 1 0

1101 0000 0110 1111 0011 1111 C DC Z 1 0 0

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

La resta se realiza sumando, en binario puro sin signo, el registro f ms el complemento a dos de W (el complemento a 1, o complemento lgico, ms 1) Ejemplos : f W 0100 0100 - 0010 1000 0001 1100 equivalente a :
f

0010 1000 C DC Z 1 0 0 - 0100 0100 1110 0100 C DC Z 0 1 0

0100 0100 C DC Z 1 0 0 0001 1100

0010 1000 + 1011 1100 1110 0100 C DC Z 0 1 0

cmp.2 W + 1101 1000

Los bits de estado C y DC toman el valor normal correspondiente a la suma de f con el complemento a 2 de W. De esta manera el significado para la operacin de resta resulta invertido, es decir que C (carry) es 1 si no hubo desborde en la resta, o dicho de otra manera, si el contenido de W es menor que el de f. El bit DC se comporta de manera similar, es decir que DC es 1 si no hubo desborde en la mitad menos significativa, lo que equivale a decir que el nibble bajo del contenido de W es menor que el del registrof. Instrucciones de simple operando y el destino es siempre el registro seleccionado :
CLRF f ;borrado de contenido, f = 0

MOVWF f ;copia contenido W a f, f = W

La instruccin CLRF (CLeaR File) afecta solo al bit Z que resulta siempre 0. La instruccin MOVWF (MOVe W a F) no afecta ningn bit de la palabra de estado.

Instrucciones de Byte que operan sobre W y Literales

Estas instrucciones se refieren todas al registro W, es decir que uno de los operandos de origen y el operando de destino son siempre el registro W. En las instrucciones de este grupo que tienen un segundo operando de origen, este es siempre una constante de programa literalmente incluida en la instruccin, llamada constante literal o simplemente literal. El formato genrico de estas instrucciones es el siguiente :
11 10 9 8 7 6 5 4 3 2 1 0

Los bits 0 a 7 especifican la constante literal de 8 bits que se utilizara en la operacin.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Las tres instrucciones que siguen son las operaciones lgicas tradicionales, similares a las que ya vimos anteriormente, pero realizadas entre una constante de programa y el registro W:
IORLW k ; operacin OR lgica, W = W k ANDLW k ; operacin AND lgica, W = W k XORLW k ; operacin XOR lgica, W = W k

En estas tres instrucciones (Inclusive OR Literal W, AND Literal W y XOR Literal W) el nico bit afectado de la palabra de estado del procesador es el Z, que se pone en 1 si el resultado de la operacin es 00000000, y se pone en 0 si el resultado tiene cualquier otro valor. Instruccin que cargar una constante de programa en el registro W :
MOVLW k ;carga constante en W, W = K

Esta (MOVe Literal W) instruccin no afecta ninguno de los bits de estado del procesador. La instruccin que sigue (CLeaR W) no correspondera incluirla en este grupo, y pertenece en realidad al primero, el de las instrucciones que operan sobre registros, ya que se trata de un caso especial de la instruccin CLRF, con destino W, y f = 0. La incluimos aqu porque como se le ha asignado un mnemnico particular referido especficamente al registro W, creemos que, desde el punto de vista del programador, es ms til verla dentro del grupo de instrucciones referidas a W.
CLRW ;borra el contenido de W, W = 0

Al igual que en la instruccin CLRF, el nico bit de estado afectado es el Z que resulta1 - Instrucciones de Bit El formato genrico de estas instrucciones es el siguiente :
11 10 9 8 7 6 5 4 3 2 1 0

Los bits 0 a 4 (5 bits), denominados f, permiten seleccionar uno de 35 registros de la memoria interna. Los bits 5 a 7, denominados b, permiten especificar el numero de bit (0 a 7) sobre el que se operara. Estas instrucciones operan solamente sobre el bit especificado, el resto de los bits del registro no son alterados. Estas instrucciones no tienen especificacin de destino, ya que el mismo es siempre el registro seleccionado.
BCF f,b ; borra el bit b de f ;bit f(b) = 0 BSF f,b ; coloca en uno el bit b de f ;bit f(b) = 1

Estas instrucciones (Bit Clear File y Bit Set File) no afectan ningn bit de la palabra de estado del procesador.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

- Instrucciones de Control GOTO k ;salto a la posicin k (9 bits) del programa Esta es la tpica instruccin de salto incondicional a cualquier posicin de la memoria de programa . La constante literal k es la direccin de destino del salto, es decir la nueva direccin de memoria de programa a partir de la cual comenzarn a leerse las instrucciones despus de ejecutar la instruccin GOTO. Esta instruccin simplemente carga la constante k en el registro PC (contador de programa). La nica complicacin de esta instruccin es que la constante k es de solo 9 bits, mientras que el registro PC es de 11 bits, ya que en el 16F628 debe permitir direccionar una memoria de programa de 2 K. Los dos bits faltantes, bit 9 y 10 del PC, son tomados respectivamente de los bits de seleccin de pgina PA0 y PA1 de la palabra de estado. Este comportamiento particular hace que la memoria de programa aparezca como dividida en paginas de 512 posiciones como se vera ms adelante. El programador debe tener en cuenta que antes de ejecutar una instruccin GOTO es posible que haya que programar los bits PA0 y PA1. CALL k ;salto a la subrutina en la posicin k (8 bits) Su comportamiento es muy similar al de la instruccin GOTO, salvo que adems de saltar guarda en el stack la direccin de retorno de la subrutina (para la instruccin RETLW). Esto lo hace simplemente guardando en el stack una copia del PC incrementado, antes de que el mismo sea cargado con la nueva direccin k. La nica diferencia con la instruccin GOTO respecto de la forma en la que se realiza el salto, es que en la instruccin CALL la constante k tiene solo 8 bits en vez de 9. En este caso tambin se utilizan PA0 y PA1 para cargar los bits 9 y 10 del PC, pero adems el bit 8 del PC es cargado siempre con 0. Esto hace que los saltos a subrutina solo puedan realizarse a posiciones que estn en las primeras mitades de las paginas mencionadas. El programador debe tener en cuenta este comportamiento y asegurarse de ubicar las posiciones de inicio de las subrutinas en las primeras mitades de las paginas. La instruccin que aparece a continuacin es la de retorno de subrutina: RETLW k ;retorno de subrutina con constante k, W = k Esta (RETurn con Literal in W) instruccin produce el retorno de subrutina con una constante literal k en el registro W. La operacin que realiza consiste simplemente en sacar del stack un valor y cargarlo en el PC.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Ese valor es el PC incrementado antes de realizar el salto, de la ultima instruccin CALL ejecutada, por lo tanto es la direccin de la instruccin siguiente a dicho CALL. Dado que el stack es de 11 bits, el valor cargado en el PC es una direccin completa, y por lo tanto se puede retornar a cualquier posicin de la memoria de programa, sin importar como estn los bits de seleccin de pagina. Esta instruccin adems carga siempre una constante literal en el registro W. Ya que esta es la nica instruccin de retorno de subrutina de los PIC16FXXX, no hay en estos microprocesadores forma de retornar de una subrutina sin alterar el registro W. Por otro lado, y con una metodologa especial de programacin, un conjunto de sucesivas instrucciones RETLW puede ser usado como una tabla de valores constantes incluida en el programa (Ej. : tablas BCD/7 seg.). Instrucciones de salto (skip) condicional. Estas instrucciones son los nicos medios para implementar bifurcaciones condicionales en un programa. Son muy generales y muy poderosas ya que permiten al programa tomar decisiones en funcin de cualquier bit de cualquier posicin de la memoria interna de datos, y eso incluye a los registros de perifricos, los puertos de entrada/salida e incluso la palabra de estado del procesador. Estas dos instrucciones reemplazan y superan a todo el conjunto de instrucciones de salto condicional que poseen los microprocesadores sencillos convencionales (salto por cero, por no cero, por carry, etc.).
BTFSC f,b ;salta si bit = 0 BTFSS f,b ;salta si bit = 1

BTFSC (Bit Test File and Skip if Clear) saltea la prxima instruccin si el bit b del registro f es cero. BTFSS (Bit Test File and Skip if Set) saltea si el bit es 1. Estas instrucciones pueden usarse para realizar o no una accin segn sea el estado de un bit, o, en combinacin con GOTO, para realizar una bifurcacin condicional. Ejemplo 1 : Ejemplo 2:

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Las instrucciones que siguen son casos especiales de las de incremento y decremento Estas instrucciones podran categorizarse dentro del grupo de instrucciones orientadas a byte sobre registros (primer grupo), ya que efectivamente operan sobre los mismos, y el formato del cdigo de la instruccin responde al de ese grupo, pero, a diferencia de las otras, pueden adems alterar el flujo lineal del programa y por eso se les incluy en este grupo.
DECFSZ f,d ;decrementa y salta s 0, destino= f - 1 INCFSZ f,d ;incrementa y salta s 0, destino= f + 1

Estas dos instrucciones (DECrement File and Skip if Zero, e INCrement File and Skip if Zero) se comportan de manera similar a DECF e INCF, salvo que no afectan a ningn bit de la palabra de estado. Una vez realizado el incremento o decremento, si el resultado es 00000000, el microprocesador salta la prxima instruccin del programa. Estas instrucciones se utilizan generalmente en combinacin con una instruccin de salto (GOTO), para el diseo de ciclos o lazos (loops) de instrucciones que deben repetirse una cantidad determinada de veces.

Instrucciones Especiales

Instrucciones que controlan funciones especficas del microprocesador o que actan sobre registros especiales no direccionados como memoria interna normal. La instruccin que sigue es la tpica NO OPERATION.
NOP ;no hace nada, consume tiempo

Esta instruccin solo sirve para introducir una demora en el programa, equivalente al tiempo de ejecucin de una instruccin. No afecta ningn bit de la palabra de estado. La instruccin que sigue borra el contador del watch dog timer. Este registro tampoco esta accesible como memoria, y esta es la nica instruccin que lo modifica. CLRWDT ;borra el watch dog timer, WDT = 0 Esta instruccin, adems, coloca en uno los bits PD (power down) y TO (time-out) de la palabra de estado. La siguiente es una instruccin especial de control del microcontrolador que lo pone en el modo power down. En este modo el microprocesador se detiene, el oscilador se apaga, los registros y puertos conservan su estado, y el consumo se reduce al mnimo. La nica forma de salir de este estado es por medio de un reset o por time-out del watch dog timer.
SLEEP ;coloca el C en modo sleep, WDT = 0

Esta instruccin, adems, borra el bit PD (power down) y setea el bit TO (time-out) de la palabra de estado.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

INSTRUCCIONES DEL PIC 16FXXX

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

10

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 1 ENCENDER UN LED A TRAVES DEL PUERTOB DEL PIC


Puertos de Entrada y Salida
La principal utilidad de las patitas que contiene un microcontrolador es soportar las lneas de E/S que comunican al computador interno con los perifricos exteriores. Segn los controladores de perifricos de los microcontroladores, las lneas de E/S se destinan a proporcionar el soporte a las seales de entrada, salida y control.

Reloj principal
El oscilador genera una onda cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la sincronizacin de las operaciones del sistema. Generalmente, el circuito de reloj est incorporado en el microcontrolador y slo se necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a elementos pasivos o bien un resonador cermico o una red R-C. Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las instrucciones pero lleva aparejado un incremento del consumo de energa Para las personas que no estn de todo familiarizados con el tema es bueno recordar que es el led. LED segn sus siglas en ingles (Light Emitting Diode) se traduce como diodo emisor de luz, que es un dispositivo semiconductor (vea el dibujo de abajo) de dos terminales nominados como ctodo (terminal negativa) y nodo (terminal positiva). Si polarizamos nuestro led directamente este va a producir un haz de luz y con la polarizacin inversa va a permanecer apagado. A veces el funcionamiento de los diodos es comparado con los switches que se prenden y se apagan.

nodo +

nodo --

luz
Ctodo + Ctodo Polarizacin inversa

Polarizacin directa

Una vez familiarizados con el hardware podemos proseguir con el software. Antes de ponerse a escribir el programa es aconsejable analizar primero los registros que se van a emplear en el dicho programa.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

11

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Registro STATUS

Nosotros respetaremos la nomenclatura inglesa, pero escribiremos las variables que nos interesan. El motivo es muy simple: en ese PIC16F628 no se ha considerado el problema de los bancos de memoria, que se deben intercambiar a travs del registro de estado. De este modo para nosotros PORTB representar al puerto B, TRISB ser el mismo y W ser el registro de trabajo. El programa, por lo dems, es bastante evidente. Necesitamos slo introducir el sentido de los TRIS. Este registro est asociado a los distintos puertos y en l cada bit representa un pin del puerto al que se refiera. Un 0 en uno de sus bits representar que el pin es de salida, y un 1 que es de entrada. De este modo cada pin ser independiente, dndonos mayor flexibilidad para la implementacin fsica de los diseos. Es posible incluso, aunque no habitual, cambiar la direccin del pin durante la ejecucin del programa. Esta opcin puede llegar a darnos la posibilidad de manejar varios dispositivos con un solo puerto.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

12

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

SET DE INSTRUCCIONES UTILIZADAS EN LA PROGRAMACION 1. BCF f, b : Con esta instruccin se pone en 0 el bit b del registro f Ejemplo: Si se tiene en el puerto A ( PORTA ) = 1010 y se quiere colocar en cero el tercer bit, la instruccin es la siguiente: BCF PORTA , 3. 2. BSF f, b : Con esta instruccin se pone en 1 el bit b del registro f Ejemplo: Si se tiene en el puerto A ( PORTA ) = 1010 y se quiere colocar en UNO el tercer bit, la instruccin es la siguiente: BSF PORTA , 3. 3. GOTO K : realiza un salto incondicional a la direccin llamada k del programa Ejemplo: GOTO CONFIG quiere decir salte a la parte de configuracin del programa. 4.CLRF F : Borra el contenido del registro, cuyo valor quedara en 00000000

DESCRIPCIN DE NUESTRA PRACTICA ENCENDER UN LED


Como inicio antes de empezar el programa en si, se deber configurar el PIC, de forma que funciones a nuestras necesidades, esto quiere decir que debemos decirle como vamos a usar sus puertos, si van a ser de entrada o de salida, en nuestro caso solo requerimos de un solo puerto (puerto b7), y conectado a l, el respectivo led a encender con su resistencia para evitar un flujo de corriente muy grande, tal que pueda daar nuestro pic. Despus de la configuracin inicial, y haber pasado por los respectivos bancos como se ilustrar en el programa, aseguraremos de que el puertob este en ceros y para ello borraremos el contenido con la instruccin de borra registro (CLRF), en este caso dirigido al registro PORTB, que es el puerto b que vamos a manipular. Luego sencillamente daremos la orden de encender el led, y esto se logra con enviar un uno o positivo por el puertob,7, y con ello se encender el led. Se explica en cuadro los registros TRISB,PORTB Y el bit RP0 del registro STATUS

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

13

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA ESQUEMATICO DEL CIRCUITO


.

DIAGRAMA DE FLUJO DEL PROGRAMA DE ENCENDER EL LED INICIO


BANCO1

TRIS,7 => 0

BANCO0

Borrar puertoB

Portb,7=> 1

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

14

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA PARA ENCENDER UN LED CON EL PIC 16F628


LIST P=16F628 INCLUDE <P16F628.INC> ORG GOTO ORG BSF BCF BCF CLRF BSF GOTO END 00 INI 05 STATUS,RP0 TRISB,7 STATUS,RP0 PORTB PORTB,7 $

INI

;IREMOS AL BANCO1 ;EL PUERTO RB7 ESTARA COMO SALIDA ;DEVUELTA AL BANCO0 ;PARA BORRAR EL PUERTO Y QUEDE EN CEROS ;ENVIA UN 1(5V) A RB7 PARA ENCENDER LED ;EL CONTADOR DEL PROGRAMA SE QUEDAR AQUI

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

15

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 2 El ENCENDIDO DE UN LED EN FORMA INTERMITENTE


Acordmonos que el objetivo esta vez no es solamente prender el led sino tambin apagarlo y volver a prender en una forma peridica o cclica La pregunta es: Cmo se logra la semejante operacin? La respuesta a esa pregunta es SUBRUTINA. La pregunta de inmediata que surge es: y que es una subrutina? Una subrutina es una parte del programa principal que se dedica a una tarea especifica.

Ejemplos de subrutinas:
una subrutina que peridicamente me observa el estado lgico de un puerto una subrutina que se encargue de realizar clculos de determinadas variables

en fin es la libertad del programador de asignar una determinada tarea a la subrutina. El uso de subrutinas, siendo sencillo y no requiriendo un apartado especfico, es esencial, puesto que simplifica los programas, hacindolos, adems, ms modulares. Llamaremos a una subrutina con la instruccin CALL, seguida de la etiqueta que la encabeza o su direccin en memoria. Para regresar a la siguiente instruccin tras el CALL bastar con situar, en la ltima lnea de la subrutina, el comando RETURN; tambin ser posible emplear RETLW k, el cul se diferencia del anterior por situar en el registro W el valor k. En el caso de nuestra practica vamos a desarrollar una subrutina que se conoce con el nombre de retardo. El retardo o subrutina se encarga de que el programa principal en un determinado momento se queda parada por un tiempo que nosotros queremos que se detenga. Para ser mas concreto, al prender el led necesitamos que se quede prendido por un tiempo, despus tenemos que apagarlo y mantenerlo apagado por otro rato y volver a hacer todo el procedimiento de nuevo. Ahora, como se arma una subrutina en el lenguaje de programacin que nosotros estamos usando o sea MPLAB? La forma mas clsica de armar una subrutina es usando las instrucciones CALL y RETURN. Donde la instruccin CALL es usado por el programa principal para llamar la subrutina , donde esa a su vez realiza su tarea asignada ( en nuestro caso es un retardo en el tiempo) y retorna al programa principal de donde la llamaron usando la instruccin RETURN. Ya sabiendo como se arma una subrutina necesitamos saber como se hace el dicho retardo del tiempo que es la tarea de la subrutina, para eso observamos la siguiente subrutina:

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

16

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

RETARDO OTRAVEZ

MOVLW MOVWF DECFSZ GOTO RETURN

.255 ;Se carga un registro CONTADOR CONTADOR ;con un valor mximo decimal de 255 CONTADOR ;Se decrementa el dicho registro en uno OTRAVEZ ;Si CONTADOR no es cero se decrementa ;otra vez ;Al llegar a cero la subrutina RETARDO ;retorna al programa principal

Usando un diagrama de flujos la rutina anterior se puede representar de la siguiente forma. CONTADOR 255

CONTADOR - 1

CONTADO R

=0? NO SI RETORNAR Del ejemplo anterior lo que vemos es que la subrutina RETARDO se toma 255 veces haciendo la misma instruccin DECFSZ antes de retornar al programa principal. S nos acordamos que estamos trabajando con un cristal de 4 MHz, donde esa frecuencia es dividida internamente por el C por cuatro, 4MHz/4 = 1MHz, eso quiere decir que el micro se demora 1 microsegundo para realizar una instruccin T = 1/f = 1/1MHz = 1seg. Por lo tanto la subrutina RETARDO lo que hace es hacer un retardo aproximadamente de 255 microsegundos. Desafortunadamente en la vida real un retardo de 255 microsegundos es demasiado rpido para el ojo humano y no es percibido. Para solucionar este problema se recurre a una tcnica llamada anidamiento, lo que hace es en si es manipular varias variables, y decrementarlas de forma que cuando termine una contine con la otra, mejor que cuando una variable termine, decremente la otra en una unidad, y vuelva y se cargue de nuevo con un valor, lo que quiere decir que sus cantidades se multiplicaran.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

17

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Veamos un ejemplo:

retardo
reg1=100 reg2=30 reg3=30 reg3 - 1=reg3

reg3= 0 reg2 - 1=reg2 reg2= 0 reg1 - 1=reg1 reg1= 0

retorne
Cuando reg3 se va decrementando, ,lo sigue haciendo hasta que su valor establecido llegue a cero, y cuando esto pasa, decrementa a la siguiente variable (reg2), una unidad, y de nuevo se carga reg3 con el valor establecido, lo que quire decir que este anidamiento consumira aproximadamente 90.000 ciclos de instrucion aproximadamente, o quizas mucho mas si es implementado en un pic, pues las instrucciones aplicadas para estos decrementos segn el caso en un pic, suelen consumir 2 ciclos de instruccion, por lo que quiere decir que si tenemos en cuenta estos retornos (el volver a un punto del anidamiento), podrian consumir con estos valores no 90.000 sino hasta casi 270.000 ciclos de instruccion aproximadamente, aunque los anidamientos se pueden hacer de muchas formas segn el programador, por lo que no existe un solo metodo, sino muchos y cada cual se acomoda a varias

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

18

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

necesidades, pero en nuestra practica se implementar una de las mas sencillas formas, e incluso de las mas usadas. El anidamiento tiene como funcion mas comun la de crear retardos en el programa, esto es porque algunas actividades que hace el pic son muy rapidas, y para que los humanos las podamos percibir, debemos dilatar el tiempo para percibir lo que pasa. Precisamente , el percibir o retener tiempo,ser la aplicacin en nuestra practica, pues el objetivo es el de encender y apagar el led, y entre el encendido y apagado, debemos dejar que dure un tiempo encendido y un tiempo apagado. SET DE INSTRUCCIONES NUEVAS UTILIZADAS EN LA PROGRAMACION DECFSZ f,d: decrementa el registro f en uno y salta si el resultado es cero, el valor lo almacena en el registro w o en el registro f. Ejemplo: Se carga la variable numero con 5 y se desea decrementar la variable numero en 1 hasta que el resultado sea cero, si es as salte a la direccin fin , si no continu decrementando hasta que sea cero MOVLW MOVWF DECFSZ GOTO GOTO D`05 NUMERO NUMERO,1 SIGUE FIN

SIGUE

DESCRIPCION DEL CIRCUITO


Como se haba dicho anteriormente, el objetivo era el de encender un led de forma intermitente, para que se observara este efecto, de debe recurrir a los retardos por anidamiento. Iniciamos primero configurando el pic, en el caso para que el pin RB7 nos funcione como salida. Despus para asegurar de que empiece apagado, borraremos el puerto con la instruccin CLRF PORTB, luego si damos la orden que se encienda el led, y para que podamos ver si se enciende y se apaga, daremos un retardo de encendido, que durara mas o menos un segundo, si se usa un cristal de 4MHz, luego de que termine el retardo, apagaremos el led, y de nuevo llamaremos el retardo, y se repetir este ciclo indefinidamente, por lo que no tiene final, a menos que quitemos la alimentacin.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

19

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO PARA EL LED INTERMITENTE


INICIO

CONFIGURACIN DEL PUERTO

LIMPIAR PORTB

ENCENDER LED LLAMAR RETARDO

APAGAR EL LED

LLAMAR RETARDO

DIAGRAMA ESQUEMATICO DEL CIRCUITO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

20

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA PARA EL LED INTERMITENTE CON EL PIC 16F628


LIST P=16F628 INCLUDE <P16F628.INC> CONT1 EQU 20 ;REGISTROS PARA EL ANIDAMIENTO CONT2 EQU 21 CONT3 EQU 22 ORG 00 GOTO INICIO ORG 05 INICIO BSF STATUS,RP0 ;SELECCIONA BANCO1 BCF TRISB,7 ;PUERTO RB7 COMO SALIDA BCF STATUS,RP0 ;AL BANCO0 CLRF PORTB ;BORRAR EL PUERTOB START BSF PORTB,7 ;LED ENCENDIDO CALL RETARDO ;TIEMPO PARA QUE EL LED DURE ENCENDIDO BCF PORTB,7 ;APAGAR EL LED CALL RETARDO ;TIEMPO QUE DURA APAGADO GOTO START ;VUELVE A START PARA QUE REPITA EL CICLO ;*********************************** RETARDO MOVLW .6 MOVWF CONT3 MOVLW .250 MOVWF CONT2 MOVLW .250 MOVWF CONT1 DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO RETURN END CONT1,F $-1 .250 CONT1 CONT2,F $-5 .250 CONT2 CONT3,F $-9 ;DECREMENTE LA VARIABLE CONT1-1 SALTA ;CUANDO LLEGA A 0 ;$-1 SIGNIFICA QUE RETROCEDA UNA LINEA ;ANTES ;SE RECARGA NUEVAMENTE EL REGISTRO POR EL ;ANIDAMINETO ;DECREMENTE LA VARIABLE CONT2-1 SALTA ;CUANDO LLEGA A CERO ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA ;SE RECARGA CONT2 POR EL ANIDAMIENTO ;RETROCEDE 9 LINEAS EN EL PROGRAMA ;CUANDO CONT3 SEA CERO RETORNA DE DONDE ;se LLAM

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

21

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 3 El ENCENDIDO DE UN LED CON UN PULSADOR


Ahora, el encendido y apagado de un led, ya no va a ser controlado independientemente por el microcontrolador, sino que ahora esa orden de encendido o apagado se le asignara a un interruptor normalmente abierto que se conecta al puerto B, mas exactamente en el pin RB0 que se va a comportar como un puerto de entrada y en el pin RB7 del puerto B se va a conectar el led. La idea de este circuito es el manejo del estado del led a travs de el interruptor. Al oprimir el interruptor el led tiene que apagarse s estaba prendido prenderse s estaba apagado. Para que se cumpla este requisito es bueno antes que todo analizar de cmo vamos a saber cuando el interruptor pulsador esta oprimido suelto. S analizamos con mas detalle el circuito del pulsador nos vamos a dar cuneta de que cuando el pulsador esta abierto vamos a tener un voltaje de 5 voltios el pin RB0 (un 1 lgico) y cundo el pulsador esta cerrado proporciona un voltaje de 0 voltios (un 0 lgico) en el mismo pin. Entonces s nos encargamos de monitorear el pin RB0 podemos realizar el objetivo de esta practica. Para efectuar el dicho monitoreo vamos a usar la instruccin BTFSC que se va encargar de informarnos cuando el pin RB0 esta con cero voltios o sea el pulsador oprimido. Al saber eso lo que vamos a hacer es completar digitalmente en binario el estado lgico del puerto RB7. 1 . BTFSC : Si el bit b del registro f es 0, se salta una instruccin y se contina con la ejecucin. En caso de salto, ocupar dos ciclos de reloj. Ejemplo: REVISAR BTFSC GOTO BTFSC GOTO GOTO PORTB,3 REVISAR PORTB,7 LEDOFF LEDON

El arreglo del pin RB0 5V

RB0

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

22

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

EL RETARDO DE ANTIREBOTE Cuando un pulsador como el del ejemplo, no se encuentra pulsado(1), normalmente tendr un nivel lgico estable (en el caso ser de 5V), pero imaginando que pudiramos percibir el tiempo en milisegundos, apenas pulsamos este suiche(2), no va a generar un 0V estable, mas bien una especie de onda, la cual no posee un nivel lgico estable, por lo que si no pusiramos este retardo. El PIC interpretara esta onda como varias pulsaciones continuas, situacin que en nuestra realidad es falsa, pues solo pulsamos el suiche una vez, por ello el PIC solo leer el primer estado bajo que sensa (2A) Al cabo de algunos milisegundos (abarca un rango de 10mS hasta 300mS). Este rebote se estabiliza y el nivel lgico ya se estabiliza a 0V(3). Entonces este retardo se encarga de ocupar al PIC este tiempo, para que no lea estas falsas lecturas, y vuelve a leer en este caso RB0 y ya tendr un nivel lgico estable

5V

Situacin ideal de lectura Para el PIC 0V (1) (2A) EL DIAGRAMA DE FLUJO PRACTICA N 3 (2) (3) t (mS)

NUESTRO CIRCUITO DE PRACTICA


Esta vez el encendido y apagado corre por control del pulsador S1, el cual a travs del puerto RB0 que funcionara como entrada, el PIC leer su estado, y cuando sense un 0 (0v), ordenara al PIC que encienda el led y si estaba encendido, que lo apague. En el diagrama de flujo se observa que despus de que el pulsador enva un cero por primera vez, lo interpreta como pulso, luego se aplica el mencionado retardo de antirrebote, que en si no es mas que un retardo comn por anidamiento, despus de terminado el retardo de antirebote, procede a leer el estado del led por medio del pin RB7: si estaba encendido que lo apague y lo contrario, si estaba apagado, que lo encienda.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

23

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO
RETARDO ANTIREBOTE CONT1 => .200 CONT2 => .80 CONT3 => .2

INICIO

CONFIGURA PUERTOS

CONT1= CONT1-1 RB0 =0?

CONT 1 = 0? CONT1=.200 CONT2 = CONT2-1

ANTIREBOTE

CONT 2 =0? CONT2 =.80 CONT3 = CONT3-1 PRENDER

RB7 = 0?

APAGAR

CONT 3 =0?

RETURN

DIAGRAMA ESQUEMATICO DEL CIRCUITO


DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

24

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA PARA ENCENDER Y APAGAR UN LED MEDIANTE UN PULSADOR


LIST INCLUDE EQU EQU EQU ORG GOTO ORG BSF MOVLW MOVWF BCF CLRF BTFSC GOTO CALL BTFSC . ON OFF GOTO BSF GOTO BCF GOTO P=16F628 <P16F628.INC> 20 ;REGISTROS PARA EL ANIDAMIENTO 21 22 00 INICIO 05 STATUS,RP0 ;SELECCIONA BANCO1 B'01111111' TRISB ;RB7 COMO SALIDA Y COMO ENTRADAS (RB6 A RB0) STATUS,RP0 ;AL BANCO0 PORTB ;BORRAR EL PUERTOB PORTB,0 ;PREGUNTA POR EL ESTADO DEL PULSADOR EN RB0 START ;SI ES IGUAL A 1, VUELVA Y PREGUNTE HASTA ; QUE SEA CERO REANTIR ;LLAMA UN RETARDO DE ANTIREBOTE PAR EL ; PULSADOR PORTB,7 ;PREGUNTA EN QUE ESTADO ESTA EL LED SI ;PRENDIDO O APAGADO OFF ;SI VA A OFF ES PORQUE EL LED ESTABA ;ENCENDIDO Y LO VA APAGAR PORTB,7 ;LED ENCENDIDO START ;VUELVE Y PREGUNTA ESTADO DEL PULSADOR PORTB,7 ;APAGAR EL LED START ;VUELVE Y PREGUNTA ESTADO DEL PULSADOR

CONT1 CONT2 CONT3

INICIO

START

;***********************************

REANTIR

MOVLW MOVWF

.3 CONT3

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

25

NIVEL 1 PIC 16F628 MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO RETURN END .180 CONT2 .200 CONT1 CONT1,F $-1 .200 CONT1 CONT2,F $-5 .180 CONT2 CONT3,F $-9

TEORIA Y PRACTICA

;DECREMENTE CONT1-1 SALTA CUANDO LLEGA A 0 ;$-1 SIGNIFICA QUE RETROCEDA UNA LINEA ANTES ;SE RECARGA CONT1 POR EL ANIDAMIENTO ;DECREMENTE CONT2-1 SALTA CUANDO LLEGA A . ;CERO ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA ;SE RECARGA CONT2 POR EL ANIDAMIENTO ;RETROCEDE 9 LINEAS EN EL PROGRAMA ;CUANDO CONT3 SEA CERO RETORNA DE DONDE SE ;LLAM .

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

26

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 4 ENCENDIDO DE LEDS MEDIANTE LA LECTURA DE UN DIPSUICHE


El objetivo es esta vez es la se segn la posicin del dipsuiche, encender o apagara dos leds, uno para cada uno respectivamente. Esto se hace con el fin de segn un dato especifico seleccionado en los dos dipsuiches, el PIC efecte 4 acciones diferentes, sea un led encendido(RB0), y el otro apagado(RB1), situacin contraria, RB0 apagado y RB1 encendido, ambos encendidos o ambos apagados. Para estas situaciones, a pesar que el dipsuiche es un interruptor, no necesitamos retardo de antirrebote, debido a que su estado ser absoluto, osea, una posicin es solo encendido y la otra solo apagado.

ASPECTO FISICO DE ALGUNOS DIPSUICHES Estos dipsuiches poseen internamente 8, 5 3 o varias cantidades de interruptores pequeos en un solo paquete lineal, a eso es su prefijo DIP (dual in line package), su ventaja es el poco espacio que usan en un circuito, y que relativamente son econmicos, teniendo en cuenta la cantidad y espacio que ocupan. NUESTRO CIRCUITO DE PRACTICA El objetivo ser el de que segn estado de los dipsuiches, nos encender unos leds, un led por cada dipsuiche, en la practica se implementan dos dipsuiches, conectados por RB7 y RB6 y los leds de respuesta estarn conectados respectivamente por RB0 y RB1 El PIC funcionara de forma que siempre estar chequeando los estados de las entradas correspondientes a la conexin con los dipsuiches, y apenas detecta un cambio, entonces efectuar el encendido o apagado, estas operaciones se hacen tan rpido que para nuestros ojos parece inmediato. Veamos el diagrama de flujo para entender mejor el como corre el programa

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

27

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO DEL CIRCUITO INICIO Configuracin de . puertos Borra PORTB

RB7=0 ?
NO

SI

SI

0 => RB0
NO

RB6=0 ?

0 => RB1

1 => RB0
SI

1 => RB1

RB6=0 ?
NO

0 => RB1

0 => RB1

DIAGRAMA ESQUEMATICO DEL CIRCUITO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

28

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA PARA LA PRACTICA CON EL DIPSUICHE LIST P=16F628 INCLUDE <P16F628.INC>


ORG GOTO ORG BSF MOVLW MOVWF BCF CLRF BTFSC GOTO BCF BTFSC 00 INICIO 05 STATUS,RP0 B'11111100' TRISB STATUS,RP0 PORTB PORTB,7 RB0ON PORTB,0 PORTB,6

INICIO

;SELECCIONA BANCO1 ;RB7 Y RB6 ENTRADAS POR DIPSUICHE Y RB0 Y ;RB1 SALIDAS HACIALOS LEDS ;AL BANCO0 ;BORRAR EL PUERTOB ;PREGUNTA POR EL ESTADO DEL DIPSUICHE EN . ;RB7 ;APAGA EL LED DE RB0 DEL DIP DE RB7 ;PREGUNTA POR EL ESTADO DEL DIPSUICHE EN . ;RB6 LED DE RB0 DEL DIP DE RB6

START .

GOTO RB1ON BCF PORTB,1 ;APAGA EL GOTO START ;***************************** RB0ON BSF PORTB,0 BTFSC PORTB,6 ;PREGUNTA ;RB6 GOTO RB1ON BCF PORTB,1 ;APAGA EL GOTO START ;VUELVE A ;***************************** RB1ON BSF PORTB,1 GOTO START END

POR EL ESTADO DEL DIPSUICHE EN . LED DE RB0 DEL DIP DE RB6 LEER ESTADO DE LOS DIPSUICHE

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

29

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 5 MANEJO DE UNA TABLA DE DATOS PARA MANEJAR UN DISPLAY DE CATODO COMUN
El uso de las tablas en los programas con los PIC es muy usado, pues su principal funcin es la de un dato convertirlo en otro, parta hacer equivalencias o que un numero especial nos lo represente con otros valores, que este va a ser nuestro caso, pues si conectamos un display, que son 7 leds en un paquete, el cual tiene como funcin la de representar con iluminacin los diferentes nmeros decimales (0 al 9), y algunas letras que se pueden formar con este display. Los displays existen de dos tipos, de ctodo comn y de nodo comn, su diferencia radica en que los ctodos estn todos unidos y en el otro son los nodos respectivamente.

DISPLAY conexin de LEDS (ctodo comn y nodo comn) CATODO ANODO Ejemplos de
Ahora teniendo en cuenta que los display son leds, entonces, si encendemos los leds adecuados, entonces formaremos un numero segn el encendido, por lo que debemos conectar cada segmento a un puerto del pic, para poder coordinar segn el encendido que numero deseamos visualizar MANEJO O FUNCION DE UNA TABLA DE DATOS Empezamos por mencionar que en los registros de 8 bits, el valor numrico de 5 por ejemplo seria en binario B00000101 y en hexadecimal 0X05, si conectramos los 7 segmentos al puerto B, iniciando el segmento A del display con el pin RB1 y as hasta llegar a segmento G con el pin RB7

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

30

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

TABLA DE DATOS DE UN DISPLAY C.C


PIC RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
DATO g f e d c b a

0 1 2 3 4 5 6 7 8 9

0 0 1 1 1 1 1 0 1 1

1 0 0 0 1 1 1 0 1 1

1 0 1 0 0 0 1 0 1 0

1 1 1 1 0 1 1 0 1 1

1 1 0 1 1 1 1 1 1 1

1 0 1 1 1 0 0 1 1 1

1 0 1 1 0 1 1 1 1 1

0 0 0 0 0 0 0 0 0 0

CONECCION ENTRE EL PIC Y EL DISPLAY


CATODO COMUN

Para hacer esta conversin se implementan en este caso una tabla, pues en ella se establece el factor de conversin, el cual es fcil de manipular, eso si teniendo mucho cuidado al hacer estas supuestas conversiones, ahora veamos como funciona. Ahora mencionare una instruccin que se encarga de retornar de una subrutina, y se llama RETLW, esta es muy semejante en su funcin al RETURN, solo que adems se devuelve cargando al registro w con el valor que se le especific, veamos un ejemplo: RETLW B00000001
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

31

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Cuando el programa se encuentra con esta instruccin, la orden es que retorne del ultimo llamado de una subrutina (cuando se usa un CALL), cargando a W con el valor indicado en este caso, despus de la orden, w tiene almacenado el valor de B00000001 Vamos a utilizar otra nueva instruccin, llamada ADDWF, que en si es encargada de sumar el valor contenido en el registro W mas el registro que se le indique, y el resultado puede destinarse al mismo W o al registro con el que se efectu la suma. Hagamos un ejemplo: Digamos que en el registro REG1, esta almacenado un valor de 5 en decimal, y luego cargamos a W con un valor cualquiera comprendido entre 0 y 255, digamos que cargamos a W con 3, y cuando ejecuta la instruccin ADDWF REG,F, significa que el contenido de W se sumara con el contenido del registro REG1 y que lo almacene en el mismo registro REG1, lo que quiere decir que despus de la suma, el contenido de REG1 ya no es 5 sino 8. MOVLW MOVWF MOVLW ADDWF .5 ;SE CARGA A W PARA LUEGO AL REGISTRO REG1 REG1 ; AHORA REG1 VALE 5 .3 ;SE CARG A W CON 3 REG1,F ;SE SUMA EL CONTENIDO DE REG1 CON W Y SE ;GUARDA EN EL REGISTO REG1

Bien ahora que sabemos como esta funcionando esta instruccin, ahora se comentara de un registro especial que implementa el PIC y se llama contador del programa, el cual consta de 2 registros de 8 bits, pero en total solo se manipulan 13 bits y no 16 como puede llegar a pensarse, el cual se llaman la parte menor PCL y la parte mayor PCLATH o PCH, la parte menor de 8 bits y la parte mayor de 5 bits, un poco mejor ejemplificado en la siguiente figura:
PCH 12 8 PCL 0

PC
PCLATH <4:0> 8 RESULTADO DE LA ALU

PCLATH
PCH 12 11 10 PCL 0

PC
11 DESDE EL CODIGO OP 2

PCLATH

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

32

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

El nuestro caso se manipulara mas que todo el registro PCL, ya que direcciona la parte menor de la memoria del programa, y es importante aclarar que estas tablas siempre deben ubicarse al comienzo de programa (ORG 05), pues despus de que el PCL supera a 255, vuelve a cero, y nuestra tabla quedara fraccionada en dos partes y lo mas seguro es que no va a funcionar como debera, aunque existen tcnicas para compensar esta situacin, que tienen que ver al manipular el PCH o PCLATH, en nuestro caso estn fuera del tema a tratar, quizs porque no vamos a implementar una tabla tan grande que abarque 255 lneas del programa. .Ahora que mencionamos el registro especial PCL y comentamos sobre la instruccin de sumar ADDWF, trataremos de decir cual es el truco de las tablas para que funcionen y podamos visualizar en el display el numero que deseamos. Digamos que el contenido del registro al que llamamos CONTA, posee como valor de contenido el numero 0, y deseamos visualizar en el display el numero cero, quiere decir que el valor binario de cero (b00000000), debo pasarlo a un valor que encienda los respectivos segmentos, teniendo en cuenta que el segmento A del display esta conectado al puerto RB1, el valor seria as (b01111110), recordemos que en el caso el bit 0 (RB0) no se uso debido a que no esta conectado con el display, y lo colocaremos como valor de cero y movemos este valor al puerto B. Ahora veamos que hizo en s el programa para esta conversin: Imaginemos que tenemos a CONTA con un valor de 0, MOVLW MOVWF .0 CONTA

Ahora vamos a llamar la subrutina anterior llamada tabla: CALL TABLA

Entonces cuando llegamos a la subrutina llamada tabla tendr este aspecto


TABLA ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW PCL,F B'01111110' B'00001100' B'10110110' B'10011110' B'11001100' B'11011010' B'11111010' B'00001110' B'11111110' B'11011110' ;ENCIENDE EN EL DISPLAY EL CERO ;ENCIENDE EL UNO ;ENCIENDE EL DOS ;ENCIENDE EL TRES ;ENCIENDE EL CUATRO ;ENCIENDE EL CINCO ;ENCIENDE EL SEIS ;ENCIENDE EL SIETE ;ENCIENDE EL OCHO ;ENCIENDE EL NUEVE

Ahora la instruccin que se encuentra frente a la etiqueta de tabla es la de sumar el contenido de w al PCL o contador del programa, que puede ser cualquier valor, no mayor que 240, y le sumara cero, en consecuencia, ejecutar la siguiente lnea de instruccin, debido a que la suma no afecto el contenido de PCL y se encontrara con esta instruccin:
RETLW B'01111110' ;ENCIENDE EN EL DISPLAY EL CERO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

33

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Recuerdan que valor se necesitaba para iluminar en el display el cero? Si observan bien w se cargara con este valor, y retornara de esta subrutina y ahora que tenemos el valor para encender los led que corresponden al cero, se har esto: MOVLW MOVWF CALL MOVWF .0 CONTA TABLA PORTB

Y as enviando esto se encender el display con el smbolo de cero, pero que pasa si vale por ejemplo 7? Hagmoslo nuevamente MOVLW MOVWF CALL .7 CONTA TABLA

Bien, ahora que tenemos el valor de siete y se suma con el PCL, este apuntara 7 lneas abajo, mas exactamente a: RETLW B'00001110' ;ENCIENDE EL SIETE

Y por consecuencia de la instruccin, volver del llamado, pero esta vez con la informacin para encender el display y que se visualice el numero 7 MOVWF PORTB NUESTRO PRIMER CIRCUITO DE PRUEBA Esta vez vamos a hacer un circuito que nos muestre los nmeros del 0 al 9 como si fuera un contador ascendente, y cuando llegue a 9 , vuelva a cero. Esta funcin se llevara a cabo mediante otra instruccin que ser nueva esta vez pero no difcil de entender, pues su misin es la de sumar +1 un registro o mas bien incrementarlo en una unidad, y su resultado se podr guardar sea en el mismo registro que incrementamos (lo mas comn) o dejarlo en el registro W. Esta es la instruccin: INCF. Veamos un ejemplo: si deseamos empezar a contar desde cero y que vaya mostrando los nmeros, vamos encargar el trabajo de que lleve este control un registro al que llamaremos por ejemplo CONTA, recordemos que empieza de cero, y despus de la instruccin va a quedar en su contenido 1 CLRF CONTA INCF CONTA,F ;DEJAMOS CONTA EN CERO ;INCREMENTA EN UNO EL REGISTRO CONTA

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

34

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Otra comando a implementar, tiene como funcin mover el contenido de un registro al registro W o al mismo (esta funcin de moverlo al mismo registro se hace para que con este movimiento afecte las banderas de cero (Z) carry o acarreo (C), y las otras banderas implementadas en el registro status.), y esta se llama MOVF, lo que quiere decir mover al registro, y seleccionamos el destino, ya comentado, quiere decir w o el mismo registro, pero hagamos otro ejemplo: CLRF INCF MOVF CONTA CONTA,F CONTA,W ;CONTA =0 ;CONTA +1 Y LO GUARDA EL RESULTADO EN CONTA ;EL CONTENIDO DE CONTA SE COPIO EN W

Bien hasta ahora se ha explicado como trabaja, pero si deseamos mover el contenido, por ejemplo del registro CONTA a PORTB, se hara esto: MOVF MOVWF CONTA,W PORTB ;CONTENIDO DE CONTA A W ;EL CONTENIDO DE W SE COPIO EN EL PORTB

Observamos que entr otra instruccin, llamada MOVWF, ella hace que el contenido actual de W, sea destinado a un registro cualquiera que permita escribirse o los registros que cada uno de nosotros asignemos en la memoria RAM. Ahora con estos movimientos de datos, veamos en que ayudan a nuestro contador: INCF MOVF CALL MOVWF CONTA,F CONTA,W TABLA PORTB ;INCREMENTA A CONTA +1 Y LO GUARDA EN CONTA ;COPIA EL CONTENIDO DE CONTA EN W ;NUESTRA TABLA DE DATOS ;EL DATO CONVERTIDO EN LA TABLA ESTA EN W Y ES ;LLEVADO AL PUERTOB

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

35

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO DEL CONTADOR ASCENDENTE

TABLA
PCL= PCL + W RETORNE B01111110 RETORNE B00000110 RETORNE B10110110 RETORNE B10011110 RETORNE B11001100 RETORNE B11011010

INICIO
CONFIGURAC. DEL PIC

BORRAR PORTB

BORRAR CONTA

CONTA => W RETARDO TABLA

RETORNE B11111010 RETORNE B00001110 RETORNE B11111110 RETORNE B11011110

NO
W => PORTB
CONTA = 10?

CONTA =CONTA+1

SI
BORRAR CONTA

DIAGRAMA ESQUEMATICO PARA AMBOS CIRCUITOS CATODO COMUN

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

36

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA EN MPLAB PARA EL CONTADOR ASCENDENTE


LIST INCLUDE EQU EQU EQU EQU ORG GOTO ORG TABLA ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW BSF MOVLW MOVWF BCF CLRF CLRF CALL MOVF CALL MOVWF INCF MOVLW SUBWF P=16F628 <P16F628.INC> 20 21 22 23 00 INICIO 05 PCL,F B'01111110' B'00001100' B'10110110' B'10011110' B'11001100' B'11011010' B'11111010' B'00001110' B'11111110' B'11011110' STATUS,RP0 B'00000001' TRISB STATUS,RP0 PORTB CONTA RETARDO CONTA,W TABLA PORTB CONTA,F .10 CONTA,W ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE EN EL EL EL EL EL EL EL EL EL EL DISPLAY EL CERO UNO DOS TRES CUATRO CINCO SEIS SIETE OCHO NUEVE

CONTA CONT1 CONT2 CONT3

INICIO

;SELECCIONA BANCO1 ;DE RB7 A RB1 SALIDAS Y RB0 ENTRADA ;AL BANCO0 ;BORRAR EL PUERTOB ;BORRAMOS EL REGISTRRO DEL CONTEO ;ENVIAMOS EL CONTENIDO A W ;LLAMA LA TABLA PARA TRAER LOS DATOS PARA ;ENCENDER LOS LED DEL DISPLAY ;LO DE LA TABLA VA AL PUERTO DONDE ESTA ;EL DISPLAY DE CATODO COMUN ;SUMAMOS 1 A CONTA ;MIRAMOS SI CONTA ES IGUAL A 10, SI LO ES ;LA RESTA SERA IGUAL A CERO Y AFECTARA EL ;FLAG Z ;PREGUNTAMOS SI LA OPERACION DIO CERO ;SI NO VUELVA A START

START

BTFSS STATUS,Z GOTO START CLRF CONTA GOTO START ;********************************************************************* RETARDO MOVLW .6 MOVWF CONT3 MOVLW .250 MOVWF CONT2 MOVLW .250 MOVWF CONT1 DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

37

NIVEL 1 PIC 16F628 DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO RETURN END CONT1,F $-1 .250 CONT1 CONT2,F $-5 .250 CONT2 CONT3,F $-9

TEORIA Y PRACTICA ;DECREMENTE LA VARIABLE CONT1-1 SALTA ;CUANDO LLEGA A 0 ;$-1 SIGNIFICA QUE RETROCEDA UNA LINEA ;ANTES ;SE RECARGA NUEVAMENTE EL REGISTRO POR ; El ANIDAMINETO ;DECREMENTE LA VARIABLE CONT2-1 SALTA ;CUANDO LLEGA A CERO ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA ;SE RECARGA CONT2 POR EL ANIDAMIENTO ;RETROCEDE 9 LINEAS EN EL PROGRAMA ;CUANDO CONT3 SEA CERO RETORNA DE DONDE ; SE LLAM

CONTADOR ASCENDENTE Y DESCENDENTE


A complemento del anterior circuito, vamos a aadir que haga la siguiente funcin: contara de cero a nueve y cuando llegue a 9 descienda a cero y vuelva y se repita el ciclo. Hasta ahora estbamos observando solo incrementos de +1 (INCF), y su compaera que efecta salto cuando el conteo se desborda a cero (INCFSZ), ahora vamos a usar sus antnimas, esto es que resta 1 (DECF) y su compaera que resta 1 y salta cuando llega a cero (DECFSZ). Es de aclara que cuando me refiero a salta es que salta una lnea del programa si las condiciones que exige este comando se dan. No se confundan, es mas fcil de lo que creen, y ahora se va a ejemplificar: Primero volvamos a llamar a nuestro registro CONTA, solo que esta vez imaginaremos que tiene en su contenido el valor de nueve, y lo vamos a restar, solo que esta vez, se supervisara cuando este conteo llega a cero
OTRAV DECFSZ GOTO GOTO ; END CONTA,F OTRAV FIN ;RESTE -1 DE CONTA Y GUARDA EN CONTA ;SI LA RESTA NO DIO 0,DIRIJASE A LA ETIQUETA ;OTRAV ;SI SE DIO EL SALTO ES POR QUE CONTA LLEGO A ;CERO Y POR LO TANTO SE DIRIGIRA A LA . ; ETIQUETA FIN

Es de mencionar que tanto el anterior ejemplo como en este se dio un retardo entre conteo y conteo, esto con el fin de que se puedan visualizar los retardos y ver los nmeros , ya que si no se hace esto, los nmeros no se veran de lo rpido que ira el conteo

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

38

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO INICIO CONFIGURAC PIC BORRAR PORTB BORRAR CONTA CONTA => W TABLA W => PORTB
CONTA=CONTA+1

CONTA = 10? SI W = .9 W => CONTA CONTA => W TABLA W => PORTB

NO RETARDO

NO SI CONTA = 10?

CONTA=CONTA-1

PROGRAMA EN MPLAB PARA EL CONTADOR ASCENDENTE Y DESCENDENTE


LIST INCLUDE P=16F628 <P16F628.INC>

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

39

NIVEL 1 PIC 16F628 CONTA CONT1 CONT2 CONT3 EQU EQU EQU EQU ORG GOTO ORG TABLA ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW BSF MOVLW MOVWF BCF CLRF CLRF CALL MOVF CALL MOVWF INCF MOVLW SUBWF BTFSS GOTO MOVLW MOVWF CALL MOVF CALL MOVWF DECFSZ GOTO GOTO 20 21 22 23 00 INICIO 05 PCL,F B'01111110' B'00001100' B'10110110' B'10011110' B'11001100' B'11011010' B'11111010' B'00001110' B'11111110' B'11011110' ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE EN EL EL EL EL EL EL EL EL EL

TEORIA Y PRACTICA

EL DISPLAY EL CERO UNO DOS TRES CUATRO CINCO SEIS SIETE OCHO NUEVE

INICIO

STATUS,RP0 ;SELECCIONA BANCO1 B'00000001' TRISB ;DE RB7 A RB1 SALIDAS Y RB0 ENTRADA STATUS,RP0 PORTB CONTA RETARDO CONTA,W TABLA PORTB CONTA,F .10 CONTA,W STATUS,Z ARRIBA .9 CONTA RETARDO CONTA,W TABLA PORTB CONTA,F ABAJO ARRIBA ;AL BANCO0 ;BORRAR EL PUERTOB ;BORRAMOS EL REGISTRRO DEL CONTEO ;ENVIAMOS EL CONTENIDO A W ;LLAMA LA TABLA PARA TRAER LOS DATOS PARA ;ENCENDER LOS LED DEL DISPLAY ;LO DE LA TABLA VA AL PUERTO DONDE ESTA EL ;DISPLAY DE CATODO COMUN ;SUMAMOS 1 A CONTA ;MIRAMOS SI CONTA ES IGUAL A 10, SI LO ES LA ;RESTA SERA IGUAL A CERO Y AFECTARA EL FLAG Z ;PREGUNTAMOS SI LA OPERACION DIO CERO ;SI NO VUELVA A START ;SE CARGA CON NUEVE PARA DESCENSO ;HACIA CONTA ;RETARDO PARA VER NUMERO A NUMERO ;MOVEMOS EL CONTENIDO DE CONTA A W ;PARA LLAMAR LA TABLA ;HACIA EL DISPLAY ;RESTA -1 A CONTA SI ES CERO SALTA

ARRIBA

ABAJO

;********************************************************************* RETARDO MOVLW MOVWF .6 CONT3

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

40

NIVEL 1 PIC 16F628 MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO RETURN END .250 CONT2 .250 CONT1 CONT1,F $-1 .250 CONT1 CONT2,F $-5 .250 CONT2 CONT3,F $-9

TEORIA Y PRACTICA

;DECREMENTE LA VARIABLE CONT1-1 SALTA CUANDO ;LLEGA A 0 ;$-1 SIGNIFICA QUE RETROCEDA UNA LINEA ANTES ;SE RECARGA NUEVAMENTE EL REGISTRO POR EL ;ANIDAMINETO ;DECREMENTE LA VARIABLE CONT2-1 SALTA CUANDO ;LLEGA A CERO ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA ;SE RECARGA CONT2 POR EL ANIDAMIENTO ;RETROCEDE 9 LINEAS EN EL PROGRAMA ;CUANDO CONT3 SEA CERO RETORNA DE DONDE SE ;LLAM

PRACTICA 6 666
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

41

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

MANEJO DE UN DISPLAY DE ANODO COMUN CON UN DECODIFICADOR TTL 7447


A diferencia del manejo de una tabla, si observamos cuando el valor de un registro cuando lo movemos a un puerto, este valor esta en binario. Cuando este valor binario esta comprendido entre 0 y 15 (0000 y 1111), existe un decodificador que se encarga de manejar y manipular cada led del display, esto es el dato binario es enviado al decodificador, y este reconoce el valor binario y enciende el numero que representa, por ejemplo si enviamos en binario 0010 (2 en decimal) al decodificador, entonces este sabe que es el numero 2 y encender en el display en numero dos con los segmentos de este display. Es de mencionar que a diferencia del display de ctodo comn, con el cual los leds se activaban cuando llegaba un uno o 5V; en el de nodo comn ocurre lo contrario, sus nodos estn conectados en comn con 5V y sus ctodos se activaran con cero o 0V.

DECODIFICADOR BCD / 7 SEGMENTOS - CI TTL 7447


Una de las maneras mas usadas para mostrar datos numricos y alfanumricos en electrnica digital utilizando un 'display de 7-segmentos' constituido por un arreglo de los diodos emisores de luz (LEDs), un diodo para cada segmento. El arreglo de leds puede ser conectado como ctodo-comn o nodo-comn como se muestra en la figura de abajo.

DISPLAY

CATODO COMUN

ANODO COMUN

En los display de tipo ctodo-comn, todos los ctodos de leds son conectados a 0V. Los segmentos individuales son aplicados a 5V por nodo de cada led. Para los display nodo-comn, todos los nodos son ligados a Vcc en general de 5V. Cada segmento individual puede conectarse de 0V por ctodo de led de segmento seleccionado.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

42

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Las cuatro entradas binarias del circuito integrado 74LS47 permiten 16 combinaciones diferentes de entrada.

ANODO COMUN

Pines del decodificador 7447, se ilustra en letras maysculas A,B,C,D, con referencia a las entradas binarias y las letras minsculas a la salida a los respectivos segmentos del display de nodo comn

DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

PORTA
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1

B.C.D
0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 1 0 1

HEXADEC 0 1 2 3 4 5 6 7 8 9 A B C D E F

RA3 RA2 RA1 RA0 D C B A

Es importante aclarar que si se deseara conectar el PIC directamente con el display de nodo comn, simplemente debemos cambiar los valores de la tabla y cambiar los unos por ceros y viceversa, pero se sale del tema de esta practica, pues seria como repetir tema.
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

43

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

NUESTRA PRACTICA Esta vez a diferencia de la practica No 5, se efectuara un contador ascendente y descendente, solo que la salida va por el puerto A, pero en la lgica sigue siendo la misma, a diferencia es que esta vez no se implementara una tabla de datos, sino que el dato se enviara tal como esta al puerto A, eso si teniendo en cuenta que el 7447 solo maneja 4 bits, por lo que los otros cuatro bits mas significativos, no se podrn leer. Pero es importante destacar, aunque no es el objetivo del modulo, de que para manipular el puerto A del PIC 16f628, se le debe decir al PIC que este puerto va a trabajar como puertos de entradas y salidas digitales, pues el PIC posee incorporado un modulo de manejo de los comparadores, el cual maneja el puerto A como puerto anlogos, ,y si no especificamos primero que deseamos que estos puertos sean digitales, existirn conflictos y el programa no se ejecutara como deseamos. Se encontrara en el programa a iniciar la siguiente sentencia: INICIO MOVLW MOVWF .7 CMCON

Esto quiere decir que el registro encargado de manipular estos comparadores es el registro CMCON, y se carga con el valor de 7, el cual identifica este valor como dejar el puerto A como entradas / salidas digitales. Mas informacin estar disponible en otra practica. El programa va a ejecutar un contador ascendente y descendente, muy semejante a la practica anterior.

DIAGRAMA DE FLUJO DEL CONTADOR ASCENDENTE Y DESCENDENTE INICIO


DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

44

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

CONFIG PIC CMCON => .7

BORRAR PORTA
BORRAR CONTA

CONTA => W W => PORTA CONTA + 1 NO CONTA = 10? SI W = .9 NO W => CONTA CONTA => W W => PORTA CONTA=CONTA-1 CONTA = 10? SI RETARDO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

45

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA ESQUEMATICO DEL CONTADOR ASCENDENTE Y DESCENDENTE CON DECODIFICADOR


ANODO COMUN

PROGRAMA PARA EL CONTADOR CON EL DECODIFICADOR


LIST INCLUDE EQU EQU EQU EQU ORG GOTO ORG MOVLW MOVWF BSF MOVLW MOVWF BCF CLRF CLRF CALL MOVF MOVWF INCF MOVLW SUBWF BTFSS P=16F628 <P16F628.INC> 20 21 22 23 00 INICIO 05 .7 CMCON ;ESTO SE HACE PARA QUE EL PUERTOA SIRVA COMO ;I/O DIGITALES INHABILITA EL MDULO DE ;COMPARADORES STATUS,RP0 ;SELECCIONA BANCO1 B'11110000' TRISA ;DE RA3 A RA0 SALIDAS STATUS,RP0 ;AL BANCO0 PORTA ;BORRAR EL PUERTOA CONTA ;BORRAMOS EL REGISTRRO DEL CONTEO RETARDO CONTA,W ;ENVIAMOS EL CONTENIDO A W PORTA ;PUERTO DONDE ESTA EL DISPLAY DE AC CONTA,F ;SUMAMOS 1 A CONTA .10 CONTA,W ;SI CONTA ES IGUAL A 10, SI LO ES LA ;RESTA SERA = A CERO Y AFECTARA EL FLAG Z STATUS,Z ;PREGUNTAMOS SI LA OPERACION DIO CERO

CONTA CONT1 CONT2 CONT3

INICIO

ARRIBA

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

46

NIVEL 1 PIC 16F628 GOTO ARRIBA ;SI NO VUELVA A START

TEORIA Y PRACTICA

MOVLW .9 ;SE CARGA CON NUEVE PARA DESCENSO MOVWF CONTA ;HACIA CONTA ABAJO CALL RETARDO ;RETARDO PARA VER NUMERO A NUMERO MOVF CONTA,W ;MOVEMOS EL CONTENIDO DE CONTA A W MOVWF PORTA ;HACIA EL DISPLAY DECFSZ CONTA,F ;RESTA -1 A CONTA SI ES CERO SALTA GOTO ABAJO GOTO ARRIBA ;********************************************************************* RETARDO MOVLW .6 MOVWF CONT3 MOVLW .250 MOVWF CONT2 MOVLW .250 MOVWF CONT1 DECFSZ CONT1,F ;DECREMENTE CONT1-1 SALTA CUANDO ;LLEGA A 0 GOTO MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO RETURN END $-1 .250 CONT1 CONT2,F $-5 .250 CONT2 CONT3,F $-9 ;$-1 SIGNIFICA QUE RETROCEDA UNA LINEA ANTES ;SE RECARGA NUEVAMENTE EL REGISTRO POR EL ;ANIDAMINETO ;DECREMENTE LA VARIABLE CONT2-1 SALTA CUANDO ;LLEGA A CERO ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA ;SE RECARGA CONT2 POR EL ANIDAMIENTO ;RETROCEDE 9 LINEAS EN EL PROGRAMA ;CUANDO CONT3 SEA CERO RETORNA DE DONDE SE ;LLAM

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

47

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 7 MULTIPLEXADO DE DISPLAY DE CATODO COMUN PARA CONTADOR DE 00 A 99


Si nos ponemos a pensar en que muchos equipos poseen varios displays, existen dos formas comunes de hacerlos trabajar: una es que por cada display tengamos un decodificador como el 7447 o el 7448, y otra es usando solo un decodificador y jugando con los comunes de los display, el cual es el objetivo, solo que no vamos a usar un decodificador, sino una tabla de datos para ahorrarnos este integrado. El como funciona realmente tiene un poco de ciencia y fsica, esto porque ocurre lo siguiente al llamado refresco dinmico u otros nombres como se le conocen, pero realmente trata de esto: cuando vemos trabajar un par de displays de esta forma , se ve como si ambos estuvieran encendidos (que es la gracia), pero la realidad es muy diferente, pues si pudiramos percibir el tiempo en milisegundos, nos daramos de cuenta que esto es falso, debido a que cada display alumbrara de uno en uno intercaladamente y no todos al tiempo como aparentaba, esto se debe a un fenmeno ptico llamado a veces persistencia de visin, pues nuestros ojos solo pueden ver imgenes o acontecimientos separados una a una 24 imgenes por segundo, mas all de esta velocidad va a aparentar que se esta observando una solo imagen. Este mismo efecto es usado en el televisor y el los proyectores de cine. Tambin este efecto puede ser aprovechado por nosotros, pues principalmente porque simplifica el circuito, economiza componentes y espacio.

DISPLAYS DE CATODO COMUN

As funcionaria nuestros displays, primero entraramos a manipular el pin comn que posee estos displays en este caso de ctodo comn, lo que se hara es estar encendiendo y apagando secuencialmente los displays de esta forma: imaginemos que tenemos una subrutina, en la que poseemos 2 displays Llamados A y B. Al comienzo estn apagados como muestra la imagen: En ese momento RA1 y RA0 estn en 1, por lo que no prenden por que el comn para los de ctodo comn, debe ser polarizado con un cero .
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

48

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Ahora el siguiente paso seria enviar el dato para visualizar el numero 35, para ello se debe hacer primero es enviar el primer dato ,sea el 3 o el 5, para nuestro ejemplo empezaremos a enviar el dato para el encendido del numero 5, por el puerto B, pero a pesar que ambos displays tienen este dato, por ahora ninguno esta encendido, porque el comn no esta habilitado por ninguno de los pines de RA0 y RA1. Digamos que a partir de ahora habilitaremos RA1 colocando un cero para que se alimenten los leds, y ahora si se encendern los segmentos correspondientes al # 5.

DISPLAYS DE CATODO COMUN

Despus de que se mando la orden de encender este display, se debe dar un tiempo de retardo (del orden de milisegundos), para que los leds se alcancen a encender lo suficiente para iluminar, despus de este tiempo, se enviara un 1 por RA1 para apagar este display, y nos alistaremos para enviar el dato para encender el numero 3 en el display, y para ello de nuevo se llamar a la tabla para que se tenga el dato para encender los segmentos que forman el numero 3 y se enviaran al puerto B, pero en este momento tampoco se encender ningn display, solo hasta que se habilite el pin que controla el display (RA0). A partir que se ha descargado el valor en el puerto b, procedemos a activar con cero a RA0, y encender el display de esta forma.

DISPLAYS DE CATODO COMUN

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

49

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Bien, despus de este acontecimiento, se dar un retardo igual al anterior para que se enciendan bien los leds y se apagara cuando este retardo termine. Lo descrito anteriormente fue por decirlo as en cmara lenta porque si pusiramos a trabajar esta subrutina, se vera as:

DISPLAYS DE CATODO COMUN

Para que nos muestre estas cantidades, normalmente cada digito se almacena en un registro de la memoria, en la practica uno se llama UNID denotando las unidades, y DEC hace mencin a las decenas. FUNCIONAMIENTO DEL CONTADOR Si analizamos y recordamos bien, nuestra tabla manipulada anteriormente en otras practicas solo manipulaba del cero al nueve, entonces como hacemos para que nos lleve el conteo desde 00 hasta 99, mas exactamente cuando pasa de 9 a 10, etc.? La respuesta es de esta forma. Cuando tenamos un registro desde cero (en este caso UNID), lo bamos incrementando, pero cuando llega a 10, en decimal se requiere de otro digito para representar el 10, esto quiere decir que cuando incrementbamos y llegamos a 10, se preguntaba en el programa que si ya haba llegado UNID a 10, si no, continuara incrementando, pero en caso contrario, sencillamente borrbamos UNID, y el registro DEC lo incrementbamos en una unidad, as se soluciona el problema, y podemos amplificar este mtodo cuantos registros necesitemos. Para ilustrarlo mas claro, se observar mejor en el diagrama de flujo NUESTRO CIRCUITO DE PRACTICA Esta vez nuestro contador se encargara de efectuar un conteo de 00 a 99 y volver a repetir este ciclo, y cada incremento lo har cada segundo mas o menos. El objetivo de esta practica era la de aplicar el multiplexado de los displays, y entender su tcnica. Es de aclarar que existen muchas formas de lograr el multiplexado, pero todas parten del mismo principio por lo que esta tcnica no es la nica y absoluta. Manipular 3 subrutinas: una la ya conocida tabla de conversin, otra subrutina un retardo que servir como tiempo de visualizacin entre dato y dato y tambin entre incremento e

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

50

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

incremento, otro retardo tendr la misin del tiempo de refresco entre display y display, y es menor que el anterior retardo en cuanto a tiempo. Como caso especial en el programa del retardo de visualizacin, vemos que se encuentra la rutina de mostrar entre la del retardo, esto es porque si se hacen rutinas individuales, el efecto seria el de ver un breve tiempo los nmeros en el display y mas o menos 1 segundo apagado, debido a que el PIC no puede hacer 2 actividades a la vez, entonces lo que se hace es por cada decremento del retardo de visualizacin, se repite la subrutina de mostrar, para que siempre estn iluminados. Tambin es de mencionar que por estar manipulando el puerto A, debemos escribir en el CMCON el dato de 7, para dejar los pines del puerto A como puertos digitales. DIAGRAMA DE FLUJO DEL PROGRAMA INICIO
CONFIG DE BANCOS BORRAR PORTB BORRAR PORTA BORRAR UNID BORRAR DEC

RETARDO
CONT1=> .250 CONT2 => .250

MOSTRAR
CONT1 = CONT1+1

RETARDO
UNID= UNID+1

NO NO
CONT1 = 10?

UNID = 10?

SI

SI
UNID = 0 DEC= DEC+1

CONT1 =>.250
CONT2 = CONT2+1

NO NO SI RETURN
CONT1 = 10?

DEC = 10?

SI DEC = 0

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

51

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

MOSTRAR UNID => W DEC => W

TABLA W=> PORTB

TABLA W=> PORTB

1=> RA0

1=> RA1

REFRSCO 0=> RA0

REFRESCO 0=> RA1

RETURN

DIAGRAMA ESQUEMATICO DEL CIRCUITO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

52

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA EN MPLAB PARA LA PRACTICA DE MULTIPLEXADO Y EL CONTADOR DE 00 A 99


LIST INCLUDE
UNID CONT1 CONT2 CONT3 CONT4 CONT5 DEC EQU EQU EQU EQU EQU EQU EQU ORG GOTO ORG ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MOVLW MOVWF BSF MOVLW MOVWF MOVLW MOVWF BCF CLRF CLRF CLRF CLRF CALL INCF MOVLW SUBWF BTFSS GOTO CLRF INCF MOVLW SUBWF BTFSS GOTO CLRF CLRF GOTO

P=16F628 <P16F628.INC>
20 21 22 23 24 25 26 00 INICIO 05 PCL,F B'01111110' B'00001100' B'10110110' B'10011110' B'11001100' B'11011010' B'11111010' B'00001110' B'11111110' B'11011110' .7 CMCON STATUS,RP0 B'00000000' TRISB B'00000000' TRISA STATUS,RP0 PORTB PORTA UNID DEC RETARDO UNID,F .10 UNID,W STATUS,Z ARRIBA UNID DEC,F .10 UNID,W STATUS,Z ARRIBA DEC UNID ARRIBA

TABLA

;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE

EN EL EL EL EL EL EL EL EL EL

EL DISPLAY EL CERO UNO DOS TRES CUATRO CINCO SEIS SIETE OCHO NUEVE

INICIO

;PARA DESHABILITAR LOS COMPARADORES Y ;DEJAR DIGITAL EL PUERTO A ;SELECCIONA BANCO1 ;DE RB7 A RB0 SALIDAS ;DE RA0 A RA4 COMO SALIDAS ;AL BANCO0 ;BORRAR EL PUERTOB

ARRIBA

;EN EL RETARDO SE INCLUYE LA VISUALIZACION ;MULTIPLEXADA ;SUMAMOS 1 A UNID COMO UNIDADES ;MIRAMOS SI CONTA ES IGUAL A 10, SI LO ES LA ;RESTA SERA IGUAL A CERO Y AFECTARA Z ;PREGUNTAMOS SI LA OPERACION DIO CERO ;SI NO VUELVA A START ;DEJAMOS A UNID EN CERO ;INCREMENTO EN +1 A DEC COMO DECENAS ;MIRAMOS SI EL CONTENIDO DE DEC ES IGUAL A 10 ;BORRA A DEC Y EL CONTEO VUELVE A CERO ;BORRA TAMBIEN UNID

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

53

NIVEL 1 PIC 16F628


RETARDO MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CALL DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO .2 CONT3 .10 CONT2 .10 CONT1 MOSTRAR CONT1,F $-2 .10 CONT1 CONT2,F $-6 .10 CONT2 CONT3,F $-.10

TEORIA Y PRACTICA

;SUBRUTINA ENCARGADA DE VISUALIZAR LOS DATOS ;EN LOS DISPLAYS ;DECREMENTE LA VARIABLE CONT1-1 SALTA CUANDO ;LLEGA A 0 ;$-2 SIGNIFICA QUE RETROCEDA DOS LINEA ANTES ;SE RECARGA NUEVAMENTE EL REGISTRO POR EL ;ANIDAMINETO ;DECREMENTE LA VARIABLE CONT2-1 SALTA CUANDO ;LLEGA A CERO ;$-7 RETROCEDE 7 LINEAS EN EL PROGRAMA ;SE RECARGA CONT2 POR EL ANIDAMIENTO

;RETROCEDE 11 LINEAS EN EL PROGRAMA, EL ;PUNTO ES PARA DECIRLE QUE EL DATO ES EN ;DECIMAL RETURN ;CUANDO CONT3 SEA CERO RETORNA DE DONDE SE ;LLAM ;***************************************************** MOSTRAR CLRF PORTA MOVF UNID,W ;SE MUEVE EL CONTENIDO DE UNID A W CALL TABLA ;SE LLAMA LA TABLA MOVWF PORTB BSF PORTA,1 ;SE ACTIVA EL DISPLAY DE UNIDADES CALL RETVER ;RETARDO DE VISUALIZACION Y REFRESCO BCF PORTA,1 ;SE APAGA DISPLAY DE UNIDADES MOVF DEC,W ;DE DEC A W CALL TABLA ;TABLA PARA EL ENCENDIDO DE LOS DISPLAYS MOVWF PORTB BSF PORTA,0 ;SE ENCIENDE DISPLAY DE DECENAS CALL RETVER ;RETARDO DE VISUALIZACION BCF PORTA,0 RETURN ;************************************** RETVER ;RETARDO DE VISUALIZACION DE LOS DISPLAYS MOVLW .100 MOVWF CONT4 MOVLW .10 MOVWF CONT5 DECFSZ CONT4,F GOTO $-1 MOVLW .100 MOVWF CONT4 DECFSZ CONT5,F GOTO $-5 RETURN END

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

PRACTICA 8

54

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

ROTACIN DE UN DATO A TRAVES DE UN REGISTRO


La practica en esta ocasin consistir en la utilizacin de dos instrucciones, cuya accin es la de rotar el valor de un registro en sentido a la derecha o a la izquierda. En esta practica se har con 8 leds rotar la iluminacin como si fuera las luces de KITT de esa serie de TV llamada el auto fantstico. As tendr ese efecto de luces secuenciales. Primero un led permanece encendido y luego cambiara al siguiente led continuo, luego despus de ir al 8vo volver. Para lograr esto, veamos como funcionan estas instrucciones: ROTAR EL DATO A LA IZQUIERDA: Existe una instruccin llamada RLF, la cual significa rotar a la izquierda el valor registro en una posicin, lo que quiere decir que el dato se correr a la izquierda una posicin. Esta instruccin esta acompaada con el bit del carry, lo que quiere decir que como todo el dato se corre una posicin a la izquierda, el 7mo bit corre al carry, y el contenido del carry corri al bit 0 del registro que se movi. El resultado de esta operacin puede ser guardado en w o en el mismo registro que se solicito rotar ROTACIN UNA POSICIN A LA IZQUIERDA

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

0
CARRY

Ejemplo de la rotacin:
MOVLW MOVWF BCF RLF B10000000 REG1 STATUS,C REG1,F ;SE CARGARA A REG1 CON ESTE VALOR ;ASEGURAMOS QUE EL CARRY ESTE EN CERO ;SE ROT EL REGISTRO REG1 A LA IZQUIERDA

DESPUS DE LA INTRUCCION REG1 = B00000000, Y EL CARRY VALE 1. HAGAMOS OTRA ROTACIN A LA IZQUIERDA: RLF REG1,F ;SE ROT DE NUEVO UNA POSICIO A LA DERECHA

DESPUS DE LA INSTRUCCIN REG1 =B00000001, Y EL CARRY VALE 0.

ROTACION A LA DERECHA
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

55

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Existe la instruccin complementaria llamada RRF, la cual significa rotar a la derecha el valor registro en una posicin, lo que quiere decir que el dato se correr a la derecha una posicin. Esta instruccin esta acompaada con el bit del carry, lo que quiere decir que como todo el dato se corre una posicin a la derecha, el bit0 corre al carry, y el contenido del carry corri al bit 7 del registro que se movi. El resultado de esta operacin puede ser guardado en w o en el mismo registro que se solicito rotar.

ROTACIN UNA POSICION A LA IZQUIERDA

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

0
CARRY

Ejemplo de la rotacin:
MOVLW MOVWF BCF RRF B00000001 REG1 STATUS,C REG1,F ;SE CARGARA A REG1 CON ESTE VALOR ;ASEGURAMOS QUE EL CARRY ESTE EN CERO ;SE ROT EL REGISTRO REG1 A LA DERECHA

DESPUS DE LA INTRUCCION REG1 = B01000000, Y EL CARRY VALE 1. HAGAMOS OTRA ROTACIN A LA IZQUIERDA: RRF REG1,F ;SE ROT DE NUEVO UNA POSICIO A LA DERECHA

DESPUS DE LA INSTRUCCIN REG1 =B10100000, Y EL CARRY VALE 0.

NUESTRO CIRCUITO DE PRACTICA Como se haba comentado antes, se har unas luces secuenciales, usando el puerto B para este objetivo. El circuito trabajara mas o menos as: Iniciara encendido el led del pin RB0, esperar mas o menos 1 segundo y rotar a la izquierda, quedando encendido el pin RB1, y se har esta secuencia hasta que llegue al pin de RB7. Cuando esto ocurre, espera un segundo y rotar pero a la derecha, osea a RB6 y esperara un segundo, este ciclo se repite hasta que el led encendido sea el de RB0, y de nuevo se repetir esta secuencia.
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

56

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO DEL PROGRAMA INICIO


CONFIG DEL PIC

BORRAR PORTB

BORRAR CARRY

1=> RB0
ROTAR IZQ PORTB

NO RB7 = 1? SI
RETARDO 1SEG RETARDO 1SEG

NO RB0 = 1? SI
RETARDO 1SEG ROTAR DER PORTB

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

57

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA ESQUEMATICO DEL CIRCUITO

PROGRAMA EN MPLAB PARA LAS LUCES SECUENCIALES


LIST INCLUDE CONT1 CONT2 CONT3 EQU EQU EQU ORG GOTO ORG BSF MOVLW MOVWF BCF CLRF BCF BSF STARTI STARTD BTFSS GOTO BTFSS GOTO CALL GOTO P=16F628 <P16F628.INC> 20 21 22 00 INICIO 05 STATUS,RP0 B'00000000' TRISB STATUS,RP0 PORTB STATUS,C PORTB,1 PORTB,7 ROTAIZ PORTB,0 ROTADER RETARDO STARTI ;REGISTROS PARA EL ANIDAMIENTO

INICIO

;SELECCIONA BANCO1 ;PUERTO RB COMO SALIDA ;AL BANCO0 ;BORRAR EL PUERTOB ;SE PONE A CERO EL BIT DEL CARRY PARA ;ASEGURAR QUE SEA CERO ;SE PONE ESTE ESTADO DEL BIT A ROTAR

;*******************************

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

58

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

ROTADER

CALL RRF GOTO

RETARDO PORTB,F STARTD

;ROTE A LA DERECHA EL PUERTOB

;******************************** ROTAIZ CALL RETARDO ;TIEMPO PARA VISUALIZAR CADA POSICION ;DE ROTACION RLF PORTB,F ;ROTA A LA IZQUIERDA EL CONTENIDO DE . . ; PORTB GOTO STARTI ;*********************************** RETARDO MOVLW .6 MOVWF CONT3 MOVLW .250 MOVWF CONT2 MOVLW .250 MOVWF CONT1 DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO RETURN END CONT1,F $-1 .250 CONT1 CONT2,F $-5 .250 CONT2 CONT3,F $-9 ;DECREMENTE LA VARIABLE CONT1-1 SALTA ;CUANDO LLEGA A 0 ;$-1 SIGNIFICA QUE RETROCEDA UNA LINEA ;ANTES ;SE RECARGA NUEVAMENTE EL REGISTRO POR ; EL ANIDAMINETO ;DECREMENTE LA VARIABLE CONT2-1 SALTA ;CUANDO LLEGA A CERO ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA ;SE RECARGA CONT2 POR EL ANIDAMIENTO ;RETROCEDE 9 LINEAS EN EL PROGRAMA ;CUANDO CONT3 SEA CERO RETORNA DE DONDE ; SE LLAM

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

59

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 9

LED INTERMITENTE POR MEDIO DEL REGISTRO TMR0


El programa permite encender y apagar un led en RB7 mediante la temporizacin por el registro TMRO. En este programa vamos a conocer un nuevo recurso que posee el PIC 16F628 que se llama TMR0. TMR0 no es otra cosa que un registro de 8 bits que nosotros podemos cargar con un valor desde 00 hasta FF en hexadecimal. El uso de la temporizacin se usa en casi todas las aplicaciones, semforos, alarmas, acceso con clave, ascensores, comunicacin, etc. Al igual que tenamos dos registros TRISA y TRISB que configuraban los pines de los puertos como entradas o salidas. En la temporizacin tenemos el registro OPTION en el banco 1, que le configurar el registro TMR0 del banco 0, ya sea como temporizador o contador.

REGISTRO OPTION

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

60

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Medida de tiempo en un micro, est sujeta a tres temas: Oscilador externo Registro TMR0 Divisor de Frecuencia El oscilador externo creo que ya saben pero hago recordar, es el que me define la velocidad del ciclo de instruccin, y cuando usamos un oscilador de cristal de cuarzo (XT) de 4Mhz, tenemos 1 microsegundo de ciclo de instruccin. El registro TMR0 de 8 bits se configura como temporizador para determinar intervalos concretos de tiempo o como contador de impulsos externos . EL divisor de Frecuencia, como su nombre lo dice divide la frecuencia de reloj, que es lo mismo decir que aumenta la duracin de los impulsos de reloj. La combinacin binaria de los bits PS0, PS1 y PS2, del registro OPTION me definen el rango del divisor de frecuencias. El valor cargado en el TMR0, es aquel valor que le falta a este registro para que llegue a 255 (valor mximo para un registro de 8 bits). EJEMPLO: Si por software cargo un valor de 125 en el registro TMR0, entonces el valor que interviene en la frmula es 130, valor que falta para que sea desborde (llegue a 255) el registro TMR0 (255-125=130).

DIAGRAMA DE BLOQUES DE TMR0

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

61

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Registro de Control de Interrupciones INTCON Este registro ocupa la direccin 0BH del banco 0 y banco 1

DESBORDAMIENTO DEL TMR0 Cuando el TMR0 se desborda y pasa del valor de FFH a 00H, el sealizador o bandera TOIF se pone automticamente en 1.Cuando se carga el TMR0 con un valor n en decimal, cuenta (256-n) impulsos, el tiempo se cuenta mediante la siguiente formula: Temporizacion = 1Us X ( 256-n) X Rango del divisor de frecuencia.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

62

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

SET DE INSTRUCCIONES UTILIZADAS EN LA PROGRAMACION 1. BSF f, b : Con esta instruccin se pone en 1 el bit b del registro f

Ejemplo: Si se tiene en el puerto A ( PTOA ) = 1010 y se quiere colocar en UNO el tercer bit, la instruccin es la siguiente: BSF PORTA , 3. 2. BTFSS salta . f, b : ( BIT TEST FILE SKIP IF SET ) Explora un bit del registro f y si vale uno.

Ejemplo : Explorar si el bit 0 del registro STATUS vale uno. si es as saltar a la direccin CONTINUAR si no salta a la direccin SIGUE: BTFSS GOTO GOTO STATUS,0 SIGUE CONTINUAR

explicacion del programa


Al carga el registro option se asigna como divisor de frecuencia 256. Al no asignar un valor al TMR0 el automaticamente cuenta de 0 a256. Significa que con un cristal de 4MHz la temporizacion tiene un valor de: Temporizacion = CI x TMR0 x DF Temporizacion = 1Us x 256 x 256 = 65.5ms Frmula para calcular tiempos mas amplios utilizando un contador Se activa el registro de interrupciones por TMR0. La variable REG1 es cargada con 15 y se enciende el Led del puerto RB7; se mantiene en un ciclo hasta cuando se produce una interrupcin la cual es originada por la temporizacin del TMR0, en el ejemplo anterior significa que cuando hayan transcurridos 65.5ms se produce una interrupcin, este tiempo es multiplicado por 15 esto equivale a (15*65ms = 1segundo aprox); durante el cual se mantiene encendido el led ; Cuando el contador llega a cero y se genera una nueva interrupcin, y se temporiza nuevamente pero para mantener el led apagado durante 1s .

T=

(TMR0)

(Divisor de Fecuencia)

(Ciclos Instruc)

(Contador)

Valor Max 256 :

Valor Max 256

1 1s

Valor Max 255

EJEMPLO: Contador = 1 Segundo = 1.000.000 uS TMR0X D.F. 256 X 256 Tiempo (seg)

= 1.000.000 = 15,2 15 65.536

Contador

1 15

2 30

3 45

4 60

5 75
63

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

NUESTRO CIRCUITO PROPUESTO Semejante a la practica numero 2, pero esta vez se empleara un retardo, pero no en forma de anidamiento, sino esta vez se efectuara empleando las caractersticas del TMR0. Se empleara el TMR0 a su mximo divisin, quiere decir que su preescala o preescaler estar a una proporcin de 1:256, y se esperar a que el flag o la bandera del registro INTCON, T0IF, se ponga a 1, indicando que ha ocurrido un desbordamiento del TMR0, por cada desbordamiento, decrementara la variable REG1, el cual al multiplicar 15 desbordamientos (valor del registro REG1 =.15) , se cumplir un segundo aproximadamente. Cuando REG1 llegue a cero, entonces tomara accin sobre si encender o apagar el led, dependiendo de la condicin en que lo encuentre. El led estar conectado por RB7, y sera intermitente, pues empleara un retardo, luego enciende; un retardo y luego se apaga. DIAGRAMA DE FLUJO DEL PROGRAMA INICIO
CONFIG DEL PIC REGISTRO OPTION_REG

0 => INTCON, T0IF

0 => INTCON, T0IF REG1 = .15 BORRAR TMR0 NO T0IF=1? SI REG1 = REG1-1 RB7 = 1 1 => RB7 REG1 = 0?

0 => RB7

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

64

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA ESQUEMATICO DEL CIRCUITO

PROGRAMA EN MPLAB PARA EL LED INTERMITENTE CON TMR0


LIST INCLUDE
REG1 EQU ORG GOTO ORG BSF MOVLW MOVWF MOVLW MOVWF BCF CLRF BCF MOVLW MOVWF

P=16F628 <P16F628.INC>
20 00 INICIO 05 STATUS,RP0 B'00000000' TRISB B'10000111' OPTION_REG STATUS,RP0 PORTB INTCON,T0IF .15 REG1

INICIO

;SELECCIONA BANCO1 ;PUERTO RB COMO SALIDA ;PARA PROGRAMAR EL TMR0, PREESCALER ;AL BANCO0 ;BORRAR EL PUERTOB ;SE PONE A CERO EL FLAG DE TMR0 PARA SABER ;SI SE DESBORDA, CUANDO SE PONE EN UNO ;SE CARGA CON 15, PARA QUE LOS ;DESBORDAMIENTOS DEL TMR0 SUMEN APROX 1 SEG ;BORRAMOS A TMR0 COMO UN RESET ;CHEQUEAMOS SI YA SE PUSO A UNO EL FLAG DE ;TMR0 POR DESBORDAMIENTO ;SI NO VUELVA Y PREGUNTE ;BORRAMOS ESTE FLAG, PUES ES UN REQUISITO, ;PARA OTRO DESBORDAMIENTO ;POR CADA DESBORDAMIENTO SE DECREMENTA ;REG1 (PARA QUE DURE 1 SEGUNDO) ;PREGUNTA ESTADO DE RB7, PARA ENCENDERLO O ;APAGARLO ;SI ESTABA ENCENDIDO QUE LO APAGUE ;VUELVE A CARGAR CON 15 REG1 PARA OTRO ; CICLO

CARGA

CLRF
START BTFSS GOTO BCF DECFSZ GOTO BTFSS GOTO BCF GOTO BSF GOTO END

TMR0
INTCON,T0IF $-1 INTCON,T0IF REG1,F START PORTB,7 LEDON PORTB,7 CARGA PORTB,7 CARGA

LEDOFF . LEDON

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

65

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 10

USO DEL PUERTO RA4/T0CKI CON EL REGISTRO TMR0


Para mencionar las caractersticas de este pin, tiene como funciones ser un puerto de entradas / salidas digitales o ser la entrada de un reloj externo, el cual afectar directamente al registro TMR0, cuando se selecciona en el registro OPTION_REG, TOCS. Esta seal har que segn el valor de preescaler del tmr0 , este se ir incrementando. Un uso comn, es cuando que un registro se incremente a una velocidad lenta, y como los ciclos de instruccin son todava muy rpidos, se usa una fuente osciladora mucho mas lenta. Pero en realidad, funciones para esto son limitadas solo a la imaginacin del diseador. El objetivo de la practica ser el de enviar una seal de reloj de un medio externo, en el caso se usar un LM555 para generar esta seal, u otra fuente, e incluso un pulsador, y cuando el registro del TMR0 alcance cierto valor, incrementar un contador que va de cero a 9 a travs del puerto A. A este puerto, que normalmente es de colector abierto cuando se usa como puerto de salida, (por decirlo as se requiere de una resistencia para que genere el estado alto), y cuando es entrada puede ser para entrada digital , o que se desea habilitar la caracterstica de incrementar el tmr0 por cada flanco, sea de subida o de bajada, esto se determina en el bit de TOSE del registro OPTION_REG, (detallar en la hoja anterior), esto para que el TMR0 se incremente a cierta frecuencia, y como se menciono depende en gran parte del valor asignado al preescaler. En el diagrama esquemtico del circuito, se observar que la fuente del reloj usada ( en el caso del un 555 por el pin 3 que es su salida), su frecuencia externa no exceder mas 2KHz, por lo que no hay problema con el PIC, ya que si se ingresa una frecuencia muy grande incluso mas grande que la del oscilador del PIC, puede que existan algunas fallas , por lo que se recomienda no usar una frecuencia mas alta que los de la frecuencia del PIC, pero estos valores no son crticos y pueden variar segn el diseo. NUESTRO CIRCUITO DE PRACTICA Nuestro circuito de practica consistir en que por medio de un 555, se generar una seal de reloj (frecuencia), del orden de Hz hasta mximo 2KHz con el capacitor y resistencias dadas en el esquemtico, y la salida de este pin (3) del 555 ira a la entrada del PIC por el puerto RA4, por ende afectara el registro TMR0 ya configurado, de tal forma que cada 8 ciclos del 555, el TMR0 se incrementar una vez (preescaler), y cuando el valor de TMR0 llegue a B00000100, entonces incrementar un contador en una unidad, este ilustrado a travs del puerto A como salida y usando el decodificador 7447, y el conteo ira de cero a nueve. Luego se borrar el trm0 para que el ciclo se cumpla de nuevo. Recordemos que por manipular el puerto A como salida para ver el conteo, se debe inhabilitar los comparadores como se haba mencionado en otras guas, cargando el registro CMCON con .7.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

66

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO DEL PROGRAMA


INICIO
CONFIGURAR EL PIC Y DEL TMR0 EN EL REGIST OPTION

BORRAR TMR0
NO

CONTA => 0

TMR0,3 = 1?

CONTA => W

SI
CONTA= CONTA+1

W => PORTA
CONTA = 10?

NO SI

DIAGRAMA ESQUEMATICO DEL CIRCUITO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

67

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA EN MPLAB PARA LA MANIPULACIN DEL 555 CON EL PUERTO RA4/T0CKI.


LIST INCLUDE EQU ORG GOTO ORG MOVLW MOVWF BSF MOVLW MOVWF MOVLW MOVWF BCF CLRF CLRF MOVF MOVWF CLRF BTFSS GOTO INCF MOVLW SUBWF BTFSS GOTO GOTO END P=16F628 <P16F628.INC> 20 00 INICIO 05 .7 CMCON ;INHABILITAMOS LOS COMPARADORES INTERNOS STATUS,RP0 ;SELECCIONA BANCO1 B'11110000' ;PUERTO RA0 A RA3 COMO SALIDA RA4 COMO TRISA B'10100010' OPTION_REG STATUS,RP0 PORTA CONTA CONTA,W PORTA TMR0 TMR0,3 $-1 CONTA,F .10 CONTA,W STATUS,Z AAA START ;PARA PROGRAMAR EL TMR0, CON CICLOS DE ;RA4/TOCKI Y PREESCALER A 1:4 ;AL BANCO0 ;BORRAR EL PUERTOA ;BORRA EL REGISTRO PARA INICIAR ;ESTAS INTRUCCIONES SON PARA VISUALIZAR EN ;DISPLAY A.COMUN ;SE PREGUNTA SI ESTE BIT YA LLEGO A 1 POR ;LOS INCREMENTO DEL 555 POR RA4 ;SI YA LLEGO A UNO EL TMR0,3 INCREMENTE EL ;DISPLAY EN 1 ;SI YA LLEGO A 10, VUELVA A CERO EL CONTEO

CONTA

INICIO

ENTRADA

START AAA

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

68

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 11

LED INTERMITENTE A TRAVES DE UNA INTERRUPCION POR EL REGISTRO TMR0


El programa permite encender y apagar un led en RB7 mediante la temporizacin por el registro TMRO ,pero esta temporizacion se llevar a cabo nicamente a travs de una interrupcin generada por el desbordamiento del registro TMR0. TMR0 no es otra cosa que un registro de 8 bits que nosotros podemos cargar con un valor desde 00 hasta FF en hexadecimal. Lo que hace diferente a este registro de todos los dems es que nos puede generar una interrupcin en el programa s nosotros configuramos adecuadamente otro registro llamado INTCON (registro de control de interrupciones) que tambin va a ser el objeto de nuestro estudio, igual que el registro OPTION, todo con el fin de aprender a manejar la temporizacion en un programa de microcontrolador. Al igual que tenamos dos registros TRISA y TRISB que configuraban los pines de los puertos como entradas o salidas. En la temporizacin tenemos el registro OPTION en el banco 1, que le configurar el registro TMR0 del banco 0, ya sea como temporizador o contador. Frmula para calcular tiempos Al carga el registro option se asigna como divisor de frecuencia 256. Al no asignar un valor al TMR0 el automaticamente cuenta de 0 a256. Significa que con un cristal de 4MHz la temporizacion tiene un valor de: Temporizacion = CI x TMR0 x DF Temporizacion = 1Us x 256 x 256 = 65.5ms La medida de tiempo en un micro, est sujeta a tres temas:
Oscilador externo Registro TMR0 Divisor de Frecuencia

El oscilador externo creo que ya saben pero hago recordar, es el que me define la velocidad del ciclo de instruccin, y cuando usamos un oscilador de cristal de cuarzo (XT) de 4Mhz, tenemos 1 microsegundo de ciclo de instruccin. El registro TMR0 de 8 bits se configura como temporizador para determinar intervalos concretos de tiempo o como contador de impulsos externos .EL divisor de Frecuencia, como su nombre lo dice divide la frecuencia de reloj, que es lo mismo decir que aumenta la duracin de los impulsos de reloj. La combinacin binaria de los bits PS0, PS1 y PS2, del registro OPTION me definen el rango del divisor de frecuencias. El valor cargado en el TMR0, es aquel valor que le falta a este registro para que llegue a 255 (valor mximo para un registro de 8 bits).

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

69

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

EJEMPLO: Si por software cargo un valor de 125 en el registro TMR0, entonces el valor que interviene en la frmula es 130, valor que falta para que sea desborde (llegue a 255) el registro TMR0 (255-125=130). DIAGRAMA DE BLOQUES DE TIMER 0

INTERRUPCIONES AL igual que la instruccin call, una interrupcin me genera un desvi del flujo normal del programa, pero la diferencia sustancial es que al generarse la interrupcin, el PC no va a cualquier direccin de la memoria FLASH, sino a la posicin 04, que es la posicin reservada para la llamada al tratamiento de la interrupcin. Qu es lo que genera interrupciones? En este tipo de microcontrolador tenemos 5 fuentes de interrupcin generales por decirlo, es decir son 5 las razones por las que puede ocurrir una interrupcin estas razones son:
1.Desbordamiento del registro TMR0. 2.Cambio de estado en los pines RB4 - RB7 del puerto B 3.Fin de escritura de la EEPROM de datos 4.Por causa de una interrupcin externa, pin RB0/INT 5. Causada por los perifricos del PIC (Comparadores, Comparacin / captura-pwm,

modulo de comunicaciones usart, etc.) Registro de Control de Interrupciones INTCON Primero tenemos que habilitar el GIE para poder hacer cualquier tipo de interrupcin, luego consideramos las interrupciones pertinentes a nuestra aplicacin con los correspondientes bits de permiso. Los bits de sealizacin son los encargados de avisar que evento de interrupcin ha ocurrido ponindose a 1.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

70

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Para volver a ponerlo a 0 estos bits de sealizacin, debemos programar por software, porque de no se as no se podr salir de ellos. Durante el tiempo que se esta ejecutando la interrupcin, GIE se pone a cero para evitar tener en cuenta cualquier otro tipo de interrupcin.Si se quiere retornar de la interrupcin con el GIE nuevamente habilitado, se pone la instruccin RETFIE que pondr a GIE automticamente a 1. INTERRUPCION POR DESBORDAMIENTO DEL TMR0 Cuando el TMR0 se desborda y pasa del valor de FFH a 00H, el sealizador o bandera TOIF se pone automticamente en 1. Cuando se carga el TMR0 con un valor n en decimal, cuenta (256-n) impulsos. El tiempo se cuenta mediante la siguiente formula Temporizacion = 4 X Tosc X ( 256-n) X Rango del divisor de frecuencia. SET DE INSTRUCCIONES UTILIZADAS EN LA PROGRAMACION 2. BTFSS f, b : ( BIT TEST FILE SKIP IF SET ) Explora un bit (b) del registro f y

salta si vale uno. Ejemplo : Explorar si el bit 0 del registro STATUS vale uno. si es as saltar a la direccin CONTINUAR si no salta a la direccin SIGUE: BTFSS GOTO GOTO explicacion del programa Al carga el registro option se asigna como divisor de frecuencia 256. Al no asignar un valor al TMR0 el automaticamente cuenta de 0 a256. Significa que con un cristal de 4MHz la temporizacion tiene un valor de: STATUS,0 SIGUE CONTINUAR

temporizacion =4*T0sc*(256-n)*divisor de frecuencia temporizacion = 4*250ns*256*256 =65.5ms


Se activa el registro de interrupciones por TMR0. La variable REG1 es cargada con 15 y se enciende el Led del puerto RB7; se mantiene en un ciclo hasta cuando se produce una interrupcin la cual es originada por la temporizacin del TMR0, en el ejemplo anterior significa que cuando hayan transcurridos 65.5ms se produce una interrupcin, este tiempo es multiplicado por 15 esto equivale a (15*65ms = 1segundo aprox); durante el cual se mantiene encendido el led ; Cuando el contador llega a cero y se genera una nueva interrupcin, y se temporiza nuevamente pero para mantener el led apagado durante 1 segundo .
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

71

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO DEL PROGRAMA POR INTERRUPCION DE TMR0 INICIO


INTERRUPCION

NO
CONFIGURACIN DEL PIC -REGISTROS OPTION_REG Y INTCON
RETFIE

T0IF = 1?

SI
0 => INTCON,T0IF CONTA -1

CONTA => .15

NO
BORRAR TMR0
RETFIE CONTA = 0?

SI
INTCON,GIE => 1
CONTA => .15

NO
ESPERA
1 => RB7 RB7 = 1?

SI
RETFIE 0 => RB7

DIAGRAMA ESQUEMATICO DEL CIRCUITO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

72

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA EN MPLAB PARA UN LED INTERMITENTE POR TMRO LIST P=16F628 INCLUDE <P16F628.INC>
EQU ORG GOTO ORG GOTO 20 00 INICIO 04 INTERR

CONTA

INICIO

ORG BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF MOVLW MOVWF

05 STATUS,RP0 B'00000000' TRISB B'10000111' OPTION_REG B'00100000' INTCON STATUS,RP0 .15 CONTA

;CUANDO HAY INTERRUPCION SE DIRIGE A LA ;ETIQUETA DEMARCADA AQUI ;SELECCIONA BANCO1 ;PUERTO RB COMO SALIDA ;PARA PROGRAMAR EL TMR0, CON CICLOS DE ;INTRUCCION Y PREESCALER A 1:256 ;GIE OFF, INTERRUPCION POR DESBORDAMIENTO ;DEL TMR0, FLAGS OFF ;AL BANCO0

;SE CARGA CON 15, PARA QUE LOS ;DESBORDAMIENTOS DEL TMR0 (15 EN TOTAL), ;SUMEN APROX 1 SEG CLRF TMR0 ;SE BORRA EL TMR0 PARA QUE EMPIECE DE CERO BSF INTCON,GIE ;HABILITAMOS APARTIR DE AHORA LA ;INTERRUPCION POR TMR0 GOTO $ ;SE QUEDA EN ESPERA HASTA QUE OCURRA ALGO: ;UNA INTERRUPCION ;****************************************************** INTERR BTFSS INTCON,T0IF ;PREGUNTAMOS SI FUE INTERRUPCION POR TMR0 RETFIE ;ESTE TIPO DE RETORNO PONE AUTOMATICAMENTE ;EL GIE EN 1 BCF INTCON,T0IF ;BORRAMOS EL FLAG POR REQUISITO DECFSZ CONTA,F ;POR CADA INTERRUCION VA DECREMENTANDO EL ;CONTA RETFIE ;SALE Y ESPERA DE NUEVO MOVLW .15 MOVWF CONTA ;RECARGAMOS CONTA PARA OTRO CICLO BTFSS PORTB,7 ;PREGUNTA ESTADO DE RB7 PARA ENCENDERLO O ;APAGARLO GOTO LEDON LEDOFF BCF PORTB,7 RETFIE LEDON BSF PORTB,7 RETFIE END

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

73

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 12

ENCENDIDO Y APAGADO DE UN LED POR EL PUERTO RB0/INT


En la practica anterior hemos fortalecido el manejo de un recurso llamado TMR0 realizando practicas con este. Mas exactamente hemos aprendido las interrupciones provocados por el desbordamiento del Timer 0. Esta vez la idea es provocar una interrupcin usando el recurso de la interrupcin externa por el puerto RB0/INT. El puerto RB0 va a ser una entrada para la dicha interrupcin externa usando un pulsador como es mostrado en la figura de arriba. Y en el puerto RB7 vamos a poner un led que se va a apagar o prender cada vez que nosotros vamos a provocar una interrupcin externa usando nuestro pulsador de interrupcin. Acordmonos que el microcontrolador tiene cinco formas genricas de interrupcin: 1.Desbordamiento del registro TMR0. 2.Cambio de estado en los pines RB4 - RB7 del puerto B 3.Fin de escritura de la EEPROM de datos 4.Por causa de una interrupcin externa, pin RB0/INT 5. Por los perifricos o mdulos accesorios del pic. Entonces vamos a usar los mismos registros INTCON y OPTION solo que esta vez tenemos que configurarlos un poco diferente. En registro INTCON se va a configurar de la siguiente manera. Registro INTCON: GIE 1 PEIE 0 TOIE 0 INTE 1 RBIE 0 TOIF 0 INTF 0 RBIF 0

El bit GIE lo vamos a poner en el 1 lgico para activar el permiso global para la ejecucin de las interrupciones. El bit INTE tambin hay que activarlo en 1 para habilitar la interrupciones externas por el pin RB0/INT de microcontrolador. Es bueno tambin asegurarse que el bit de la sealizacin de interrupciones externas este borrado, as alistndolo para la interrupcin externa que venga. En el registro OPTION tambin se van a presentar leves, pero importantes cambios. Registro OPTION: RPBU 1 INTEDG 0 TOCS 0 TOSE 1 PSA 0 PS2 0 PS1 0 PS0 0

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

74

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE BLOQUES DE TIMER 0

NUESTRO CIRCUITO Como siempre lo primero que vamos a hacer es configurar los puertos, RB0 como entrada donde vamos a conectar nuestro pulsador de interupciones y RB7 como salida donde conectamos nuestro led. Despues configuramos el registro OPTION donde el bit INTEDG se pone en cero para configurar el flanco de bajada como interrupcion. Luego ajustamos el GIE y bit INTE del registro INTCON como 1 para activar el permiso global de las interrupciones, mas exacto las interrupcionesexternas por RB0/INT. Una vez realizada la configuracion nos aseguramosa apagar el led y se procede a esperar la interrupcion externa. Cuando el programa detecta la interrupcion se pone a averiguar el estado del led s este esta apagado se le enciende o viceversa y se retorna el programa a esperar la siguiente interrupcion.

DIAGRAMA DE FLUJO DEL PROGRAMA


DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

75

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA INTERRUPCION

INICIO
CONFIGURACIN DEL PIC, DEL REGISTRO OPTION_REG Y INTCON, PARA INTERRUPCIN POR RB0.

NO
RETFIE
INTCON ,I NTF = 1?

SI
0 => INTCON, INTF

1=> INTCON,GIE

0 => RB7 ESPERA

NO

RB7 = 1?

SI
0 => RB7

RETARDO ANTIRREBOTE

RETFIE DIAGRAMA ESQUEMATICO DEL CIRCUITO

PROGRAMA PARA LA INTERRUPCION POR RB0/INT


DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

76

NIVEL 1 PIC 16F628


LIST INCLUDE EQU EQU EQU EQU ORG GOTO ORG GOTO ORG BSF MOVLW MOVWF MOVLW P=16F628 <P16F628.INC> 20 21 22 23 00 INICIO 04 INTERR 05 STATUS,RP0 B'00000001' TRISB B'10000000'

TEORIA Y PRACTICA

CONTA CONT3 CONT2 CONT1

;CUANDO HAY INTERRUPCION SE DIRIGE A LA AQUI ;SELECCIONA BANCO1 ;PUERTO RB0 COMO ENTRADA ;PARA PROGRAMAR FLACO DEL RB0, EN ESTE CASO ;POR FLANCO DE BAJADA

INICIO

MOVWF OPTION_REG MOVLW B'00010000' ;GIE OFF, INTERRUPCION POR FLACO DE RB0 MOVWF INTCON BCF STATUS,RP0 ;AL BANCO0 BSF INTCON,GIE ;HABILITAMOS APARTIR DE AHORA LA INT/RB0 GOTO $ ;ESPERA HASTA QUE OCURRA UNA INTERRUPCION ;****************************************************** INTERR BTFSS INTCON,INTF ;PREGUNTAMOS SI FUE INTERRUPCION POR RB0 RETFIE ;RETORNO PONE AUTOMATICAMENTE EL GIE EN 1 BCF INTCON,INTF ;BORRAMOS EL FLAG POR REQUISITO BTFSS PORTB,7 ;PREGUNTA POR RB7 PARA ENCENDERLO O APAGARLO GOTO LEDON LEDOFF BCF PORTB,7 CALL REANTIR RETFIE LEDON BSF PORTB,7 CALL REANTIR RETFIE ;*********************************** REANTIR MOVLW .3 MOVWF CONT3 MOVLW .180 MOVWF CONT2 MOVLW .200 MOVWF CONT1 DECFSZ CONT1,F ;DECREMENTE CONT1-1 SALTA CUANDO LLEGA A 0 GOTO $-1 ;SIGNIFICA QUE RETROCEDA UNA LINEA ANTES MOVLW .200 MOVWF CONT1 ;SE RECARGA NUEVAMENTE DECFSZ CONT2,F ;DECREMENTE CONT2-1 SALTA CUANDO LLEGA A CERO GOTO $-5 ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA MOVLW .180 MOVWF CONT2 ;SE RECARGA CONT2 POR EL ANIDAMIENTO DECFSZ CONT3,F GOTO $-9 ;RETROCEDE 9 LINEAS EN EL PROGRAMA RETURN ;CUANDO CONT3 SEA CERO RETORNA DE DONDE SE END ;LLAM

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

77

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 13

MANIPULACIN DE UN BUZZER POR MEDIO DEL PIC


Es comn que a veces necesitemos de un medio auditivo para el reconocimiento de una actividad, sea por ejemplo se cuando un contador lleg a su fin, o como papel de alarma despertadora. Los buzzer normalmente son elementos mecnicos, que en un encapsulado cilndrico, (normalmente plstico negro), el cual solo tienen resonancia en frecuencias del rango de los 750 Hz hasta los 5KHz, ,pero estos valores realmente dependen del fabricante del elemento.

Aspecto comn de un buzzer visto desde arriba. Normalmente estos buzzer tiene una polarizacin , por la que debemos tener en cuenta antes de su conexionado con el PIC o circuito a tratar. Su funcionamiento bsico es sencillo: el PIC o microcontrolador se encarga de generar esta seal o tono (de 750Hz a 5KHz aproximadamente), y por medio de un transistor para manejar la carga, se conectara al buzzer. Es de tener en cuenta que por ser un elemento electromecnico, generar ruido elctrico, por lo que se recomienda usar filtros capacitivos en el circuito, y preferible en paralelo con el buzzer. NUESTRO CIRCUITO Nuestro circuito consistir en que por cada vez que pulsemos un interruptor, incrementar un contador, manejado por un display de ctodo comn y una tabla de datos, y tambin sonar el buzzer por medio de el puerto RA3, para mas detalles en el diagrama esquemtico. El funcionamiento principalmente del buzzer, se basa en la manipulacin de un retardo (el que determina la frecuencia de trabajo), y un anidamiento de variables ,semejante en su estructura a un retardo , para el tiempo en que durar sonando el buzzer.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

78

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

Veamos en el programa su funcionamiento:


BUZZER MOVLW MOVWF MOVLW MOVWF SOUND BSF CALL BCF DECFSZ GOTO MOVLW MOVWF DECFSZ GOTO RETURN .10 CONT2 .40 CONT1 PORTA,3 RET1MS PORTA,3 CONT1,F SOUND .40 CONT1 CONT2 SOUND

;VALORES QUE DIRAN POR CUANTO TIEMPO DURARA EL ;BUZZER

Al usar esta subrutina que hace sonar el buzzer ocurre lo siguiente: Al llamado de esta subrutina, se cargan unos registros, encargados de determinar la duracin del sonido (papel que desempea CONT1 y CONT2). A partir de la etiqueta SOUND, vemos que se activa el pin de RA3 (1), lo cual activar el buzzer, pero solo le envi corriente, por lo que solo al buzzer solo ha oscilado la mitad, despus de lama un retardo, que en el caso dura 1 mS, por lo que al calcular la frecuencia, ser de aproximadamente 1KHz. Despus para completar el otro ciclo de oscilacin, enviamos un cero por RA3, y luego continua el anidamiento, por lo que a cada decremento, volver a la etiqueta de sound y se repetir hasta que CONT1 y CONT2 sean cero, por lo que su duracin ser lo suficiente para que parezca de duracin como la pulsacin. El circuito en general funciona as: cuando existe pulsacin en el pin RB0, ,enva un cero al PIC, cual al detectar la pulsacin, llama la subrutina del buzzer, ,luego incrementa el contador de 0 a 9 en una unidad. Es importante observar que no existe retardo de antirrebote, esto es debido a que la subrutina de buzzer consume el tiempo suficiente para ocupar al PIC mientras se disipa el rebote elctrico.

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

79

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA DE FLUJO DEL PROGRAMA


INICIO
CONFIG DEL PIC, COMPARADORES PAGADOS. BORRAR PORTB BORRAR PORTA BORRAR CONTA 0=> RA3 CONT1-1

BUZZER
CONT1=> .40 CONT2=> .10 1 => RA3 RETAR 1 mS

NO
RB0 = 0?

NO
CONT1 = 0?

SI SI
BUZZER

CONT1 <= .40 CONTA +1 CONT2-1

SI
CONTA = 10? BORRA CONTA CONT2 = 0?

NO

NO SI
CONTA => W TABLA W => PORTB

RETURN

DIAGRAMA ESQUEMATICO DEL CIRCUITO


DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

80

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DISPLAY C.C

MPLAB PARA USAR EL CONTADOR CON EL BUZZER.


CONTA CONT3 CONT2 CONT1 CONT4

LIST INCLUDE
EQU EQU EQU EQU EQU ORG GOTO ORG ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MOVLW MOVWF BSF MOVLW MOVWF BCF BCF CLRF

P=16F628 <P16F628.INC>
20 21 22 23 24 00 INICIO 05 PCL,F B'01111110' B'00001100' B'10110110' B'10011110' B'11001100' B'11011010' B'11111010' B'00001110' B'11111110' B'11011110' .7 CMCON STATUS,RP0 B'00000001' TRISB TRISA,3 STATUS,RP0 PORTA

TABLA

;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE ;ENCIENDE

EN EL EL EL EL EL EL EL EL EL

EL DISPLAY EL CERO UNO DOS TRES CUATRO CINCO SEIS SIETE OCHO NUEVE

INICIO

;INHABILITAMOS LOS COMPARADORES ;SELECCIONA BANCO1 ;PUERTO RB0 COMO ENTRADA ;RA3 COMO SALIDA ;AL BANCO0

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

81

NIVEL 1 PIC 16F628


CLRF CLRF BTFSC GOTO CALL INCF MOVLW SUBWF PORTB CONTA PORTB,0 $-1 BUZZER CONTA,F .10 CONTA,W

TEORIA Y PRACTICA

START

;ESTADO DEL PULSADOR ;VUELVA A PREGUNTAR POR ESTADO HASTA QUE ;SEA CERO ;SUBRUTINA PARA HACER SONAR EL BUZZER, ;SERVIRA COMO ANTIRREBOTE ;INCREMENTAMOS EL CONTADOR +1 ;PREGUNTAMOS SI YA ES 10, Y EL RESULTADO ;SE DEJA EN W, PARA NO ALTERAR EL ;CONTENIDO DE CONTA ;FLAG DE CERO

BTFSC STATUS,Z CLRF CONTA MOVF CONTA,W CALL TABLA MOVWF PORTB GOTO START ;**************************** BUZZER MOVLW .10 MOVWF CONT2 MOVLW .40 MOVWF CONT1 SOUND BSF PORTA,3 CALL RET1MS BCF PORTA,3 DECFSZ CONT1,F GOTO SOUND MOVLW .40 MOVWF CONT1 DECFSZ CONT2 GOTO SOUND RETURN ;************************** RET1MS MOVLW .3 MOVWF CONT3 MOVLW .111 MOVWF CONT4 LOOP DECFSZ CONT4,F GOTO LOOP MOVLW .111 MOVWF CONT4 DECFSZ CONT3,F GOTO LOOP RETURN END

;VALORES QUE DIRAN POR CUANTO TIEMPO ;DURARA EL BUZZER

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

82

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PRACTICA 14

MANEJO DE LA MEMORIA EEPROM INTERNA DEL PIC


En esta familia de microcontroladores la memoria EEPROM de datos puede ser modificada sin necesidad de utilizar un programador exterior y a la tensin nominal de VDD. Es decir, un programa dinmicamente puede generar informacin que se puede grabar en la memoria. Se dispone de 4 registros de SFR para leer y escribir sobre la memoria no voltil, estos registros son: EECON1 , EECON2, EEDATA y EEADR . Para direccionar las 128 posiciones de memoria EEPROM de 8 bits del PIC16F628 basta con 8 bit, por ello para escribir o leer en la memoria EEPROM solo hacen faltan el registro EEADR para direccionar la posicin y el registro EEDATA para colocar el dato ledo o escrito. Adems para controlar el proceso de lectura y escritura de la memoria EEPROM dispone de dos registros: el EECON1 y el EECON2. REGISTROS EECON1 y EECON2 Seguidamente se describen los bit de control de registro EECON1 --Bit 7 ------WRERR WREN WR RD Bit 0

bit 7:4:No implementados: Se leen como 0 bit 3: WRERR: Flag de error de escritura en la EEPROM 1 = El proceso de lectura se ha producido prematuramente (se ha producido un Reset por MCLR o un WDT durante el proceso) 0 = Se ha producido el proceso de escritura con xito bit 2: WREN: bit de habilitacin de escritura 1 = Permite inicializar el ciclo de escritura 0 = Inhibe la escritura bit 1: WR: bit de inicio de escritura 1 = Cuando se le pone a 1 comienza el ciclo de escritura de la memoria no voltil. (El bit se pone de nuevo a cero por hardware cuando la escritura se completa). 0 = Toma este valor cuando completa el ciclo de escritura de la memoria no voltil. bit 0: RD: bit de inicio de lectura 1 = Cuando se le pone a 1 se inicia un ciclo de lectura. El bit RD se pone a cero por hardware. 0 = no ha comenzado el ciclo de lectura de la memoria no voltil.

El registro EECON2, no est implementado fsicamente y slo se utiliza para la operacin de lectura, de igual forma que se hace con el PIC 16F84, es decir, antes de iniciar la
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

83

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

escritura de un dato en la memoria, se debe escribir en el registro EECON2 primero el dato 55h y posteriormente el dato AAh. Seguidamente se muestran una serie de subrutinas para la escritura y lectura de la memoria no voltil. SUBRUTINA PARA LA ESCRITURA DE LA MEMORIA EEPROM DE DATOS
WR EEPROM MOVF BSF MOVWF BCF MOVF BSF MOVWF BCF BSF MOVLW MOVWF MOVLW MOVWF BSF BTFSC BCF BCF DIR,W STATUS, RP0 EEADR STATUS,RP0 DATO,W STATUS,RP0 EEDATA INTCON, GIE EECON1, WREN 55h EECON2 AAh; EECON2 EECON1, WR EECON1,WR EECON1, WREN STATUS,RP0 ;Escribe AAh en EECON2 ;Se da la orden de escritura ;PREGUNTA SI YA TERMIN DE WRITE ;Prohibir la escritura de nuevos datos ;BANCO0 ;Escribe 55h en EECON2 ;mueve la direccin deseada en la EEPROM ;Seleccin del banco 1 de memoria ;direccin que se quiere acceder ;BANCO0 ;Dato que se quiere escribir ;BANCO1 ;DATO A ESCRIBIR ;Se Prohben las interrupciones, OPCIONAL ;Habilita la escritura en la EEPROM

SUBRUTINA PARA LA LECTURA DE LA MEMORIA EEPROM DE DATOS RD_EEPROM


DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

84

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

movf BCF MOVWF BSF NOP NOP MOVF BCF MOVWF

DIR STATUS,RP0 EEADR EECON1,RD

;Direccin a leer de EEPROM ;Seleccin del banco 0 de memoria ;SE ENVIA DIRECCIN AL REGISTRO ;Se da la orden de efectuar la lectura

EEDATA,W STATUS,RP0 DATO

;Se recoge el dato ledo y se deja en W

;SE DESCARGA EL VALOR EN DATO

Para evitar escrituras indeseables en la EEPROM motivadas por espreos en la inicializacin del microcontrolador, se controla el bit WREN del registro EECON1, prohibiendo cualquier operacin de escritura mientras duran los 72 ms que temporiza el Timer Power-up.

REGISTROS ASOCIADOS CON LA MEMORIA DE DATOS EEPROM

Leyenda: x = Indeterminado, u = Permanece Invariable, r = reservado; - = No implementado se lee como 0; No se usan las clulas sombreadas durante el acceso a EEPROM. Nota 1.- rea de memoria reservada; estos bits se mantienen siempre a cero
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

85

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

NUESTRO CIRCUITO El circuito va a funcionar usando la memoria eeprom , de tal forma que cada vez que pulsamos un interruptor, se incrementar un registro que va de cero a nueve y si quitamos la alimentacin y luego la volvemos a colocar, aparecer en un display manejado por el decodificador 7447, el ultimo numero que visualizamos antes de apagarlo. El circuito maneja dos posiciones de la memoria eeprom, la de la posicin 0x00, se encargara de decirle al programa si hay un numero en memoria, y la direccin 0x01, estar el numero decimal que se almacen por ultima vez. La primera posicin de memoria (0x00), se escribir o estar el dato 0x55 indicando que si hay un dato en la memoria, pues normalmente los pics cuando no se ha manipulado esta memoria, estar en el valor de 0xFF, y si el programa cuando lee esta posicin y el valor es diferente de 0x55, grabara como numero de arranque 0x00, esto con el fin de asegurar de que se va a mostrar en el display un numero decimal. El papel de la otra parte de la memoria (direccin 0x01), ser la de cada vez que pulsemos el interruptor, incrementar un registro de control, y luego este valor lo almacenar en la memoria eeprom, y as se repetir este ciclo. Para la escritura de datos en la eeprom del PIC, se hace uso de subrutinas, ya que esta actividad la haremos muy seguido, y manipularemos dos registros a los que se llamaron DIR para que almacene la direccin de la memoria eeprom a escribir y el registro DATO almacenara el dato a escribir. Ojo recordemos que estos registros estn en el banco0, y los de manejo de la eeprom estn en el banco1, por lo que en la subrutina se hace este traslado a EEADR Y EEDATA respectivamente, mas detalle en la subrutina. Para la lectura, enviamos la direccin a leer en el registro al que se llam DIR, y luego de ejecutada la subrutina, el dato que contena esta posicin llegara desde el registro EEDATA al registro DATO, este manejo tambin se dio en la misma subrutina anteriormente vista.

DIAGRAMA DE FLUJO DEL PROGRAMA


INICIO
CONFIGURACIN DEL PIC, APAGAR LOS COMPARADORES

0=> DIR RDDATO = EEPROM 0X55?


DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

86

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

SI 1 NO DIR <= 0 0X55 => DATO RB0=0?


RETARDO ANTIREBOTE

DIR <=0X01 RD EEPROM DATO => PORTA NO SI 3

WR EEPROM DIR <=0X01 0X00 => DATO WR EEPROM 1

DATO = DATO+1 NO
DATO = 10 ?

SI 4

WR EEPROM DIR => EEADR 5 DATO => EEDATA

BORRAR DATO

DIR => 0X01

WR EEPROM

1 => EECON1, WREN 0X55 => EECON2

3
DIGIT ELECTRONIC CRA 9 23 49 LOCAL 2070XAA => 36 72 TEL 2 86 EECON2
EECON1, WR = 0?

87

RD RETURN EEDATA => DATO 1=> =>EEPROM DIR EECON1, RD EEADR

1 => EECON1,WR

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

NO

SI 0 => EECON1, WREN

RETURN

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

88

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

DIAGRAMA ESQUEMATICO DEL CIRCUITO

U3 5V U2 6 A7 4 L S 4g7 1 4 3
2A 2 1A 1 7A 0 f e d c b a 15 9 10 11 12 13 COMUN

D E C G B A

DP

U1 1k
RA2 RA3 RA0 RA7/OSC1 RA4 R A 5 / M CR A 6 / O S C 2 LR VSS VDD RB0 RB7 RB1 RB6 RB2 RB3 RB5 RB4 RA1

15pF 4MHz 15pF

3t e s t 5 R B I R B O4

DP G F E D F C B A

PIC 16F628 S1 1k

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

89

NIVEL 1 PIC 16F628

TEORIA Y PRACTICA

PROGRAMA EN MPLAB PARA LA PRACTICA CON LA MEMORIA EEPROM


LIST INCLUDE EQU EQU EQU EQU EQU EQU EQU ORG GOTO ORG MOVLW MOVWF BSF MOVLW MOVWF MOVLW MOVWF BCF MOVLW MOVWF CALL MOVLW SUBWF BTFSS GOTO MOVLW MOVWF CALL CARGA MOVF MOVWF BTFSC GOTO CALL INCF MOVLW SUBWF BTFSC CLRF MOVLW MOVWF CALL GOTO P=16F628 <P16F628.INC> 20 21 22 23 24 25 26 00 INICIO 05 .7 CMCON STATUS,RP0 B'00000001' TRISB B'11110000' TRISA STATUS,RP0 .0 DIR RDEEPROM .55 DATO,W STATUS,Z FLAG .1 DIR RDEEPROM DATO,W PORTA PORTB,0 $-1 REANTIR DATO,F .10 DATO,W STATUS,Z DATO .1 DIR WREEPROM CARGA

CONTA CONT3 CONT2 CONT1 CONT4 DIR DATO

INICIO

;INHABILITAMOS LOS COMPARADORES ;SELECCIONA BANCO1 ;PUERTO RB0 COMO ENTRADA ;PORTA COMO SALIDA ;AL BANCO0 ;SELECCIONANDO DIRECCION EEPROM ;SUBRUTINA PARA LEER LA EEPROM, RETORNA ;INFORMACION ;EN EL REGISTRO DATO ;COMPARA SI ES 55,REFERENCIA PARA SABER SI ;HABIA GUARDADO ALGUN DATO

GRABAS1

;SE APUNTA A LA DIRECCION DEL ULTIMO DATO ;ESCRITO ;LEER LA EEPROM PARA CARGAR EL ULTIMO ;VALOR ;CONTENIDO DE DATO A W ;MUESTRA DATO EN DISPLAY ;LEE ESTADO DEL PULSADOR, ESPERA QUE SEA ;CERO ;RETARDO DE ANTIREBOTE DEL PULSADOR ;INCREMENTA VALOR DE DATO +1 ;SI DATO ES IGUAL A 10 ;SI ES 10 BORRE Y VUELVA A CERO ;DIRECCION DE LE EEPROM PARA SALVAR ESTE ;NUEVO VALOR ;SUBRUTINA PARA GUARDAR ACTUALIZACION DE ;DATO ;VUELVA A CARGA PARA QUE ESPERE OTRA ;PULSACION

;******************************

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

90

NIVEL 1 PIC 16F628 FLAG MOVLW MOVWF MOVLW MOVWF CALL MOVLW MOVWF .0 DIR .55 DATO WREEPROM .1 DIR

TEORIA Y PRACTICA

MOVLW .0 MOVWF DATO CALL WREEPROM ;ESCRIBE EN LA EEPROM EL CONTENIDO DE DATO GOTO GRABAS1 ;*********************************** REANTIR MOVLW .3 MOVWF CONT3 MOVLW .180 MOVWF CONT2 MOVLW .200 MOVWF CONT1 DECFSZ CONT1,F ;DECREMENTE LA VARIABLE CONT1-1 SALTA ;CUANDO LLEGA A 0 GOTO $-1 ;$-1 SIGNIFICA QUE RETROCEDA UNA LINEA ;ANTES MOVLW .200 MOVWF CONT1 ;SE RECARGA NUEVAMENTE EL REGISTRO POR EL ;ANIDAMINETO DECFSZ CONT2,F ;DECREMENTE LA VARIABLE CONT2-1 SALTA ;CUANDO LLEGA A CERO GOTO $-5 ;$-5 RETROCEDE 5 LINEAS EN EL PROGRAMA MOVLW .180 MOVWF CONT2 ;SE RECARGA CONT2 POR EL ANIDAMIENTO DECFSZ CONT3,F GOTO $-9 ;RETROCEDE 9 LINEAS EN EL PROGRAMA RETURN ;CUANDO CONT3 SEA CERO RETORNA DE DONDE SE ;LLAM ;****************************** RDEEPROM ;SUBRUTINA PARA LEER DATO DE LA EEPROM MOVF DIR,W BSF STATUS,RP0 ;BANCO1 MOVWF EEADR ;DIRECCION AL REGISTRO DE DIRECCIONAMIENTO BSF EECON1,RD ;COMANDO DE QUE LEA LA POSICION ASIGNADA NOP NOP ;NOPS PARA ASEGURAR UNA CORRECTA LECTURA MOVF EEDATA,W ;EL DATO LEIDO SE MUEVE A W BCF STATUS,RP0 ;BANCO0 MOVWF DATO ;EL DATO LEIDO QUEDA EN EL REGISTRO DATO RETURN ;******************************** WREEPROM MOVF DIR,W ;MOVEMOS LA DIRECCION A W BSF STATUS,RP0 ;BANCO1 MOVWF EEADR ;SE CARGO LA DIRECCION BCF STATUS,RP0 ;BANCO0 MOVF DATO,W ;DATO A ESCRIBIR A w BSF STATUS,RP0 ;BANCO1 MOVWF EEDATA ;CARGO DATO A EEDATA

;DIRECCION DE LA EEPROM ;DATO DE REFERENCIA PARA SABER AHORA ;QUE SI HAY DATO ESCRITO ;DATO A ESCRIBIR EN LA EEPROM ;SUBRUTINA PARA ESCRIBIR EN LA EEPROM ;DIRECCION DE LA EEPROM ;POSICION EN DONDE SE ALMACENA EL ULTIMO ;DATO ESCRITO ;DATO DE ARRANQUE, SERA DE CERO

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

91

NIVEL 1 PIC 16F628 BSF MOVLW MOVWF MOVLW MOVWF BSF BTFSC GOTO BCF BCF RETURN END EECON1,WREN 0X55 EECON2 0XAA EECON2 EECON1,WR EECON1,WR $-1 EECON1,WREN STATUS,RP0

TEORIA Y PRACTICA ;SE HABILITA LA ESCRITURA ;CARGA A W 55 ;PASO REQUERIDO POR MICROCHIP PARA ;ESCRIBIR ;CARGA A W CON AA ;PASO REQUERIDO POR MICROCHIP PARA ;ESCRIBIR ;COMANDO DE ESCRIBIR, PUEDE DEMORARSE ;HASTA 10MS ;ESTE BIT SE PONE A CERO CUANDO YA TERMINA ;LA ESCRITURA ;ESPERE ;INHABILTA LA ESCRITURA ;BANCO CERO DESPUED DE FINALIZADA LA ;ESCRITURA

DIGIT ELECTRONIC CRA 9 23 49 LOCAL 207 TEL 2 86 36 72

92

S-ar putea să vă placă și