Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Proyecto de cerradura electronica(2)

4,039 views

Published on

Published in: Education
  • Be the first to comment

Proyecto de cerradura electronica(2)

  1. 1. INTRODUCCIONEl proyecto a desarrollar es una cerradura electrónica, ya que abarcael concepto sobre la seguridad de las personas en su hogar, empresaso negocios, etc., así como la evolución de los circuitos digitales,donde esta gama de proyectos son utilizados con mayor facilidad ycon una gran calidad de equipo, los circuitos cada día son máspequeños y fáciles de llevar, hemos visto que la tecnología asuperado muchas barreras hoy en día como es el caso de loscelulares que utilizan microchips para mejorar las herramientasnecesarias, en este proyecto deseo establecer que podemos utilizar yrealizar circuitos con una gran expectativa y uso, con la mejorcalidad que podemos desempeñar.Otro aspecto importante a considerar es que el proyecto debe ser unproblema de aplicación real. Con este sistema se pretende dar unasolución al problema de las puertas de seguridad que son utilizadasen la mayoría de las empresas, como hoteles, restaurantes, hastaincluso en el hogar, ya que hoy en día dichos sistemas son muyutilizados.Este proyecto está pensado para aquellas empresas, locales, tiendas,el hogar, etc., que cuentan con diversas puertas de acceso o quesimplemente desean tener seguridad y proteger su beneficio, dondese lleva un control del ingreso y egreso de las personas a través delas mismas.A continuación desglosaremos las diferentes partes del proyecto,comenzando por los objetivos, la definición de cada componente asícomo los esquemas, algunas especificaciones de los componentes,detallare cada aplicación que tiene el proyecto, así como lacomprensión y el desarrollo del programa para comprender comoopera este circuito, observaremos y ensamblaremos la estructurafinal del diagrama establecido por todos los componentes y porúltimo se demostraran con imágenes como operara el circuito paracomprender mejor el proyecto.
  2. 2. OBJETIVOS DEL PROYECTO* El objetivo es Diseñar una cerradura electrónica destinada para eluso en las empresas, tiendas, hogar, etc., estableciendo unacontraseña para que solamente tengan acceso las personas que esténautorizadas y para su mejor seguridad.* La puerta puede tener dos teclados, una para ingreso y otro para elegreso, o simplemente puede tener un teclado para el ingreso y delotro lado que sea manual para el egreso.* Cada persona autorizada tiene un número de usuario y un númerode clave, o simplemente un número de claves esto es opcional.* En las empresas y negocios, se usaría una PC conectada al sistemaque se encargaría de controlar el ingreso de los trabajadores ousuarios para utilizarla también como un registro de la hora deentrada y salida de cada persona.* Una persona o usuario puede cambiar su clave desde el momentoque lo decida, para mayor seguridad o simplemente para comprobarque el sistema está funcionando adecuadamente todos los días.* Cuando la puerta este abierta o la quieran abrir pero que nocuenten con la contraseña sin haber sido autorizados, se activaraautomáticamente una alarma para establecer que la persona no tieneacceso, ya que el circuito solo permitirá el acceso a las personasautorizadas.* Este sistema esta diseñado para que solamente ingresen laspersonas autorizadas, en el caso de que la persona se equivoque alingresar la contraseña, tendrá 3 intentos para ingresar la contraseñade lo contrario se activara la alarma y se bloqueara la puerta duranteun tiempo determinado dando aviso a las estaciones de policía quehay un problema ya sea en la empresa, negocio o en el hogar.
  3. 3. DESARROLLO DEL PROYECTO.Con este circuito puedes poner una clave de acceso para entrar en una habitación o para abrir un armario, caja... etc. y unaalarma que suena cuando alguien introduce la clave mal tres veces.La clave se introduce mediante un teclado de 16 teclas y se visualiza el estado en una pantalla de cristal líquido (LCD) de 16caracteres-2 líneas. El circuito acciona un relé el cual acciona el dispositivo de apertura de la puerta, que puede ser, por ejemplo,una cantonera como la que hay en las puertas de los portales y que accionamos desde nuestra casa pulsando un botón. DIAGRAMA DE LA CERRADURA ELECTRONICA
  4. 4. ESQUEMAS ELECTRÓNICOS.Fuente de alimentación: + 5v. 1000 7 7805 u uF/25 v.. 220 + +5 v.. v v. Transformad Puente or rectificador 1 1K + led rojo. 6 6v./300 mA. 4 40v /1APIC 16F84. M MCLR 1 R RB7 R RA0 R RB6 R RA1 R RB5 R RA2 R RB4 R RA3 R RB3 R RA4 R RB2 R RA5 R RB1 0 0v. 8 R RB0/INT O OCS1 2 + +5v O OCS2 1 19 0 0v. R RC0 R RC7 R RC1 R RC6 R RC2 R RC5 R RC3 R RC4
  5. 5. LCD 2 x 16. R RB7 R RB0 + +5v. + +5v. 2 2 2 2 2 2 2 2 2 1 1 4 7 8 9 1 R RA2 R RA5 10 1 REL 4 BUZ 1 1N4148 100 4 47 15 15LCD 2 x 16. Conector macho de circuito impreso para cable plano. 5 v. RB RB RB 10 RB RB RB RB 5 v. 1 1 RB RB RB RB 5 v. RB RB RB 5 v. 10
  6. 6. Teclado matricial 4 x 4.Conexiones de tira recta de pines. 2,2K 2,2K 2,2K RB5 RB6 RB2 RB7 RB0 RB4 RB1 Fila del 8 5 C1 2 C3 0 C2 C1 C3 Fila del 8 5 2 0 C2 1 2 3 4 5 6 7 8 9 < 0 > C1= columna1 C2 C2
  7. 7. Chicharra. +5v CHICHARRA . + +5V. 1 10 K B BUZZER B BC547 1 10 KRelé. +5v . R RELE +5V. 1 1N4007 1 10 K R RELE B BC547 1 10 K
  8. 8. Teclado matricial hexadecimal Un teclado de este tipo consta de 16 teclas (matriz 4 X 4). Por cada fila y cada columna de la matriz hay un "cable" que pasa por detras de las teclas, las cuales estan colocadas en las intersecciones entre filas y columnas. Así pues, la columna 1 (COL1) es un "cable" que pasa por debajo del 1, del 4, del 7 y del * ; la fila 1 (FIL1) pasa debajo de la A, 3, 2 y 1.Filas y columnas no están conectadas entre si. Cuando se pulsa una tecla se conecta la columna y la fila que pasa por debajo de dicha tecla. Por ejemplo, si se pulsa el 1 se conecta la COL1 con FIL1; si se pulsa el 8 se conecta la COL2 con FIL3, y asi sucesivamente con el resto de las teclas. Esta forma estratégica de colocar todas las teclas y conexionespermite manejar 16 pulsadores con solo llevar 8 cables. Si en lugar de esto usaramos 16 pulsadores tendríamos32 cables, sin necesidad de pensar mucho se nos podría ocurrir ponerlos todos con un terminal común, con loque tendríamos 17 cables, La ventaja de usar la configuración matricial es clara.El inconveniente que tiene es que para saber que tecla estas pulsando hace falta un microcontrolador (un pic porej). Para poder ir dando distintos valores a las columnas y saber, dependiendo de los valores que se reflejen enlas filas, la tecla pulsada. A un microcontrolador no le cuesta nada hacer esto. Pantalla de cristal líquido LCD Se trata de un visualizador alfanumérico, es decir, solo se pueden ver números y letras y algún otro carácter. Un LCD de este tipo se define por el número de lineas que es capaz de mostrar a la vez y el número de caracteres por líneas. Un LCD de 8 X 1 es un LCD de una línea y 8 caracteres. Los mas comunes son de 8, 16, 20, 24 y 40 caracteres y de 1, 2 y 4 líneas.El propio LCD lleva ya un microcontrolador (HD44780) incorporado que es el que se encarga de mostrar loscaracteres en la pantalla. Pero hace falta otro microcontrolador (un pic por ej) para que dialogue con elHD44780 y le diga que es lo que tiene que escribir. Para ello el LCD usa 11 líneas: 3 de control y 8 de datos.Aunque es posible también usar solamente 4 para los datos.Cuando compramos un LCD de este tipo suele venir un anexo impreso que nos indica que es cada pin, pordonde se alimenta y alguna información mas de vital importancia a la hora de implementar el circuito.
  9. 9. Fuente de alimentación continua.Una fuente de alimentación es un dispositivo o subsistema que convierte la corriente alterna de la red dedistribución de la energía eléctrica en otro tipo de corriente eléctrica adecuado para el uso que se le vaya a dar.Usualmente la entrada es una tensión alterna proveniente de la red eléctrica comercial y la salida es una tensióncontinua con bajo nivel de rizado. Constan de tres o cuatro etapas:* Sección de entrada: compuesta principalmente por un rectificador, también tiene elementos de proteccióncomo fusibles, varistores, etc.* Regulación: su misión es mantener la salida en los valores prefijados.* Salida: su misión es filtrar, controlar, limitar, proteger y adaptar la fuente a la carga a la que esté conectada.Este tipo de fuentes puede ser tanto lineales como conmutadas.Las fuentes lineales siguen el esquema: transformador, rectificador, filtro, regulación y salida. En primer lugarel transformador adapta los niveles de tensión y proporciona aislamiento galvánico. El circuito que convierte lacorriente alterna en continua se llama rectificador, después suelen llevar un circuito que disminuye el rizadocomo un filtro de condensador. La regulación se consigue con un componente disipativo regulable. La salidapuede ser simplemente un condensador.Las fuentes conmutadas tienen por esquema: rectificador, conmutador, transformador, otro rectificador y salida.La regulación se obtiene con el conmutador, normalmente un circuito PWM (Pulse Width Modulation) quecambia el ciclo de trabajo. Aquí las funciones del transformador son las mismas que para fuentes lineales perosu posición es diferente. El segundo rectificador convierte la señal alterna pulsante que llega del transformadoren un valor continuo. La salida puede ser también un filtro de condensador o uno del tipo LC.Las ventajas de las fuentes lineales son una mejor regulación, velocidad y mejores características EMC. Por otraparte las conmutadas obtienen un mejor rendimiento, menor coste y tamaño. RelevadorTambién conocido como relé, es un dispositivo que controla el estado de un interruptor mediante una entradaeléctrica. En su interior, posee comúnmente una bobina que al energizarse -por Ley de Faraday- induce unafuerza magnética que cambia el estado del interruptor. Existen relevadores con interruptores normalmente (esdecir sin flujo eléctrico) abiertos y normalmente cerrados. Además de esa característica también existenrelevadores con múltiples entradas y múltiples interruptores. A continuación se muestran los que se manejan enVERIS:SPST (Single Pole Single Throw, Polo Sencillo Interruptor Sencillo).- Consiste en una sola entrada de corrientey un sólo interruptor. El interruptor queda abierto o cerrado, según sean las condiciones dadas.
  10. 10. Arquitectura interna del modelo Victory 101/102/103SPDT (Single Pole Double Throw, Polo Sencillo Interruptor Doble).- Consiste en una sola entrada de corrientey en este caso el interruptor doble consiste un interruptor que se cierra mientras que otro se abre, o como uncambio de trayectoria del circuito partiendo de una entrada común Arquitectura interna del modelo Victory 100DPST (Double Pole Single Throw, Polo Doble Interruptor Sencillo).- En esta configuración se tienen 2 entradascon una tierra común que pueden controlar de distintas maneras 2 interruptores simples independientes. Arquitectura interna del modelo Victory 321/421DPST (Double Pole Double Throw, Polo Doble Interruptor Doble).- En esta configuración se tienen 2 entradascon una tierra común que pueden controlar de distintas maneras 2 interruptores dobles independientes.
  11. 11. Arquitectura interna del modelo Victory 300 EL FUNCIONAMIENTO DEL CIRCUITO ES EL SIGUIENTE:PARA ENTRAR: 1. En la pantalla del LCD se muestra el mensaje "INTRODUZCA CLAVE" entonces introduces la clave de acceso, que inicialmente será 0000 y pulsas la A para que se abra la puerta. 2. Cuando el código introducido no es el correcto se muestra el mensaje "CLAVE INCORRECTA" y la puerta no se abre. 3. Cuando se acumulan tres fallos al introducir la clave suena una sirena por un altavoz durante unos 15 segundos, después se puede volver a probar.PARA CAMBIAR LA CLAVE: 1. Pulsar la tecla C de cambio de clave, entonces aparece durante unos instantes el mensaje "CAMBIO DE CLAVE" 2. Después te pide la clave que tenias hasta ese momento (inicialmente la 0000) con el mensaje "CLAVE ANTIGUA". Tecleas la clave y pulsas A 3. Si la clave es correcta te pide la "NUEVA CLAVE". Tecleas la nueva clave y pulsas A. 4. A continuación te pide que repitas la clave para verificarla con el mensaje "VERIFIQUE CLAVE". Tecleas de nuevo la misma clave y pulsas A. Si te equivocas te avisa y vuelves a introducir la nueva clave 5. Si la verificación es correcta se cambia la clave y se muestra el mensaje "CLAVE CAMBIADA" durante unos segundos.LA CLAVE DE ACCESO 1. Inicialmente es la 0000 2. La calve se almacena en la memoria EEPROM de datos del PIC, por lo que, cuando se desconecte la alimentación del circuito se conserva la clave 3. Consta de 4 códigos que pueden ser: números del 0 al 9, asteriscos (*), y almohadillas (#). A diferencia de los códigos tradicionales que solo usan los números. Esto proporciona 20736 combinaciones posibles frente a las 10000 que se consiguen solo con números, lo que se traduce en mayor seguridad. FOTOS. F1. F2.
  12. 12. F3. F4. F5. F6.PROGRAMA.
  13. 13. ACCESO CODIGO ACCESO ?El programa empezará pidiendo la clave OKacceso con la siguiente pantalla: OK ! de ! OK !Una vez introducida la combinación 1579 * * * ) ( * con el teclado, se dará el visto bueno con la siguiente pantalla:Se activará el relé asociado al electroimán o a otro mecanismo electromecánico que nos abrirá la puerta.Si la combinación no es la adecuada, nos aparecerá otra pantalla informándonos que no es la clave de acceso.Al cabo de unos segundos aparecerá la primera pantalla pidiéndonos la clave de acceso.El programador IC-PROG cargado con el programa cerradurra.hex , los datos 31h, 35h,37h y 39h en la zonaeeprom y parámetros de programación: oscilador, fuses, etc. ACCESO NO! NO! NO!
  14. 14. Programa.;--------------------------------------------------------------------------------------------------;Proyecto CERRADURA.;--------------------------------------------------------------------------------------------------;IMPORTANTE GRABAR EN EEPROM LOS DATOS SIGUIENTES:;POR EJEMPLO, CLAVE = 1579; EN ASCII = 31h-35h-37h,39h;fah = 31h;fbh = 35h;fch = 37h;fdh = 39h;para CLAVE de ACCESO.;---------------------------------------------------------;OSCILLATOR = XTAL/4 MHz.;CODE PROTECT = CP OFF;FUSES:;WDT = NO ;LVP = NO;PWRT = SI ;CPD = NO;BODEN = SI ;WRT = SI
  15. 15. ;DEBURGGER = NO call lconfigW;----------------------------------------------------- call lcdcdg; CODIGO LIST p=16f84 pagina0 INCLUDE <p16f84.inc> ;Activar/desactivar buzzer pagina0 macro call bz1 bcf PCLATH,4 call sg1 bcf PCLATH,3 call bz1 endm pagina1 macro bcf PCLATH,4 ;------------------------ bsf PCLATH,3 ;--------------- endm ;--------------- pagina2 macro ;PROGRAMA bsf PCLATH,4 ;--------------- bcf PCLATH,3 ;------------------------ endm progra pagina3 macro pagina1 bsf PCLATH,4 call clave; CLAVE DE ACCESO bsf PCLATH,3 pagina0 endm;-------------------------------------------- call banco0 movlw 0ffh; clave buena ORG 00h bcf STATUS,Z goto inicio xorwf 2fh,0 btfss STATUS,Z ORG 04h goto cros goto int goto cross cros; clave malaint call sg1 nop call sg1 call bz300 retfie call sg1 call sg1 ORG 10h call bz300;-------------------------- call sg1;---------------------------- call sg1;INICIO call bz300;---------------------------- goto progra crossinicio bsf PORTA,2; on relé;Configuraciones de hard-soft. fin;Configurar PA0-5. goto fin call banco1 bcf TRISA,2 bcf TRISA,5 call banco0 ;------------------------ bcf PORTA,2; off rele ;BUZZER bcf PORTA,5; off buzzer ;------------------------ bz100;Configurar PB1-7 salidas. bsf PORTA,5 pagina3 call msg100 call pbconfig bcf PORTA,5 return;Configuración inicial LCD. call lconfigI bz300 bsf PORTA,5;Configuración de trabajo LCD. call msg300
  16. 16. bcf PORTA,5 salto3 return decfsz 32h,1 goto salto1bz1 return bsf PORTA,5 recarga1 call sg1 movlw 0c1h bcf PORTA,5 movwf 30h return goto salto2 recarga2 movlw 0c1h movwf 31h;---------------------------------- goto salto3;SUBRUTINAS DE CAMBIO DE BANCOS.;---------------------------------- ;----------------------banco0 ;Retardo de 300 mseg. bcf STATUS,IRP ;---------------------- bcf STATUS,RP1 msg300 bcf STATUS,RP0 call banco0 return movlw 0c1hbanco1 movwf 30h bcf STATUS,IRP movwf 31h bcf STATUS,RP1 movlw 01h bsf STATUS,RP0 movwf 32h return sato1banco2 decfsz 30h,1 bsf STATUS,IRP goto sato1 bsf STATUS,RP1 goto recga1 bcf STATUS,RP0 sato2 return decfsz 31h,1banco3 goto sato1 bsf STATUS,IRP goto recga2 bsf STATUS,RP1 sato3 bsf STATUS,RP0 decfsz 32h,1 return goto sato1 return recga1 movlw 0c1h;------------------------------------ movwf 30h;Subrutinas de retardos. goto salto2;----------------------------------- recga2;0c1h=193 goto= 2 useg movlw 0c1h;decfsz= 1 useg o 2 useg si el PC es modificicado o movwf 31h;la condición es verdadera goto salto3;(decfsz= 1 useg) + (goto= 2 useg)= 3 useg. ;---------------------; 3 x 193 = 579 ;Retardo de 100 mseg.; 579 x 579 = 335241 useg. ;---------------------; 335241 x 3 = 1005723 useg. msg100sg1 call banco0 call banco0 movlw 0ffh movlw 0c1h movwf 30h movwf 30h movlw 96h movwf 31h movwf 31h movlw 03h salto4a movwf 32h decfsz 30h,1salto1 goto salto4a decfsz 30h,1 decfsz 31h,1 goto salto1 goto salto4a goto recarga1 returnsalto2 ;--------------------- decfsz 31h,1 ;Retardo de 20 mseg. goto salto1 ;--------------------- goto recarga2 msg20
  17. 17. call banco0 return movlw 0ffh movwf 30h movlw 1ah ;-------------------------------- movwf 31h ;---- PAGINA 1 ------------------salto4 ;-------------------------------- decfsz 30h,1 ORG 800h goto salto4 decfsz 31h,1 ;-------------------------------- goto salto4 ;Clave de acceso y cambio de lareturn ;misma.;--------------------- ;--------------------------------;Retardo de 6 mseg. clave;--------------------- pagina3msg6 call lcdcdg; CODIGO call banco0 pagina1 movlw 0ffh call sg1sg; retardo 1 seg. movwf 30h call sg1sg movlw 08h call bztresc; buzzer movwf 31h ;--------------------------salto41 call tclcdg0; intro nº1 decfsz 30h,1 call tclcdg1; intro nº2 goto salto41 call tclcdg2; intro nº3 decfsz 31h,1 call tclcdg3; intro nº4 goto salto41return call leerfad; leo la combinación grabada;---------------------;Retardo de 2 mseg. call comparar; comparo lo introducido y lo;--------------------- grabadomsg2 call banco0 movlw 0ffh movlw 0ffh call banc0 movwf 30h bcf STATUS,Z movlw 03h xorwf 2fh,0 movwf 31h btfss STATUS,Zsalto5 goto noaceso decfsz 30h,1 goto salto5 pagina3 decfsz 31h,1 call lcdaceso; acceso admitido goto salto5 pagina1 return return;---------------------;Retardo de 45 useg. noaceso;--------------------- pagina3usg45 call lcdnoacc; acceso denegado call banco0 pagina1 movlw 0fh return movwf 30hsalto6 decfsz 30h,1 goto salto6 ;----------------------------------------- return ;Comparar datos del teclado;------------------------- ;con datos de la EEPROM;Retardo de 150 useg. ;para comprobar código.;------------------------- ;-----------------------------------------usg150 comparar call banco0 call banc0 movlw 32h movf 66h,0 movwf 30h call banc1salto61 bcf STATUS,Z decfsz 30h,1 xorwf 0eah,0; comparo 66h con eah. goto salto61 btfss STATUS,Z
  18. 18. goto malcompa en ebh. call banc0 call banc0 return movf 67h,0 leerfc call banc1 movlw 0fch bcf STATUS,Z call leercdg xorwf 0ebh,0; comparo 67h con ebh. call banc1 btfss STATUS,Z movwf 0ech; leo fch de la eeprom y lo goto malcompa guardo en ech. call banc0 call banc0 return movf 68h,0 leerfd call banc1 movlw 0fdh bcf STATUS,Z call leercdg xorwf 0ech,0; comparo 68h con ech. call banc1 btfss STATUS,Z movwf 0edh; leo fdh de la eeprom y lo goto malcompa guardo en edh. call banc0 call banc0 return movf 69h,0 call banc1 leercdg bcf STATUS,Z call banc2 xorwf 0edh,0; comparo 69h con edh. movwf EEADR btfss STATUS,Z call banc3 goto malcompa bcf EECON1,EEPGD bsf EECON1,RD call banc0 call banc2 movlw 0ffh; cifra correcta. movf EEDATA,0 movwf 2fh call banc0 return returnmalcompa call banc0 movlw 00h; cifra incorrecta. movwf 2fh return ;------------------------------------------------ ;Teclado para código de acceso. ;------------------------------------------------ tclcdg0 pagina2 call teclado;---------------------------------------- pagina1;Leer datos de la EEPROM. movf 2dh,0;--------------------------------------- movwf 66h; guardo nº1 en 66hleerfad return call leerfa call leerfb tclcdg1 call leerfc pagina2 call leerfd call teclado return pagina1leerfa movf 2dh,0 movlw 0fah movwf 67h; guardo nº2 en 67h call leercdg return call banc1 movwf 0eah; leo fah de la eeprom y lo guardo tclcdg2en eah. pagina2 call banc0 call teclado return pagina1leerfb movf 2dh,0 movlw 0fbh movwf 68h; guardo nº3 en 68h call leercdg return call banc1 movwf 0ebh; leo fbh de la eeprom y lo guardo tclcdg3
  19. 19. pagina2 call teclado sg1sg pagina1 call banc0 movf 2dh,0 movlw 0c1h movwf 69h; guardo nº4 en 69h movwf 30h return movwf 31h movlw 03h movwf 32h salto1x;------------------------------------ decfsz 30h,1;Subrutinas del BUZZER goto salto1x;----------------------------------- goto recarga1xbzcien salto2x bsf PORTA,5 decfsz 31h,1 call msgcien goto salto1x bcf PORTA,5 goto recarga2x return salto3x decfsz 32h,1bztresc goto salto1x bsf PORTA,5 return call msgtresc recarga1x bcf PORTA,5 movlw 0c1h return movwf 30hbzseg goto salto2x bsf PORTA,5 recarga2x call sg1sg movlw 0c1h bcf PORTA,5 movwf 31h return goto salto3x;----------------------------------;SUBRUTINAS DE CAMBIO DE BANCOS. ;----------------------------------;---------------------------------- ;Retardo de 300 mseg.banc0 ;----------------------------------- bcf STATUS,IRP msgtresc bcf STATUS,RP1 call banc0 bcf STATUS,RP0 movlw 0c1h return movwf 30hbanc1 movwf 31h bcf STATUS,IRP movlw 01h bcf STATUS,RP1 movwf 32h bsf STATUS,RP0 sato1x return decfsz 30h,1banc2 goto sato1x bsf STATUS,IRP goto recga1x bsf STATUS,RP1 sato2x bcf STATUS,RP0 decfsz 31h,1 return goto sato1xbanc3 goto recga2x bsf STATUS,IRP sato3x bsf STATUS,RP1 decfsz 32h,1 bsf STATUS,RP0 goto sato1x return return;------------------------------------ recga1x;Subrutinas de retardos. movlw 0c1h;------------------------------------ movwf 30h;0c1h=193 goto= 2 useg goto salto2x;decfsz= 1 useg o 2 useg si el PC es modificado o recga2x;la condición es verdadera movlw 0c1h;(decfsz= 1 useg) + (goto= 2 useg)= 3 useg. movwf 31h; 3 x 193 = 579 goto salto3x; 579 x 579 = 335241 useg. ;----------------------------------; 335241 x 3 = 1005723 useg. ;Retardo de 100 mseg. ;----------------------------------
  20. 20. msgcien call banc0 call bz100a movlw 0ffh return movwf 30h movlw 96h numero3 movwf 31h addwf PCL,1salto4ax retlw 3fh decfsz 30h,1 retlw 3eh goto salto4ax retlw 39h decfsz 31h,1 retlw 3fh goto salto4ax retlw 36hreturn retlw 3fh retlw 3fh retlw 3fh retlw 33h;------------------------------ retlw 3fh;------ PAGINA 2 -------------- retlw 3fh;------------------------------ retlw 3fh ORG 1000h retlw 3fh retlw 3fh;-------------------------- retlw 3fh;-------------------------- retlw 3fh; TECLADO ;---------;------------------ tedoc2;------------------ bcf PORTB,0teclado bsf PORTB,1 call conftcl nop;--------- noptedoc3 btfsc PORTB,4 bcf PORTB,2 goto fintcl2 bsf PORTB,0 btfsc PORTB,5 nop goto fintcl2 nop btfsc PORTB,6 btfsc PORTB,4 goto fintcl2 goto fintcl3 btfsc PORTB,7 btfsc PORTB,5 goto fintcl2 goto fintcl3 goto tedoc1 btfsc PORTB,6 goto fintcl3 fintcl2 btfsc PORTB,7 movf PORTB,0 goto fintcl3 movwf 2ah goto tedoc2 andlw 07h addlw 30hfintcl3 movwf 2bh; unidades movf PORTB,0 movwf 2ah movf 2ah,0 andlw 07h movwf 2ch addlw 30h swapf 2ch,0 movwf 2bh; unidades andlw 0fh addlw 30h movf 2ah,0 movwf 2ch; decenas movwf 2ch swapf 2ch,0 andlw 0fh andlw 0fh call numero2 addlw 30h movwf 2dh movwf 2ch; decenas call pbI3Otlc andlw 0fh call numero3 call bz100a movwf 2dh return call pbI3Otlc numero2
  21. 21. addwf PCL,1 retlw 34h retlw 3fh retlw 3fh retlw 30h retlw 3fh retlw 38h retlw 3fh retlw 3fh retlw 31h retlw 35h retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 32h retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh retlw 3fh ;------------------------------------------------- retlw 3fh ;Configurar Pb para teclado. retlw 3fh ;------------------------------------------------- retlw 3fh conftcl;--------- call banco1atedoc1 bsf OPTION_REG,NOT_RBPU bcf PORTB,1 movlw 0f0h bsf PORTB,2 movwf TRISB nop call banco0a nop bcf PORTB,0 btfsc PORTB,4 bcf PORTB,1 goto fintcl1 bcf PORTB,2 btfsc PORTB,5 bcf PORTB,3 goto fintcl1 return btfsc PORTB,6 goto fintcl1 ;--------------------------------------------------------- btfsc PORTB,7 ;Puerto B 7,6,5,4 y 2,1,0 = entradas y goto fintcl1 ;la 3 se queda como salida a cero para ;inhabilitar la LCD. goto tedoc3 ;--------------------------------------------------------- pbI3Otlcfintcl1 call banco1a movf PORTB,0 movlw 0f7h movwf 2ah movwf TRISB andlw 07h call banco0a addlw 30h return movwf 2bh; unidades ;----------------------- movf 2ah,0 ;Buzzer movwf 2ch ;----------------------- swapf 2ch,0 bz100a andlw 0fh bsf PORTA,5 addlw 30h call msg100a movwf 2ch; decenas bcf PORTA,5 return andlw 0fh call numero1 ;--------------------- movwf 2dh ;Retardo de 100 mseg. ;--------------------- call pbI3Otlc msg100a call banco0a call bz100a movlw 0ffh return movwf 30hnumero1 movlw 96h addwf PCL,1 movwf 31h retlw 3fh sato4a retlw 3ch decfsz 30h,1 retlw 37h goto sato4a retlw 3fh decfsz 31h,1
  22. 22. goto sato4a return return ;---------------------------------- ;Subrutina de configuración de la;---------------------------------- ;LCD para comenzar a trabajar.;SUBRUTINAS DE CAMBIO DE BANCOS. ;----------------------------------;---------------------------------- lconfigWbanco0a call ldisplay10x bcf STATUS,IRP call lcursorder bcf STATUS,RP1 return bcf STATUS,RP0 ;--------------------------------------- return ;Puerto B 0= entrada, 1,2 y 3 = salidasbanco1a ;y las pongo a cero. bcf STATUS,IRP ;--------------------------------------- bcf STATUS,RP1 pbcontrol bsf STATUS,RP0 call banco11 return bsf TRISB,0banco2a bcf TRISB,1 bsf STATUS,IRP bcf TRISB,2 bsf STATUS,RP1 bcf TRISB,3 bcf STATUS,RP0 call banco00 return bcf PORTB,1banco3a bcf PORTB,2 bsf STATUS,IRP bcf PORTB,3 bsf STATUS,RP1 return bsf STATUS,RP0 ;------------------------------return ;Puerto B 4,5,6 y 7 = salidas ;y las pongo a cero. ;------------------------------ pbbusO;------------------------------------ call banco11;----- PAGINA 3 --------------------- bcf TRISB,4;------------------------------------ bcf TRISB,5 ORG 1800h bcf TRISB,6;------------------------------- bcf TRISB,7;Subrutinas de la pantalla LCD. call banco00;------------------------------- bcf PORTB,4 bcf PORTB,5;---------------------------- bcf PORTB,6;Subrutina de configuración bcf PORTB,7;del puerto B(1-7 bit). return;----------------------------pbconfig ;------------------------------ call pbcontrol ;Puerto B 4,5,6 y 7 = entradas. call pbbusO ;------------------------------ return pbbusI call banco11;------------------------------------- bsf TRISB,4;Subrutina de configuración inicial bsf TRISB,5;de la pantalla lCD. bsf TRISB,6;------------------------------------- bsf TRISB,7lconfigI call banco00 call mseg20 return call l8xx call mseg6 ;-------------------------------------- call l8xx ;Puerto B 7,6,5,4 y 2,1,0 = entradas y call useg150 ;la 3 se queda como salida a cero para call l8xx ;inhabilitar la LCD. call l4xx ;-------------------------------------- call l427 pbI3O call ldisplay0xx call banco11 call lclear bsf TRISB,0 call lmode10 bsf TRISB,1
  23. 23. bsf TRISB,2 ;--------------------------------------- bsf TRISB,4 w20HpbH bsf TRISB,5 btfsc 20h,4 bsf TRISB,6 goto sal1 bsf TRISB,7 bcf PORTB,4 call banco00 sal11 return btfsc 20h,5 goto sal2;-------------------------------- bcf PORTB,5;Pulso de habilitación del LCD. sal22;-------------------------------- btfsc 20h,6lE1 goto sal3 nop bcf PORTB,6 bcf PORTB,3 sal33 nop btfsc 20h,7 bsf PORTB,3 goto sal4 return bcf PORTB,7lE2 sal44 nop return bcf PORTB,3 sal1 nop bsf PORTB,4 return goto sal11;------------ sal2;Leer dato. bsf PORTB,5;------------ goto sal22lrd sal3 bsf PORTB,1 bsf PORTB,6 bsf PORTB,2 goto sal33 call lE1 sal4 return bsf PORTB,7;--------------- goto sal44;Escribir dato.;--------------- ;--------------------------------------lwd ;Escribir 20h LOW en el puerto B HIGH. bsf PORTB,1 ;-------------------------------------- bcf PORTB,2 w20LpbH call lE1 btfsc 20h,0 return goto salt1;---------------------------------- bcf PORTB,4;Leer instrucción: la bandera BF salt11;y el contador de direcciones. btfsc 20h,1;---------------------------------- goto salt2lri bcf PORTB,5 bcf PORTB,1 salt22 bsf PORTB,2 btfsc 20h,2 call lE1 goto salt3 return bcf PORTB,6;----------------------- salt33;Escribir instrucción. btfsc 20h,3;----------------------- goto salt4lwi bcf PORTB,7 bcf PORTB,1 salt44 bcf PORTB,2 return call lE1 salt1 return bsf PORTB,4;------------------------- goto salt11;Escribir instrucciones. salt2;------------------------- bsf PORTB,5;De 20h a port B HIGH. goto salt22; salt3;--------------------------------------- bsf PORTB,6;Escribir 20h HIGH en el puerto B HIGH. goto salt33
  24. 24. salt4 ;El cursor se mueve incremental (I/D= 1) bsf PORTB,7 ;y el display no se desplaza automáticamente (S= 0). goto salt44 ;----------------------------------------------------;----------------------------------------- lmode10;Escribir instrucción de "No operación". movlw 06h;----------------------------------------- call winstlnop return movlw 00h call winst ;---------------------------------------------- return ;El cursor se mueve decrementalmente (I/D= 0)winst ;y el display se desplaza autom. (S= 1). movwf 20h ;---------------------------------------------- call lwi lmode01 call w20HpbH movlw 05h call lE2 call winst call useg45 return ;----------------------------------------------- call lwi ;El cursor se desplaza decrementalmente (I/D=0) call w20LpbH ;y el display no desplaza autom. (S=0). call lE2 ;----------------------------------------------- call useg45 lmode00 return movlw 04h;------------------------------------------- call winst;Escribir inst. de limpiar display y return;poner a cero el contador de direcciones. ;-----------------------------------------;------------------------------------------- ;Escribir inst. del control del display.lclear ;----------------------------------------- movlw 01h ;------------------------------------------------------------- call winstt ;Display on, D= 1; Cursor on, C= 1; Cursor parpadeante, return B=1.winstt ;------------------------------------------------------------- movwf 20h ldisplay111 call lwi movlw 0fh call w20HpbH call winst call lE2 return call mseg2 ;---------------------------------------------------------------- ;Display on, D= 1; Cursor on, C= 1; Cursor no call lwi parpadeante, B=0. call w20LpbH ;---------------------------------------------------------------- call lE2 ldisplay110 call mseg2 movlw 0eh return call winst;---------------------------------- return;Escribir inst. de cursor a casa. ;-----------------------------------------;---------------------------------- ;Display on, D= 1; Cursor off, C= 0; B= x.lhome ;----------------------------------------- movlw 02h ldisplay10x call winstt movlw 0ch return call winst;------------------------------------ return;Escribir inst. de modo de entrada. ;--------------------------------;------------------------------------ ;Display off, D= 0; C= x; B= x.;------------------------------------------------------ ;--------------------------------;El cursor se mueve en dirección incremental (I/D= 1) ldisplay0xx;y el display se desplaza automáticamente (S= 1). movlw 08h;------------------------------------------------------ call winstlmode11 return ;------------------------------------------ movlw 07h ;Desplazar display o mover cursor (S/C) y call winst ;especificar dirección (R/L). return ;------------------------------------------;----------------------------------------------------
  25. 25. ;------------------------------------------ l4xx;Desplazar display y no cursor (S/C=1) a call lwi;la derecha (R/L=1). movlw 20h;------------------------------------------ movwf 20hldisplayder call w20HpbH movlw 1ch call lE2 call winst call useg45 return return;----------------------------------------- l417;Desplazar display y no cursor (S/C=1) a movlw 20h;la izquierda (R/L=0). call winst;----------------------------------------- returnldisplayizq l427 movlw 18h movlw 28h call winst call winst return return;------------------------------------ l4110;Mover cursor y no dispaly (S/C=0) a movlw 24h;la derecha (R/L=1). call winst;------------------------------------ returnlcursorder l4210 movlw 14h movlw 2ch call winst call winst return return;------------------------------------;Mover cursor y no dispaly (S/C=0) a ;------------------------------------------;la izquierda (R/L=0). ;Subrutina para colocar datos seguidos;------------------------------------ ;------------------------------------------lcursorizq wdato movlw 10h movwf 20h call winst ºcall lwd return call w20HpbH;--------------------------------------------------- call lE2;Función Set. call useg45;Configurar la pantalla: bus de 4 o 8 bits (DL),;1 o 2 líneas (N) y nº de puntos (5x10 o 5x7) (F). call lwd;--------------------------------------------------- call w20LpbHl8xx call lE2 call lwi call useg45 movlw 30h return movwf 20h ;------------------------------------------ call w20HpbH ;Subrutina para colocar datos en cualquier call lE2 ;posición de la pantalla: DDRAM address. call useg45 ;------------------------------------------ returnl817 wdir movlw 30h addlw 80h call winst movwf 20h return call lwil827 call w20HpbH movlw 38h call lE2 call winst call useg45 returnl8110 call lwi movlw 34h call w20LpbH call winst call lE2 return call useg45l8210 return movlw 3ch call winst ;------------------------ return ;Retardos para la LCD. ;------------------------
  26. 26. decfsz 31h,1;--------------------- goto salto41s;Retardo de 1 seg. return;--------------------- ;---------------------seg1 ;Retardo de 20 mseg. call banco0 ;--------------------- movlw 0c1h mseg20 movwf 30h call banco00 movwf 31h movlw 0ffh movlw 03h movwf 30h movwf 32h movlw 1ahsaltoa movwf 31h decfsz 30h,1 salto4s goto saltoa decfsz 30h,1 goto recargaa goto salto4ssaltob decfsz 31h,1 decfsz 31h,1 goto salto4s goto saltoa return goto recargabsaltoc decfsz 32h,1 ;--------------------- goto saltoa ;Retardo de 45 useg. return ;---------------------recargaa useg45 movlw 0c1h call banco00 movwf 30h movlw 0fh goto saltob movwf 30hrecargab salto6s movlw 0c1h decfsz 30h,1 movwf 31h goto salto6s goto saltoc return ;-------------------------;--------------------- ;Retardo de 150 useg.;Retardo de 2 mseg. ;-------------------------;--------------------- useg150mseg2 call banco00 call banco00 movlw 32h movlw 0ffh movwf 30h movwf 30h salto61s movlw 03h decfsz 30h,1 movwf 31h goto salto61ssalto5s return decfsz 30h,1 goto salto5s decfsz 31h,1 ;---------------------------------- goto salto5s ;SUBRUTINAS DE CAMBIO DE BANCOS. return ;---------------------------------- banco00;--------------------- bcf STATUS,IRP;Retardo de 6 mseg. bcf STATUS,RP1;--------------------- bcf STATUS,RP0mseg6 return call banco00 banco11 movlw 0ffh bcf STATUS,IRP movwf 30h bcf STATUS,RP1 movlw 08h bsf STATUS,RP0 movwf 31h returnsalto41s banco22 decfsz 30h,1 bsf STATUS,IRP goto salto41s bsf STATUS,RP1
  27. 27. bcf STATUS,RP0 call wdato return movlw 0a3h; /banco33 call wdato bsf STATUS,IRP call pbI3O bsf STATUS,RP1 return bsf STATUS,RP0 return ;----------------------------------- ;_ _ _ _ A C C E S O _ _ _ _ _ _ ;_ _ O K ! _ O K ! _ O K ! _ _ _;---------------------------------;_ C O D I G O _ A C C E S O _ ? lcdaceso;_ _ _ _ _ / * * * * / _ _ _ _ _lcdcdg call pbconfig call pbconfig call lclear call lclear call lhome call lhome movlw 04h movlw 20h; call wdir call wdato movlw 43h; C movlw 41h; A call wdato call wdato movlw 4fh; O movlw 43h; C call wdato call wdato movlw 44h; D movlw 43h; C call wdato call wdato movlw 49h; I movlw 45h; E call wdato call wdato movlw 47h; G movlw 53h; S call wdato call wdato movlw 4fh; 0 movlw 4fh; 0 call wdato call wdato movlw 20h; call wdato movlw 42h movlw 41h; A call wdir call wdato movlw 43h; C movlw 4fh; O call wdato call wdato movlw 43h; C movlw 4bh; K call wdato call wdato movlw 45h; E movlw 21h; ! call wdato call wdato movlw 53h; S movlw 20h call wdato call wdato movlw 4fh; 0 movlw 4fh; O call wdato call wdato movlw 20h movlw 4bh; K call wdato call wdato movlw 3fh; ? movlw 21h; ! call wdato call wdato movlw 20h movlw 45h call wdato call wdir movlw 4fh; O call wdato movlw 0a2h; / movlw 4bh; K call wdato call wdato movlw 2ah; * movlw 21h; ! call wdato call wdato movlw 2ah; * movlw 20h call wdato call wdato movlw 2ah; * call pbI3O call wdato return movlw 2ah; *
  28. 28. ;--------------------------------- movlw 4eh; N;_ _ _ _ A C C E S O _ _ _ _ _ _ call wdato;_ _ N O ! _ N O ! _ N O ! _ _ _ movlw 4fh; O call wdatolcdnoacc movlw 21h; ! call pbconfig call wdato call lclear movlw 20h call lhome call wdato movlw 4eh; N movlw 04h call wdato call wdir movlw 4fh; O call wdato movlw 41h; A movlw 21h; ! call wdato call wdato movlw 43h; C movlw 20h call wdato call wdato movlw 43h; C movlw 4eh; N call wdato call wdato movlw 45h; E movlw 4Fh; O call wdato call wdato movlw 53h; S movlw 21h; ! call wdato call wdato movlw 4fh; 0 movlw 20h call wdato call wdato call pbI3O movlw 42h return call wdir END

×