Tesispptfinal
-
Upload
alvaro-alcocer-sotil -
Category
Documents
-
view
90 -
download
0
Transcript of Tesispptfinal
TESIS: ALARMA DIGITAL DE 4 ZONAS
EXPOSITOR: Alcocer Sotil, Álvaro
INTRODUCCIÓN
I PLANTEAMIENTO DEL PROBLEMA
1.1 Antecedentes 1.2 Justificación1.3 Formulación de problema1.4 Limitaciones
II OBJETIVOS
2.1 Objetivo General 2.2 Objetivos Específicos
III MARCO TEÓRICO Y CONCEPTUAL
3.1 Antecedentes de la investigación .3.1.1 Sistema de radio
3.1.1.1 Ventajas3.1.1.2 Inconvenientes
3.1.2 Sistema de cableado3.1.2.1 Ventajas3.1.2.2 Inconvenientes
3.1.3 Sistema volumétrico de sensores3.1.3.1 Ventajas
3.1.3.2 Inconvenientes3.1.4 Sistema de alarma simple
3.1.4.1 Ventajas3.1.4.2 Inconvenientes
3.1.5 Sistema de vigilancia y seguridad usando mux demux3.1.5.1 Descripción la operación completa del circuito3.1.5.2 Desventajas
3.1.6 Circuito de alarma usando un latch d 3.1.6.1 Descripción
3.1.7 Detector Infrarrojo de proximidad
3.2 Bases teóricas3.3 Definición de términos básicos
3.3.1 alarma3.3.2 sensor
3.4 hipótesis IV SISTEMA DE VARIABLES
4.1 Determinación de Variables4.2 Propuesta de indicadores V METODOLOGÍA DE LA INVESTIGACIÓN 5.1 Diseño y técnicas de recolección de información.5.2 Población y muestra5.3 Técnica de análisis
5.3.1 Sistema de codificación y tabulación.
5.4 Índice analítico tentativo del proyecto.5.5 Guía de trabajo de campo.5.6 Tipo y nivel de investigación.
5.6.1 Cobertura de estudio.5.6.1.1.Universo y Población 5.6.1.2.Muestra
5.7 Fuentes, Técnicas y Instrumentos de Recolección de Datos
VI.- ASPECTOS ADMINISTRATIVOS
6.1.- Recursos: Humanos 6.1.1 Asesores 6.2.- Presupuesto 6.3.- Cronograma de Actividades.6.4.- Financiamiento.
VII.- DESARROLLO DEL PROYECTO- ALARMA DIGITAL DE 4 ZONAS CON PIC16F877 7.1 Introducción:7.2 Descripción7.3 Funcionamiento en el programa de simulación proteus
Circuito pictórico de la Alarma Digital
7.4 Tipos de sensores 7.5 Tecnología RISC
7.5.1 Explicación del sistema7.5.2 Descripción de los elementos utilizados7.5.3 Apreciación global del dispositivo7.5.4 Organización de la memoria
7.5.4.1 Organización de la memoria de programa 7.5.4.2 Organización de la memoria de datos7.5.5 Archivos de registro de propósito general
7.5.5.1 Option_reg register7.5.5.2 Intcon register (address 0bh, 8bh, 10bh, 18bh)\
7.2.6 LCD Juego de caracteres
IX.- ANEXOS
9.1 Diagrama de Flujo
9.2 Programa de la alarma en assembler
9.3 Programa del LCD en assembler
9.4 Especificaciones técnicas de los componentes usados en el proyecto
9.4.1 74HC04
9.4.2 7805
9.4.3 2N2222
9.4.4 1N4148
Introducción
El presente trabajo está distribuido en 5 partes, el primero trata de la realidad del problema describiéndolo, formulándolo y avalando la necesidad del trabajo mediante una justificación para la inversión en el proyecto. La segunda parte se plantean los conocimientos teóricos y técnicos necesarios para entender el problema, así como la solución propuesta; La tercera parte establecemos las consideraciones metodológicas que garantizan la calidad y veracidad del texto como documento científico, identificamos las estrategias, técnicas, población, muestra y valores de metodología científica consideradas y por considerar. En la cuarta parte presentamos lo relacionado con la gestión financiera del proyecto, un análisis técnico.Por último desarrollamos nuestro proyecto anexando el circuito, el programa en assembler y el diagrama de flujo.
I.-PLANTEAMIENTO DEL PROBLEMA Se necesita de una plataforma que implica tecnología, que opere en una red de comunicaciones digitales y en tiempo real de ser factible; solo así será posible detectar el crimen y al criminal a tiempo, atraparlo y castigarlo.
1.1.- Antecedentes
Una solución que se ha utilizado por muchos años es el uso de electrónica digital basada en circuitos integrados (CI) de baja y mediana integración. La prueba de esta lógica muchas veces se hace utilizando los CI en los llamados "protoboards".
1.2.- Justificación Esto es un problema real que diariamente sucede en los hogares donde los encargado de los cuidados (la policía ) transita con menos frecuencia, así afectando la economía de las familias ya que si sucede un robo nada dejan a su paso es por eso hacer instalaciones de alarmas digitales que reflejaría de un uso vital en el hogar
1.3.-Formulación del problema ¿Cuáles deben de ser las herramientas y recursos mínimos necesarios que deberán ser considerados, utilizados e instalados para poder crear la tranquilidad de la población y así poder disponer de una plataforma que permita detectar en forma eficiente los distintos robos para que puedan ser procesados por el sistema legal peruano?
1.4.- Limitaciones
Radica en la actualidad del proyecto que se desarrolla, pues para que el mismo sirva a sus propósitos, debe ser actual con relación al medio donde se utiliza
II. OBJETIVOS
2.1.-Objetivo General Establecer, prevenir y llevar tranquilidad a las familias
2.2.- Objetivos específicos
* Llegar a todos los hogares con publicidad u orientación, como una alternativa para la prevención de los robos.
* Identificar cuáles son los mecanismos de mayor éxito y seguros que se utilizan en diversas partes de la población en la lucha contra el robo de hogares. * Identificar el posible impacto social y económico de la propuesta.
III.- MARCO TEÓRICO Y CONCEPTUAL 3.1.-Antecedentes de la investigación Sistemas de alarmaSistemas de alarma
-La elección de alarma para un hogar debe basarse en el grado de seguridad que deseemos o necesitemos. -Una alarma en un hogar garantiza al menos un poco de seguridad al alertar a las personas en las cercanías de la intrusión.-Hay distintos sistemas de alarma: 3.1.1 Sistema de radioVentajas:- Su instalación no requiere reforma alguna en el hogar. - Más económico que el sistema cableado. Inconvenientes: - Menor grado de vigilancia que el cableado. Circuito ace home center
3.1.2 Sistema de cableado
Ventajas:- Garantiza la vigilancia en toda la vivienda
Inconvenientes: - No es posible su instalación sin un previo levantamiento del suelo o paredes, según el caso, para colocar los cables.
-Los costes de instalación y mantenimiento son más elevados
3.1.3 Sistema volumétrico de sensores: captan el movimiento en el campo de actuación determinado por la longitud de onda.
Ventajas:- Garantiza una seguridad activada por el propio usuario.
Inconvenientes:- La alarma puede saltar con mayor facilidad que el resto de los sistemas.
3.1.4 Sistema de alarma simple: baratas y de fácil instalación, su objetivo es ahuyentar a los intrusos.
Ventajas:- Las más baratas. - Su instalación es muy sencilla.
Inconvenientes:- No están conectadas a una central receptora, por lo que la policía no acudirá en caso de que suene, salvo que alguien les avise. - Los precios son muy diversos y dependen mucho tanto del modo en que se instalen las alarmas como de las características de la propia vivienda.
3.1.5 Sistema de vigilancia y seguridad usando mux demux. Un planteamiento que reduciría la cantidad de alambrado hacia el panel de monitoreo consiste en usar una combinación multiplexor-demultiplexor. En la fig.3.1 se muestra un sistema que puede manejar ocho puertas, pero la idea básica se puede expandir a cualquier número de puertas.
Fig.3.1 Sistema de vigilancia y seguridad
Fig. 3.2 (a) El decodificador 74ALS138 puede operar como un demultiplexor con e1 usado como la entrada de datos (b) Formas de ondas comunes para un código de SELECT
Fig. 3.3 Un demultiplexor de reloj transmite la señal de reloj a un destino determinado por las entradas de SELECT de código
3.1.5.1 Descripción la operación completa del circuito. Por ejemplo, digamos que el contador está en el conteo de 110(6). Mientras el contador está en ese estado, se puede decir que la puerta 6 está cerrada. El nivel BAJO en Io pasará por el MUX y se invertirá para producir un ALTO en Z. Este ALTO pasará por el DEMUX hacia la salida O6 de modo que el LED 6 estará
apagado, lo que indica que la puerta 6 está cerrada. Ahora supongamos que la puerta 6 está abierta. Aparecerá un nivel bajo en Z y O6 de modo que el LED 6 estará iluminado para señalar
que la puerta 6 está abierta. Por supuesto, todos los otros LEDs estarán apagados durante este tiempo porque O6 es la única
salida activa. A medida que el contador se sincroniza a través de sus ocho estados de 000 a 111, los LEDs indicarán secuencialmente el estado de las ocho puertas. Si todas las puertas están cerradas, ninguno de los LEDs estará iluminado aun cuando se seleccione la salida correspondiente del DEMUX. Si se abre una puerta, su LED se iluminará sólo en el intervalo en el contador en que el intervalo este en el conteo apropiado
3.1.5.2 Desventajas. Los datos de la tabla 3.1 revela que los LEDs correctos destellan para las puertas abiertas de la 4 a la 7. Asimismo, muestran que para puertas abiertas de la 0 a la 3 el número de LED destellando es cuatro, más que el número de la puerta y de los LEDs 0 al 3 que siempre están apagados.
Tabla 3.1-detección de fallas
3.1.6 Circuito de alarma usando un latch d.
Fig. 3.4 3.1.6.1 Descripción. Con la luz proyectada en el fototransistor se puede suponer que es completamente conductora, de manera que la resistencia entre el colector y el emisor es muy pequeña. Así , Vo será próxima a 0V. de manera que SET=CLEAR=0.Cuando el haz de luz se interrumpe, el fototransistor se desactiva y su resistencia entre el colector y el emisor se hace muy alta Esto causa que Vo se eleve aproximadamente a 5V; esto activa la entrada SET, lo cual fija Q en ALTO y enciende la alarma. Q permanecerá en ALTO y la alarma continuará encendida aun si Vo retorna a 0V esto se debe a que SET y CLEAR serán BAJOS, lo cual no produce ningún cambio en Q.
3.1.7 Detector Infrarrojo de proximidad: Sirve para puerta de casa o bien detectores para carros, delanteros y traseros, para estacionamiento de autos. Este circuito emite señales luminosas infrarrojas, al rebotar contra un objeto, se reciben con un receptor. Al ser recibidas el sistema detecta proximidad con lo que el led de salida se acciona (brilla). El circuito integrado es un generador/decodificador de tonos que bien cumple con las necesidades de este diseño. Tanto el fotodiodo como el fototransistor deberán estar situados con unidades de enfoque adecuadas para mejorar el alcance.
3.2 Bases teóricas
Microprocesadores I y IIAplicaciones electrónicas I y II.Sistemas digitales Circuitos Electrónicos
3.3Definición de términos básicos
3.3.1 alarma. Dispositivo electrónico que pone en advertencia a la gente de un peligro particular o de un problema. Existen alarmas contra incendios, alarmas contra humo, etc.
3.3.2 sensor. Dispositivo electrónico que reacciona a la luz, calor, presión,
movimiento, temperatura, etc para activar o desactivar un proceso electrónico o mecánico.
3.4 Hipótesis
Con la implementación de un sistema de resguardo de hogares a bajo costo permitirá incrementar este tipo de servicios a mayor cantidad de hogares limitando los robos a los mismos. IV. SISTEMAS DE VARIABLES 4.1 Determinación de variables La variable de estudio para este proyecto de tesis están comprendidos por:
-Modalidad de robos-Sistemas de seguridad y prevención
4.2 Propuesta de indicadores-Los puntos vulnerables de seguridad en los hogares -Demanda del sistema de seguridad -Estadísticas de robos en los hogares (lugares como en La Molina)
V. METODOLOGÍA DE LA INVESTIGACIÓN 5.1.- Diseño y técnicas de recolección de información.
Zonas Bravas ( El Comercio, Domingo 8 de julio del 2006 (Policiales))
Trabas para los ladrones (El Comercio, Domingo 15 de julio del 2006 (Mi Hogar))
El reto de la próxima gestión edilicia, El Comercio 6 de agosto del 2006, Pág.. A17
El reto de la próxima gestión edilicia, El Comercio 6 de agosto del 2006, Pág.. A16
5.2.- Población y muestra.Para realizar el presente estudio se ha tomado como referencia los alumnos de San Marcos que viven en los diferentes distritos de la capital.
5.3.- Técnicas de análisis.5.3.1 Sistema de codificación y tabulación.Son las técnicas estadísticas para evaluar la calidad de los datos. Comprobar las hipótesis u obtener conclusiones.
5.4.- Índice analítico tentativo del proyecto.Se elaboró un índice analítico tentativo que dé una visión general de las partes o capítulos que contiene el trabajo a realizar.
5.5.- Guía de trabajo de campo.Para su elaboración se siguió los siguientes pasos:Estudio previo o sondeo.Diseño de la muestra.Preparación de los materiales de recolección de datos.Equipo de trabajo necesario: multímetro, fuente de voltaje DC, etc.Revista y prueba experimental de las etapas anteriores.Recolección de datos, ya sea primarios o secundarios.Elaboración del informe del trabajo de campo.
5.6 Tipo y nivel de investigaciónTécnico- experimental. 5.6.1Cobertura de estudio.
5.6.1.1Universo y Población.La población beneficiaria de este proyecto son los hogares situados en la clase media o baja de Lima Metropolitana.
5.6.1.2 Muestra. Para realizar el presente estudio se ha tomado como referencia los alumnos de San Marcos que viven en los diferentes distritos de la capital.
5.7 Fuentes, Técnicas y Instrumentos de Recolección de DatosSe procedió a realizar las entrevistas a las personas co-responsables de cada hogar, a fin de determinar sus necesidad de seguridad, en esta parte se elaboró una encuesta a fin de obtener información puntual (50 hogares)
La preguntas fueron:ENCUESTA SOBRE SEGURIDAD EN CASA
MARQUE CON √ O X SU RESPUESTA 1) ¿Han robado tu casa alguna vez? Si □ No □Si tu respuesta es SÍ responde la pregunta 2 y si es NO pasa a la pregunta 42) ¿Cómo entraron?Por la puerta: □de madera □de fierro □de otra clase de material □Por la ventana □ Otra manera:_________________________________
3) ¿Qué presumes que hayan usado los rateros para entrar a tu casa?· Pata de cabra □· Una llave de acero □· Lo abrieron de un balazo □· Otra cosa:________________________________4) ¿Tienes en casa alguna clase de protección contra robos?Si tu respuesta es NO pasa a la pregunta 5¿Qué tipo de protección?Alarma empotrada a la puerta □Alarma digital con pantalla y teclado para elegir zonas a proteger de la casa □Alarma con sensor infrarrojo en la puerta □ Otro tipo_____________________________________ 5) ¿Cuánto es lo máximo que pagaría por una alarma u otro tipo de protección para la casa? 50 soles □ 150 soles □ otra cifra _____________________6) ¿En qué distrito vives?__________________________________
ESTADISTICAS
VI. ASPECTOS ADMINISTRATIVOS
En ésta sección se ubica los aspectos administrativos del proyecto.6.1.- Recursos humanos.Aquí se relaciona las personas que participarán: asesores, equipo de recolección de datos, etc., especificando la calificación profesional y su función en la investigación.
6.1.1 Asesores:Carlos Fiestas.Ingeniero electrónico. Asesoría en la parte de microcontroladores PIC y simulación de circuitosJorge Manrique.Economista. Asesoría en la parte de estructura y organización de la tesisCristian Cóndor. Estudiante de Ingeniería electrónica. Asesoría en la parte de diseño de circuitosLa recolección de datos estuvo a cargo del tesista.
6.2.- Presupuesto.
El presente estudio tiene los siguientes costos:-Fotocopias s/.30.00-Pasajes s/.100.00-Pic 16F877 s/.2.00-El cristal s/.2.00-el sensor magnético (para las puertas o ventanas) s/.7.00-resistencias x20 s/.2.00-condensadores x3 s/.0.50-impresión de la placa x2 s/.70.00- el quemador de pics s/.70.00-la pantalla LCD s/.25.00-el teclado matricial s/.15.00-buffer 7407 (para reemplazo en el quemador) x2 s/.2.00-timer 555 (para reemplazo en el quemador) x2 s/.1.00-transistor PNP 78L12 x3 s/.0.50-transistor PNP 78L05 x3 s/.0.50-transistor PNP 2N3906 x3 s/.0.50
El presupuesto total fue de S/326.
CRONOGRAMA
ACTIVIDADES TIEMPO (días)
1. - ASESORIA METODOLOGICA 30
2. – PROPUESTA 3
3. – OBSERVACIONES 5
4. - DISEÑO DEL PROYECTO 3
5. – OBSERVACIONES 2
6. – PROYECTO 30
7. – OBSERVACIONES 5
8. – ENCUESTA 1
9. - CLASIFICACION DE MATERIAL 4
10. - TRATAMIENTO INFORMACIÓN 3
11. - ANÁLISIS E INTERPRETACIÓN 6
12. – REDACCIÓN 21
6.3.- Cronograma de Actividades.
6.4.- Financiamiento. Esta a cargo del tesista.
VII DESARROLLO DEL PROYECTO- ALARMA DIGITAL DE 4 ZONAS CON PIC16F877 7.1 Introducción Esta es una poderosa alarma digital, de simple construcción y que utiliza componentes de fácil adquisición en el mercado local. El circuito trabaja con una fuente de 12 voltios
7.2 Descripción
7.3 Funcionamiento en el programa de simulación proteus Se hace el diseño en este programa ( es bien parecido al ORCAD sino que este es más completo) . Aquí se presenta (fig1) el diseño sin simular. No se sorprenda con el teclado, la distribución es la siguiente (si no que use este porque no había uno exactamente igual al deseado)1 2 3 A4 5 6 B7 8 9 C* 0 #
Fig. 1
Fig. 1
Circuito pictórico de la Alarma Digital
CAPA TOP
CAPA BOTTOM
7.4 Tipos de sensores
Sensor para montaje sobre la superficie: se usa en puertas o ventanas.
Detector Dual de Movimiento PIR: Ignora situaciones comunes de alarmas falsas y provee detección precisa.
Detector Infrarrojo Pasivo Inalámbrico: inmune a mascotas. Equipado con un lente diseñado para entre humanos y mascotas.
Detector de Movimiento para Montaje en el Techo: con detector de cristales rotos. 360 grados.
Detector de Cristales Rotos: detectan todos los sonidos. Sistema de micrófonos que se analiza digitalmente. Inmunidad RF con protección de descarga estática y de transeúntes.
7.5 Tecnología RISC
7.5.1 Explicación del sistema.
El sistema esta basado en el microcontrolador PIC16F877 y una serie de sensores que están supervisando constantemente los diferentes eventos ocurridos en el exterior del recinto a supervisar.
7.5.2 Descripción de los elementos utilizadosMicrocontroladores FLASH CMOS de 8 bits de 28/40 pinesTipos de encapsulado del PIC16F874/7
7.5.3 Apreciación global del dispositivo. El PIC16F877/874 vienen en empaques de 40 pines. 7.5.4 Organización de la memoria. Hay tres bloques de memoria en cada uno de estos PICmicro. La memoria de programa y la Memoria de Datos, tienen buses separados de manera que el acceso concurrente puede ocurrir. Estos PIC tienen un bloque de memoria de datos EEPROM. 7.5.4.1 Organización de la memoria de programa. Los dispositivos PIC16F87X tienen contador de programa de 13 bits capaz de direccionar un espacio de memoria de programa de 8K x 14. Los dispositivos PIC16F877/876 tienen palabras de 8K x 14 de memoria de programa FLASH y los dispositivos PIC16F873/874 tienen 4K x 14.El vector de reset está en 0000h y el vector de interrupción está en 0004h.
7.5.4.2 Organización de la memoria de datos. Los bits RP1 (STATUS<6>) y RP0 (STATUS<5>) son los bits de selección de banco.
Cada banco se extiende hasta 7Fh (128 bytes). Las posiciones más bajas de cada banco están reservadas para Registros de Función Especial. Sobre estas están los Registros de Propósito General, implementados como RAM estática.
7.5.5 Archivos de registro de propósito general. El archivo de registro puede ser accesado directa o indirectamente a través de Registro de Selección de Archivo FSR.
7.5.5.1 OPTION_REG Register
7.5.7.2 INTCON REGISTER (ADDRESS 0Bh, 8Bh, 10Bh, 18Bh)
7.2.6.1 introducción1 Vss Vss Patilla de tierra de alimentación2 Vdd Vdd Patilla de alimentación de +5V3 Vo Vo Patilla de contraste del cristal líquido.
Normalmente se conecta a un potenciómetro a través del cual se aplica una tensión variable entre 0 y +5V que permite regular el contraste del cristal líquido.
4 RS RA0 Selección del registro de control/registro de datos:
RS =0 Selección del registro de controlRS =1 Selección del registro de datos
5 R/W RA1 Señal de lectura/escrituraR/W =0 El Módulo LCD es escritoR/W= 1 El Módulo LCD es leído
6 E RA2 Señal de activación del módulo LCD:E=0 Módulo desconectadoE=1 Modulo conectado
7-14 D0-D7 RB0-RB7 Bus de datos bi-direccional.
7.2.6 LCD
Juego de caracteresEs el mostrado en la siguiente Figura. Las posiciones marcadas como CG RAM (n) corresponden a uno de los 8 posibles caracteres gráficos definidos por el usuario.
Definición de macros:JeJae
CmpWriteRead
Banco0Banco1
Definición de columnas de matricialDefinición de clave de fabricanteDefinición de Dígitos del teclado
Definición de variablesInicio
Configuración de puertos y registrosLimpiar contadoresLlamada inicio LCD
Mensaje “Bienvenido Ir Menú Presione A”Configuración de interrupción
Interrupción
ExploraRc_tmr0
DetecciónDetección de clave nueva
Detección de clave anteriorClave para desactivar alarmaDetec2 (ingresa_submenú)
Tecla_14Tecla_12
Cambio_claveLz
Mensaje “Ingrese clave anterior”Detec1
Detec1_2Detec1_3Detec1_4
Compara_clave_aIr_clave2_aIr_clave3_aIr_clave4_a
Compara_antigua_clave_aMensaje_error_aClave_correcta_a
Mensaje “Nueva Clave”Detección del primer digito de la clave nueva
Detección del segundo digito de la clave nuevaDetección del tercer digito de la clave nuevaDetección del cuarto digito de la clave nueva
Mensaje “Confirmar clave”
SaltaDetección de confirmación del primer digito de la clave nueva
Detección de confirmación del segundo digito de la clave nuevaDetección de confirmación del tercer digito de la clave nuevaDetección de confirmación del cuarto digito de la clave nueva
Comparar nuevas claves y la confirmaciónEerror
CorrectoGrabar en eepromIngresar_submenú
Mensaje “Menú activar zonas 1 2 3 4 A C” Bloque de detección 2
Tecla1_2 Contador1Tecla2_2 Contador1Tecla3_2 Contador1Tecla4_2 Contador11
Tecla11_2 A activar todas Tecla14_2 Confirmar dirección cursor
Mensaje “Zonas Activas”Activar_selec Comparación para el testeo de selección
Test_a
Lazo
Test_b
Lazo1
Test_c
Lazo2
Test_d
Lazo3
Test_ab
Lazo4
Test_ac
Lazo5
Test_ad
Lazo6
Test_bcLazo7
Test_bdLazo8
Test_cdLazo9
Test_abcLazo10
Test_acdLazo11
Test_bcdLazo12
Test_abcdLazo13
Mensaje “Todas activadas”Lazo14AlarmaLazos
Mensaje “Alarma Ingresar clave para desactivar”RonaldDetec3
Detec3_2Detec3_3Detec3_4
Compara_claveIr_clave2Ir_clave3Ir_clave4
Compara nueva claveLeer en eeprom y comparación de nuevas claves de usuario
Mensaje_errorMensaje “error”Clave correcta
Mensaje “Clave correcta”Bloqueo de alarma
Reset buqle para resetear el programaMensaje “Ingrese clave”
DEMORA5
demora5sdetección bloque detección de teclado
tecla1_0tecla2_0tecla3_0
Tecla4_0 tecla5_0 tecla6_0 tecla7_0tecla8_0tecla9_0
tecla_10_0tecla_11_0tecla_12_0tecla_13_0tecla_14_0tecla_15_0tecla_16_0cmpara2
end
list p=16f877include <p16f877.inc>errorlevel -207, -302, -305, -209, -205, -306, -203, -301
__CONFIG _XT_OSC & _LVP_OFF & _WDT_OFF & _CP_OFF
; definición de macrosje macro dirección
btfsc STATUS,Zgoto dirección
endm
jae macro dirección.btfsc STATUS,Cgoto direccion.
endm
cmp macro reg,ctemovlw ctesubwf reg,W
endm Programa de la alarma en assembler
write macro direcc,dato
bsf STATUS,RP1BSF STATUS,RP0BTFSC EECON1,WRGOTO $-1BCF STATUS,RP0
movlw direccMOVWF EEADRbcf STATUS,RP1movf dato,wbsf STATUS,RP1MOVWF EEDATA
BSF STATUS,RP0
BCF EECON1,EEPGD
Programa de la alarma en assembler
read macro direcc1 BSF STATUS,RP1BCF STATUS,RP0
movlw direcc1
MOVWF EEADR
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAh
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIEBCF EECON1,WRENendm
Programa de la alarma en assembler
banco0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,Wendm
banco1 macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
Programa de la alarma en assembler
#define c4 PORTB,3#define c3 PORTB,2#define c2 PORTB,1#define c1 PORTB,0
#define clave1 'A'#define clave2 '3' ;define clave secreta de fabricante 4 ;dígitos#define clave3 'B';para activar la alarma#define clave4 '4'
n_tmr0 EQU d'131'
cod1 EQU b'11101110'cod2 EQU b'11101101'cod3 EQU b'11101011'cod4 EQU b'11011110'cod5 EQU b'11011101'cod6 EQU b'11011011'
Programa de la alarma en assembler
cod7 EQU b'10111110'cod8 EQU b'10111101'cod9 EQU b'10111011'cod0 EQU b'01111101'cod# EQU b'01110111'codA EQU b'11100111'codB EQU b'11010111'codC EQU b'10110111'codD EQU b'01110111'cod EQU b'10111110'
Programa de la alarma en assembler
cblock 20h
fila, columna, ficol, ficol0, ficol0_2, ficol0_3, ficol0_4, ficol1, ficol2, ficol3,ficol3_2, ficol3_3, ficol3_4,ficol01,tecla, dato2, dato1, dato3, dato4, num, numA, num1, num2, num3, num4,num5, num6, num7, num8,num9, num10, num11, num12,num13, num14, num15, num16, conta,contador,conta1, conta2,conta3,conta4, conta5, conta6, conta7, conta8, conta9, conta10, conta11, conta12, conta13, conta14, conta15,conta2.2, conta2.3, conta2.4, nuevo_num1, nuevo_num2, nuevo_num3, nuevo_num4, nuevo_num5, nuevo_num6, nuevo_num7, nuevo_num8, conta7.2, conta7.3, conta7.4,conta_e, PDel0, PDel1, PDel2,PDel0_1, PDel1_1, PDel2_1, conta16,conta17,conta18, conta00, count,conta55, endc
Programa de la alarma en assembler
org 0goto inicioorg 4goto inter
inicio:
bsf STATUS,RP0;INICIO
movlw b'11111111';sensores
movwf TRISCmovlw b'00000000'movwf TRISA
;actuadormovlw b'11110000'movwf TRISBmovlw b'00000010'movwf OPTION_REGbcf STATUS,RP0
Programa de la alarma en assembler
lazos1:;lazo infinito después de apagar la alarma
clrf PORTAclrf teclaclrf conta18clrf conta17clrf conta16clrf conta15clrf conta14clrf conta13clrf conta12clrf conta11clrf conta10
Programa de la alarma en assembler
clrf conta9
clrf conta8
clrf conta7
clrf conta6
clrf conta5
clrf conta4
clrf conta3
clrf conta2
clrf conta
clrf contador
clrf num
clrf numA
Programa de la alarma en assembler
movlw b'00000001'call EnviaCmdLCD incf contadorcall inicio_LCD;dirección de la fila
movlw h'81' ;dirección cursor primera filacall EnviaCmdLCDmovlw ' 'call EnviaCarLCDmovlw '*'call EnviaCarLCDmovlw '*'call EnviaCarLCDmovlw '*'call EnviaCarLCD
Programa de la alarma en assembler
movlw 'B'
call EnviaCarLCD
movlw 'I'
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD
movlw 'N'
call EnviaCarLCD
movlw 'V'
call EnviaCarLCD
movlw 'E'Programa de la alarma en assembler
call EnviaCarLCDmovlw 'N'call EnviaCarLCDmovlw 'I'call EnviaCarLCDmovlw 'D'call EnviaCarLCDmovlw 'O'call EnviaCarLCD movlw h'c1'call EnviaCmdLCDmovlw 'I'call EnviaCarLCDmovlw 'R'
Programa de la alarma en assembler
call EnviaCarLCD
movlw ' '
call EnviaCarLCD
movlw 'M'
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD
movlw 'N'
call EnviaCarLCD
movlw 'U'
call EnviaCarLCD
movlw ' '
Programa de la alarma en assembler
call EnviaCarLCDmovlw 'P'call EnviaCarLCDmovlw 'R'call EnviaCarLCDmovlw 'E'call EnviaCarLCDmovlw 'S'call EnviaCarLCDmovlw 'I'call EnviaCarLCDmovlw 'O'call EnviaCarLCD
Programa de la alarma en assembler
movlw 'N'
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD
movlw '<'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw '>'
call EnviaCarLCD
movlw h'd2'
call EnviaCmdLCD
Programa de la alarma en assembler
movlw d'131' ;interrup c/10 msmovwf TMR0movlw b'10100000' ;habilita int. TMR0movwf INTCONclrf filaclrf columnaclrf ficolclrf teclamovlw b'00001110' ;c1=0movwf PORTBmovwf columna
goto $ ; bucle infinito
Programa de la alarma en assembler
;rutina interrupción
inter: ;se pulso tecla
movf PORTB,W
movwf columna
movwf fila
movlw b'11110000'
andwf fila,F ;lo almacena en fila
movlw b'00001111'
andwf columna,F
btfss fila,4 ;es f1=0goto detec ;si, tecla presionadabtfss fila,5 ;no, es f2=0 goto detec
Programa de la alarma en assembler
btfss fila,6 ;es f3=0goto detecbtfss fila,7 ;es f4=0goto detec
explora: btfss columna,0 ;es c1=0goto act2btfss columna,1 ;es c2=0goto act3btfss columna,2 ;es c3=0goto act4
act1: bsf c4nopbcf c1goto rec_tmr0
Programa de la alarma en assembler
act2: bsf c1
nop
bcf c2
goto rec_tmr0
act3: bsf c2
nop
bcf c3
goto rec_tmr0
act4: bsf c3
nop
bcf c4
goto rec_tmr0 Programa de la alarma en assembler
rec_tmr0: movlw n_tmr0
movwf TMR0bcf INTCON,T0IFretfie
; bloque de detección detec: movf fila,W
;detección de solo dos teclas para ir menú y poner claveiorwf columna,Wmovwf ficol
;detección de clave nueva a comparacióncmp conta18,d'1' ;cuarto digito almacenadojae detec0_8cmp conta17,d'1' ;tercer digito almacenadojae detec0_7
Programa de la alarma en assembler
cmp conta16,d'1';segundo digito almacenado
jae detec0_6
cmp conta15,d'1' ;primer digito guardado
jae detec0_5
;detección de clave nueva
cmp conta14,d'1' ;cuarto digito almacenadoje detec0_4
cmp conta12,d'1' ;tercer digito almacenadoje detec0_3
cmp conta10,d'1' ;segundo digito almacenadoje detec0_2
Programa de la alarma en assembler
;detección de clave anterior
cmp conta7.4,d'1'jae detec1_4cmp conta7.3,d'1'jae detec1_3cmp conta7.2,d'1'jae detec1_2cmp conta7,d'1'jae detec1 ;si conta7 es mayor
;o igual a 1 se va a etiqueta
cmp conta9,d'1' ;primer digito guardado
je detec0 ;si conta9 es igual a 1
;se va a etiqueta detec0(clave_correcta_a)
Programa de la alarma en assembler
;detec1(cambio_clave)
;clave para desactivar alarma
cmp conta2.4,d'1'
jae detec3_4
cmp conta2.3,d'1'
jae detec3_3
cmp conta2.2,d'1'
jae detec3_2
cmp conta2,d'1'
jae detec3 ;si conta2 es mayor o ;igual a 1 se va a etiqueta detec3 (desactivar alarma)
Programa de la alarma en assembler
;etiqueta para ir al sub-menúcmp conta,d'1'jae detec2 ;si conta es mayor
;o igual a 1 se va a etiqueta detec2(ingresa_submenú) cmp ficol,codC ;compara tecla C
je tecla_14cmp ficol,codA ;compara tecla Aje tecla_12goto explora
tecla_14:incf conta5 ;incrementar hasta 7 vecescmp conta5,d'7'je cambio_clave ;etiqueta para cambio de clavegoto explora
Programa de la alarma en assembler
tecla_12: movlw 'A'
movwf numA ;almacenar valor para ;comparar
call EnviaCarLCD
call retardo
movlw h'd2'
call EnviaCmdLCD ;solo 1 dígitos
cmp numA,'A' ;compara tecla A
je ingresa_submenú ;ingresa al sub menú ;para activar los sensores 1 2 3 4 A C
goto explora
Programa de la alarma en assembler
cambio_clave: ;cambio de clave primero se pedirá la clave ;anterior
lz: incf conta7 ;y luego la clave nueva y ;reconfirmar clave
movlw b'00000001‘
call EnviaCmdLCD
movlw h'80‘ ;dirección cursor primera fila
call EnviaCmdLCD
movlw 'I'
call EnviaCarLCD
movlw 'N
call EnviaCarLCD;ingrese clave antigua
Programa de la alarma en assembler
movlw 'G'call EnviaCarLCDmovlw 'R'call EnviaCarLCDmovlw 'E'call EnviaCarLCDmovlw '.'call EnviaCarLCDmovlw 'C'call EnviaCarLCDmovlw 'lcall EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'V'call EnviaCarLCDmovlw 'E'call EnviaCarLCDmovlw ' '
Programa de la alarma en assembler
call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'N'call EnviaCarLCDmovlw 'T'call EnviaCarLCDmovlw 'E'call EnviaCarLCDmovlw 'R'call EnviaCarLCDmovlw 'I'call EnviaCarLCD
Programa de la alarma en assembler
movlw 'O'
call EnviaCarLCD
movlw 'R'
call EnviaCarLCD
call retardo
movlw h'c8'
call EnviaCmdLCD
call retardo
call retardo
call retardo
goto explora
Programa de la alarma en assembler
;detección primer digitodetec1:
movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf num1
;detección segundo digito
incf conta7.2clrf conta7goto explora
Programa de la alarma en assembler
detec1_2:
movf ficol,w
movwf ficol0
call deteccion
movf num,w
movwf num2
;detección tercer digito
incf conta7.3
clrf conta7.2
goto explora
Programa de la alarma en assembler
detec1_3: movf ficol,w
movwf ficol0call deteccionmovf num,wmovwf num3
;detección cuarto digitoincf conta7.4clrf conta7.3goto explora
detec1_4: movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf num4
clrf conta7.4
Programa de la alarma en assembler
compara_clave_a:
clrf conta6 ;limpiar contador read 15hbcf STATUS,RP1movwf conta1 movlw d'1'subwf conta1,wbtfsc STATUS,Zgoto compara_antigua_clave_a cmp num1,clave1je ir_clave2_agoto mensaje_error_a
Programa de la alarma en assembler
ir_clave2_a:
cmp num2,clave2
je ir_clave3_a
goto mensaje_error_a
ir_clave3_a: cmp num3,clave3
je ir_clave4_a
goto mensaje_error_a
ir_clave4_a:
cmp num4,clave4
je clave_correcta_a
goto mensaje_error_a
Programa de la alarma en assembler
compara_antigua_clave_a:
;leer en EEPROM y;comparación de claves nuevas del usuario
read 01hbcf STATUS,RP1movwf dato1movf num1,wsubwf dato1,wbtfss STATUS,Zgoto mensaje_error_a read 04hbcf STATUS,RP1movwf dato2movf num2,wsubwf dato2,wbtfss STATUS,Zgoto mensaje_error_a
Programa de la alarma en assembler
read 08h
bcf STATUS,RP1
movwf dato3
movf num3,w
subwf dato3,w
btfss STATUS,Z
goto mensaje_error_a
read 12hbcf STATUS,RP1movwf dato4movf num4,wsubwf dato4,wbtfss STATUS,Zgoto mensaje_error_agoto clave_correcta_a
Programa de la alarma en assembler
mensaje_error_a: clrf num1clrf num2clrf num3clrf num4 movlw b'00000001';limpiarcall EnviaCmdLCD movlw h'81';dirección cursor primera filacall EnviaCmdLCDmovlw 'E'call EnviaCarLCDmovlw 'R'call EnviaCarLCDmovlw 'R'call EnviaCarLCDmovlw 'O'call EnviaCarLCDmovlw 'R'call EnviaCarLCD
Programa de la alarma en assembler
incf conta_ecall retardocall retardocall retardocall retardomovlw d'3‘ ;compara hasta 3 sino se reinicia el
;programasubwf conta_e,wbtfsc STATUS,Zgoto lazos1goto lz ;lazo repetitivo pide de nuevo ingresar
;la clave anterior
clave_correcta_a: clrf conta7clrf num1clrf num2clrf num3clrf num4
Programa de la alarma en assembler
call EnviaCarLCD
movlw 'U
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD ;ingrese nueva clave
movlw 'V'
;nueva clave a ingresar
movlw b'00000001'
call EnviaCmdLCD
movlw h'81' ;dirección cursor primera fila
call EnviaCmdLCD
movlw 'N‘
Programa de la alarma en assembler
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw ' '
call EnviaCarLCD
movlw 'C'
call EnviaCarLCD
movlw 'l
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw 'V'
call EnviaCarLCD
movlw 'E' Programa de la alarma en assembler
call EnviaCarLCDmovlw ':'call EnviaCarLCDmovlw h'8e'call EnviaCmdLCDincf conta9goto explora
;detección del primer digito de la clave
detec0: clrf conta9movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf nuevo_num1
Programa de la alarma en assembler
incf conta10goto explora
detec0_2:clrf conta10movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf nuevo_num2
;detección del tercer digito incf conta12goto explora
;detección del segundo digito
Programa de la alarma en assembler
detec0_3:
clrf conta12
movf ficol,w
movwf ficol0
call deteccion
movf num,w
movwf nuevo_num3
;detección del cuarto digito
incf conta14
goto explora
Programa de la alarma en assembler
detec0_4: clrf conta14
movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf nuevo_num4
movlw h'c1';dirección cursor primera ;fila
call EnviaCmdLCDmovlw 'C'call EnviaCarLCDmovlw 'Ocall EnviaCarLCDmovlw 'N'
Programa de la alarma en assembler
call EnviaCarLCD ;ingrese nueva ;clave
movlw 'F'
call EnviaCarLCD
movlw '.'
call EnviaCarLCD
movlw ' '
call EnviaCarLCD
movlw 'C'
call EnviaCarLCD
movlw 'l
call EnviaCarLCD
movlw 'A'
Programa de la alarma en assembler
call EnviaCarLCDmovlw h'ce'call EnviaCmdLCDincf conta15goto explora
;
call EnviaCarLCDmovlw 'V'
call EnviaCarLCD
movlw 'E‘
call EnviaCarLCDmovlw ':'
Programa de la alarma en assembler
salta: movlw h'ce'call EnviaCmdLCDmovlw ' 'call EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw h'ce'call EnviaCmdLCDincf conta15goto explora
;XXXXXXXXXXXXXXXXXXXXXx;XXXXXXXXXXXXXXXXXXXXX
Programa de la alarma en assembler
;detección del primer digito de la clave detec0_5: clrf conta15
movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf nuevo_num5
;detección del segundo digito incf conta16goto explora
Programa de la alarma en assembler
detec0_6:
clrf conta16
movf ficol,w
movwf ficol0
call deteccion
movf num,w
movwf nuevo_num6
;detección del tercer digito
incf conta17
goto explora
Programa de la alarma en assembler
detec0_7:
clrf conta17movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf nuevo_num7
;detección del cuarto digito incf conta18goto explora
detec0_8:clrf conta18movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf nuevo_num8
Programa de la alarma en assembler
;comparar claves nueva y la confirmación
movf nuevo_num1,w
subwf nuevo_num5,w
btfss STATUS,Z
goto eerror
movf nuevo_num2,w
subwf nuevo_num6,w
btfss STATUS,Z
goto eerror
movf nuevo_num3,w
subwf nuevo_num7,w
btfss STATUS,Z
goto eerror
Programa de la alarma en assembler
movf nuevo_num4,wsubwf nuevo_num8,wbtfss STATUS,Zgoto eerrorgoto correcto
eerror:
incf conta00cmp conta00,d'3'je lazos1goto salta
correcto:
movlw d'1'movwf conta1write 15h,conta1
Programa de la alarma en assembler
;grabar en EEPROMwrite 01h,nuevo_num1write 04h,nuevo_num2write 08h,nuevo_num3write 12h,nuevo_num4 bcf STATUS,RP1;regresar al banco 0bcf STATUS,RP0;regresar al banco 0goto inicio
ingresa_submenú: incf contamovlw b'00000001' ;limpiar displaycall EnviaCmdLCD movlw h'81';dirección cursor primera filacall EnviaCmdLCD
Programa de la alarma en assembler
movlw 'M'
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD
movlw 'N'
call EnviaCarLCD ;menú activar zonas
movlw 'U'
call EnviaCarLCD
movlw ' '
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw 'C'
call EnviaCarLCDPrograma de la alarma en assembler
movlw 'T'call EnviaCarLCDmovlw 'I'call EnviaCarLCDmovlw 'V'call EnviaCarLCDmovlw '.'call EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw 'Z'call EnviaCarLCDmovlw 'O'call EnviaCarLCDmovlw 'N'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'S'call EnviaCarLCD
Programa de la alarma en assembler
movlw h'c0'call EnviaCmdLCDmovlw '1'
;zona 1 call EnviaCarLCDmovlw h'c3'call EnviaCmdLCDmovlw '2‘
;zona 2 call EnviaCarLCDmovlw h'c6'call EnviaCmdLCDmovlw '3‘
;zona 3 call EnviaCarLCDmovlw h'c9'call EnviaCmdLCDmovlw '4'
Programa de la alarma en assembler
;zona 4 call EnviaCarLCD
movlw h'cc'
call EnviaCmdLCD
movlw '/'; separation
call EnviaCarLCD
movlw h'cf'
call EnviaCmdLCD
movlw 'A';activar todas las zonas
call EnviaCarLCDmovlw h'd2‘
call EnviaCmdLCDmovlw 'C';confirmar zonas activadas
Programa de la alarma en assembler
call EnviaCarLCDmovlw h'cd'call EnviaCmdLCDcall retardocall retardocall retardogoto explora ; bloque de detección 2
detec2: movf ficol,wmovwf ficol2 cmp ficol2,cod1je tecla1_2cmp ficol2,cod2je tecla2_2cmp ficol2,cod3je tecla3_2cmp ficol2,cod4je tecla4_2cmp ficol2,codAje tecla_11_2cmp ficol2,codCje tecla_14_2goto explora
Programa de la alarma en assembler
;el contador empieza con 1tecla1_2: incf contador ;1<--contador
movlw h'c1';dirección cursor ,segunda fila
call EnviaCmdLCDmovlw 'a'call EnviaCarLCDcall retardogoto explora
tecla2_2: incf contador ;5 <--contadorincf contadorincf contadorincf contadorincf contadormovlw h'c4'
;dirección cursor ,segunda filacall EnviaCmdLCDmovlw 'a'call EnviaCarLCDcall retardogoto explora
Programa de la alarma en assembler
tecla3_2: incf contador ;9<--contador
incf contadorincf contadorincf contadorincf contadorincf contadorincf contadorincf contadorincf contadormovlw h'c7'
;dirección cursor ,segunda filacall EnviaCmdLCDmovlw 'a'movwf num3call EnviaCarLCDcall retardogoto explora
Programa de la alarma en assembler
tecla4_2: incf contador ;12<--contador
incf contadorincf contadorincf contadorincf contadorincf contadorincf contadorincf contadorincf contadorincf contadorincf contadorincf contadormovlw h'ca' ;dirección cursor ,segunda filacall EnviaCmdLCDmovlw 'a'call EnviaCarLCDcall retardogoto explora
Programa de la alarma en assembler
tecla_11_2: movlw h'd0'; "A" activas todas dirección cursor ; ,segunda fila
call EnviaCmdLCD
movlw 'A'call EnviaCarLCDcall retardo;limpiar displaymovlw b'00000001'call EnviaCmdLCDgoto activar_todas
;etiqueta de testeo de todos los sensores
Programa de la alarma en assembler
tecla_14_2: movlw h'd3'
;"confirmar" dirección cursor ,segunda filacall EnviaCmdLCDmovlw 'C'call EnviaCarLCDcall retardo;limpiar displaymovlw b'00000001'call EnviaCmdLCDmovlw h'81'
;dirección cursor primera filacall EnviaCmdLCDmovlw 'Z'call EnviaCarLCDmovlw 'O'call EnviaCarLCDmovlw 'N'
Programa de la alarma en assembler
call EnviaCarLCDmovlw h'ca'call EnviaCmdLCDmovlw 'Acall EnviaCarLCDmovlw 'C'call EnviaCarLCD
call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'S'call EnviaCarLCDmovlw ':'
Programa de la alarma en assembler
movlw 'T'
call EnviaCarLCD
movlw 'I'
call EnviaCarLCD
movlw 'V'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw 'D'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw 'S'
Programa de la alarma en assembler
activar_selec: ;comparación para el testeo de selección
;combinaciones de 4 números abcd de ;uno,dos,tres y cuatro dígitos;sin q se repitancmp contador,d'2'je test_acmp contador,d'6'je test_bcmp contador,d'10'je test_c
movlw h'c0' call EnviaCmdLCD
goto activar_selec; etiqueta de testeo ;dependiendo de los sensores ; seleccionados
Programa de la alarma en assembler
cmp contador,d'13'
je test_d
cmp contador,d'7'
je test_ab
cmp contador,d'11'
je test_ac
cmp contador,d'14'
je test_ad
cmp contador,d'15'
je test_bc
Programa de la alarma en assembler
cmp contador,d'18'
je test_bd
cmp contador,d'22'je test_cd
cmp contador,d'16'je test_abc
cmp contador,d'23'je test_acd
cmp contador,d'27'je test_bcd
cmp contador,d'28'je test_abcd
Programa de la alarma en assembler
test_a: movlw '1';visualiza alarma 1 activada
call EnviaCarLCDcall demora5smovlw b'00000001';limpiar y apagar
display call EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5 ;demora de 5 minutos
para ;q el usuario pueda salir del perímetro
Programa de la alarma en assembler
lazo: btfsc PORTC,4
; pin para resetear el programagoto resetbtfss PORTC,0 ;es 1
; testeo de la entradagoto lazo ; nogoto alarma ;si
test_b: movlw '2';visualiza alarma 2 activada
call EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
Programa de la alarma en assembler
lazo1: btfsc PORTC,4goto resetbtfss PORTC,1goto lazo1goto alarma
test_c: movlw '3'
;visualiza alarma 3 activadacall EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo2: btfsc PORTC,4goto resetbtfss PORTC,2goto lazo2goto alarma
Programa de la alarma en assembler
test_d: movlw '4';visualiza alarma 4 activadacall EnviaCarLCDcall demora5smovlw b'00000001';limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo3:
btfsc PORTC,4goto reset
btfss PORTC,3
goto lazo3goto alarma
Programa de la alarma en assembler
test_ab: movlw '1'
;visualiza alarma 1y2 activadacall EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '2'call EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo4: btfsc PORTC,4goto resetbtfsc PORTC,0 ;es 0goto alarma ;nobtfss PORTC,1 ;si es 1goto lazo4 ;nogoto alarma ;si
Programa de la alarma en assembler
test_ac: movlw '1';visualiza alarma 1y3 activadacall EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '3'call EnviaCarLCDcall demora5smovlw b'00000001';limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo5: btfsc PORTC,4goto resetbtfsc PORTC,0goto alarmabtfss PORTC,2goto lazo5goto alarma
Programa de la alarma en assembler
test_ad: movlw '1'
;visualiza alarma 1y4 activadacall EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '4'call EnviaCarLCDcall demora5smovlw b'00000001';limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo6: btfsc PORTC,4goto resetbtfsc PORTC,0goto alarmabtfss PORTC,3goto lazo6goto alarma
Programa de la alarma en assembler
test_bc: movlw '2';visualiza alarma 2y3 activada
call EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '3'call EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo7: btfsc PORTC,4goto resetbtfsc PORTC,1goto alarmabtfss PORTC,2goto lazo7goto alarma Programa de la alarma en assembler
test_bd: movlw '2'
;visualiza alarma 2y4 activadacall EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '4'call EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo8: btfsc PORTC,4goto resetbtfsc PORTC,1goto alarmabtfss PORTC,3goto lazo8goto alarma Programa de la alarma en assembler
test_cd: movlw '3'
;visualiza alarma 3y4 activadacall EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '4'call EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo9: btfsc PORTC,4goto resetbtfsc PORTC,2goto alarmabtfss PORTC,3goto lazo9goto alarma
Programa de la alarma en assembler
test_abc: movlw '1'
;visualiza alarma 12y3 activadacall EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw '2'call EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '3'call EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar displaycall EnviaCmdLCDmovlw b'00001000'call EnviaCmdLCDcall DEMORA5
lazo10: btfsc PORTC,4goto resetbtfsc PORTC,0goto alarma
Programa de la alarma en assembler
test_acd: movlw '1'
;visualiza alarma 13y4 activadacall EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw '3'call EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '4'call EnviaCarLCDcall demora5smovlw b'00000001'
btfsc PORTC,1
goto alarma
btfss PORTC,2
goto lazo10
goto alarma
Programa de la alarma en assembler
;limpiar y apagar display
call EnviaCmdLCD
movlw b'00001000'
call EnviaCmdLCD
call DEMORA5
lazo11: btfsc PORTC,4
goto reset
btfsc PORTC,0
goto alarma
btfsc PORTC,2
goto alarma
btfss PORTC,3
goto lazo11
goto alarmaPrograma de la alarma en assembler
test_bcd: movlw '2'
;visualiza alarma 2 3 y 4 activadacall EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw '3'call EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '4'call EnviaCarLCDcall demora5smovlw b'00000001'
;limpiar y apagar display
call EnviaCmdLCD
movlw b'00001000'
call EnviaCmdLCD
call DEMORA5Programa de la alarma en assembler
lazo12: btfsc PORTC,4goto resetbtfsc PORTC,1goto alarmabtfsc PORTC,2goto alarmabtfss PORTC,3goto lazo12goto alarma
test_abcd: movlw '1';visualiza alarma 1 2 3 y 4 activada
call EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw '2'call EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw '3'
Programa de la alarma en assembler
call EnviaCarLCDmovlw 'y'call EnviaCarLCDmovlw '4'call EnviaCarLCDcall demora5smovlw
b'00000001‘ ;limpiar y apagar display
call EnviaCmdLCD
movlw b'00001000'
call EnviaCmdLCD
call DEMORA5
Programa de la alarma en assembler
lazo13: btfsc PORTC,4goto resetbtfsc PORTC,0goto alarmabtfsc PORTC,1goto alarmabtfsc PORTC,2goto alarmabtfss PORTC,3goto lazo13goto alarma activar_todas:movlw h'81'
activar_todas:;dirección cursor primera filacall EnviaCmdLCDmovlw 'Tcall EnviaCarLCDmovlw 'O'call EnviaCarLCD
Programa de la alarma en assembler
call EnviaCarLCDmovlw 'Acall EnviaCarLCDmovlw 'C'call EnviaCarLCDmovlw 'T'call EnviaCarLCDmovlw 'I'call EnviaCarLCDmovlw 'V'call EnviaCarLCDmovlw 'A'call EnviaCarLCD
;visualiza todas activadasmovlw 'D'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'S'call EnviaCarLCDmovlw ' '
Programa de la alarma en assembler
movlw 'A'call EnviaCarLCD movlw 'S'
call EnviaCmdLCDcall demora5s
movlw b'00000001';limpiar y apagar display
call EnviaCmdLCDmovlw b'00001000' call EnviaCmdLCD call DEMORA5
lazo14: btfsc PORTC,4
goto reset
btfsc PORTC,0
goto alarma
btfsc PORTC,1
goto alarma
movlw 'D'
call EnviaCarLCD
Programa de la alarma en assembler
btfsc PORTC,2goto alarmabtfss PORTC,3goto lazo14goto alarma
alarma:bsf PORTA,3;alarma encendida ;sirena
;encender displaymovlw b'00001111'call EnviaCmdLCD
lazos: cmp conta55,d'1'jae resetcall retardocall retardocall retardocall retardocall retardo
Programa de la alarma en assembler
movlw b'00000001'call EnviaCmdLCDmovlw h'80';dirección cursor primera filacall EnviaCmdLCDmovlw '*'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'L'call EnviaCarLCDmovlw 'A';visualiza alarma ingrese clave ;para descativarlacall EnviaCarLCD
Programa de la alarma en assembler
movlw 'R'
call EnviaCarLCD
movlw 'M'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw '*'
call EnviaCarLCD
movlw ' '
call EnviaCarLCDmovlw 'I'
call EnviaCarLCDmovlw 'N'
call EnviaCarLCDmovlw 'G‘ Programa de la alarma en assembler
call EnviaCarLCDmovlw ' 'call EnviaCarLCDmovlw 'C'call EnviaCarLCDmovlw 'L'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'V'call EnviaCarLCDmovlw 'E'call EnviaCarLCD movlw h'c1'call EnviaCmdLCD
call EnviaCarLCD
movlw '.'
Programa de la alarma en assembler
movlw 'P'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw 'R'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw ' '
call EnviaCarLCD
movlw 'D'
call EnviaCarLCD
movlw 'E'Programa de la alarma en assembler
call EnviaCarLCDmovlw 'C'call EnviaCarLCDmovlw 'T'call EnviaCarLCDmovlw '.'call EnviaCarLCD
ronald: movlw h'cf'call EnviaCmdLCDincf conta2 ;inc conta2clrf num1clrf num2clrf num3clrf num4goto explora
call EnviaCarLCD
movlw 'S'
call EnviaCarLCD
movlw 'A'
Programa de la alarma en assembler
;desactivar alarma ;primer digito
detec3:movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf num1
;segundo digitoclrf conta2incf conta2.2goto explora
detec3_2: movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf num2
;tercer digitoclrf conta2.2incf conta2.3goto explora
Programa de la alarma en assembler
detec3_3: movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf num3
;cuarto digito clrf conta2.3incf conta2.4goto explora
detec3_4: movf ficol,wmovwf ficol0call deteccionmovf num,wmovwf num4 clrf conta2.4
compara_clave: clrf conta3 ;limpiar contadorread 15hbcf STATUS,RP1movwf conta1
Programa de la alarma en assembler
movlw d'1'subwf conta1,wbtfsc STATUS,Zgoto compara_nueva_clave
cmp num1,clave1je ir_clave2goto mensaje_error
ir_clave2: cmp num2,clave2
je ir_clave3goto mensaje_error
ir_clave3: cmp num3,clave3
je ir_clave4goto mensaje_error
ir_clave4: cmp num4,clave4je clave_correctagoto mensaje_error ;mensaje error y falta
;limpiar pantalla
Programa de la alarma en assembler
compara_nueva_clave:
;leer en EEPROM Y;comparación de claves nuevas del usuario read 01hbcf STATUS,RP1movwf dato1movf num1,wsubwf dato1,wbtfss STATUS,Zgoto mensaje_error read 04hbcf STATUS,RP1movwf dato2movf num2,wsubwf dato2,wbtfss STATUS,Zgoto mensaje_error
Programa de la alarma en assembler
read 08h
bcf STATUS,RP1
movwf dato3
movf num3,w
subwf dato3,w
btfss STATUS,Z
goto mensaje_error
read 12h
bcf STATUS,RP1
movwf dato4
movf num4,w
subwf dato4,w
btfss STATUS,Z
goto mensaje_error
goto clave_correcta
Programa de la alarma en assembler
mensaje_error:
clrf num1clrf num2clrf num3clrf num4
movlw b'00000001' ;limpiarcall EnviaCmdLCD
movlw h'81' ;dirección cursor primera fila
Programa de la alarma en assembler
call EnviaCmdLCD
movlw 'E'
call EnviaCarLCD
movlw 'R'
call EnviaCarLCD
movlw 'R'
call EnviaCarLCD
movlw 'O'
call EnviaCarLCD
movlw 'R'
call EnviaCarLCD
incf conta4
cmp conta4,d'3'
je bloqueo_alarma
goto lazos
Programa de la alarma en assembler
clave_correcta:
bcf PORTA,3;apagar alarma movlw b'00000001'
;limpiarcall EnviaCmdLCD movlw h'80‘ ;dirección cursor
;primera filacall EnviaCmdLCDmovlw '*'call EnviaCarLCDmovlw '*'
;clave bloqueadacall EnviaCarLCDmovlw 'C'call EnviaCarLCDmovlw 'L'call EnviaCarLCDmovlw 'A'' '
Programa de la alarma en assembler
call EnviaCarLCD
movlw 'V'
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD
movlw call EnviaCarLCD
movlw 'C'
call EnviaCarLCD
movlw 'O'
call EnviaCarLCD
movlw 'R'
call EnviaCarLCD
movlw 'R'Programa de la alarma en assembler
call EnviaCarLCDmovlw 'C'call EnviaCarLCDmovlw 'T'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw '*'call EnviaCarLCDmovlw '*'call EnviaCarLCDcall retardocall retardocall retardocall retardogoto lazos1; después de apagar se reinicia el ;programa
call EnviaCarLCD
movlw 'E'
Programa de la alarma en assembler
bloqueo_alarma: movlw h'81' ;dirección cursor primera filacall EnviaCmdLCDmovlw '*'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'L'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw 'R'call EnviaCarLCDmovlw 'M'call EnviaCarLCDmovlw 'A'call EnviaCarLCDmovlw ' 'call EnviaCarLCD
Programa de la alarma en assembler
movlw 'B'
call EnviaCarLCD
movlw 'L'
call EnviaCarLCD
movlw 'O'
call EnviaCarLCD
movlw 'Q'
call EnviaCarLCD
movlw 'U'
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCDPrograma de la alarma en assembler
movlw 'D'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw '*'
call EnviaCarLCD
movlw h'd5'
call EnviaCmdLCD
call DEMORA5
call DEMORA5
Programa de la alarma en assembler
goto lazos1 ;se reinicia alarma ;después de 8 minutos y se va lazos1
;-------------------------------;bucle para resetear e rpograma;--------------------------------
reset: movlw b'001101' ;sirenamovwf PORTA;encender displaymovlw b'00001111'call EnviaCmdLCD
call retardocall retardomovlw b'00000001'
Programa de la alarma en assembler
call EnviaCmdLCDmovlw h'81' ;dirección cursor primera filacall EnviaCmdLCDmovlw 'I'call EnviaCarLCDmovlw 'N'call EnviaCarLCDmovlw 'G'call EnviaCarLCDmovlw 'R'call EnviaCarLCDmovlw '.'call EnviaCarLCD
Programa de la alarma en assembler
movlw 'C'
call EnviaCarLCD
movlw 'L'
call EnviaCarLCD
movlw 'A'
call EnviaCarLCD
movlw 'V'
call EnviaCarLCD
movlw 'E'
call EnviaCarLCD
movlw ':'
call EnviaCarLCD
incf conta55
goto ronald Programa de la alarma en assembler
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 07/06/05 Hs 10:01:45 p.m.
; Descripción: Delay 300000000 ciclos retardo 5 minutos
;-------------------------------------------------------------
DEMORA5:movlw .193 ; 1 set numero de repetición (C)
movwf PDel0 ; 1 |
PLoop0 movlw .232 ; 1 set numero de repetición (B)
movwf PDel1 ; 1 |
PLoop1 movlw .248 ; 1 set numero de repetición (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
Programa de la alarma en assembler
PDelL1 goto PDelL2 ; 2 ciclos delayPDelL2 goto PDelL3 ; 2 ciclos delayPDelL3 goto PDelL4 ; 2 ciclos delayPDelL4 goto PDelL5 ; 2 ciclos delayPDelL5 goto PDelL6 ; 2 ciclos delayPDelL6 goto PDelL7 ; 2 ciclos delayPDelL7 goto PDelL8 ; 2 ciclos delayPDelL8 goto PDelL9 ; 2 ciclos delayPDelL9 goto PDelL10 ; 2 ciclos delayPDelL10 goto PDelL11 ; 2 ciclos delayPDelL11 goto PDelL12 ; 2 ciclos delayPDelL12 clrwdt ; 1 ciclo delay
Programa de la alarma en assembler
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A) goto PLoop2 ; 2 no, loop decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop1 ; 2 no, loop decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C) goto PLoop0 ; 2 no, loopPDelL13 goto PDelL14 ; 2 ciclos delayPDelL14 goto PDelL15 ; 2 ciclos delayPDelL15 goto PDelL16 ; 2 ciclos delayPDelL16 goto PDelL17 ; 2 ciclos delayPDelL17 goto PDelL18 ; 2 ciclos delayPDelL18 goto PDelL19 ; 2 ciclos delayPDelL19 goto PDelL20 ; 2 ciclos delayPDelL20 goto PDelL21 ; 2 ciclos delayPDelL21 goto PDelL22 ; 2 ciclos delayPDelL22 goto PDelL23 ; 2 ciclos delayPDelL23 goto PDelL24 ; 2 ciclos delayPDelL24 clrwdt ; 1 ciclo delayreturn ; 2+2 Fin.;-------------------------------------------------------------
Programa de la alarma en assembler
;-------------------------------------------------------------; Generado con PDEL ver SP r 1.0 el 23/06/05 Hs 12:51:42 a.m.; Descripción: Delay 5000000 ciclos;-------------------------------------------------------------demora5s: movlw .165 ; 1 set numero de repetición (C) movwf PDel0_1 ; 1 |PLoop0_1 movlw .41 ; 1 set numero de repetición (B) movwf PDel1_1 ; 1 |PLoop1_1 movlw .147 ; 1 set numero de repetición (A) movwf PDel2_1 ; 1 |PLoop2_1 clrwdt ; 1 clear watchdog clrwdt ; 1 ciclo delay decfsz PDel2_1, 1 ; 1 + (1) es el tiempo 0 ? (A) goto PLoop2_1 ; 2 no, loop decfsz PDel1_1, 1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop1_1 ; 2 no, loop decfsz PDel0_1, 1 ; 1 + (1) es el tiempo 0 ? (C) goto PLoop0_1 ; 2 no, loopreturn ; 2+2 Fin.;-------------------------------------------------------------
Programa de la alarma en assembler
;bloque de detección de tecladodetección:
cmp ficol0,cod1je tecla1_0cmp ficol0,cod2je tecla2_0cmp ficol0,cod3je tecla3_0cmp ficol0,cod4je tecla4_0cmp ficol0,cod5je tecla5_0cmp ficol0,cod6je tecla6_0cmp ficol0,cod7je tecla7_0cmp ficol0,cod8je tecla8_0cmp ficol0,cod9je tecla9_0cmp ficol0,cod0je tecla_10_0
Programa de la alarma en assembler
cmp ficol0,cod#je tecla_11_0cmp ficol0,codAje tecla_12_0cmp ficol0,codBje tecla_13_0cmp ficol0,codCje tecla_14_0cmp ficol0,codDje tecla_15_0cmp ficol0,codje tecla_16_0 ;nuevo nuevo num
tecla1_0: movlw '*'call EnviaCarLCDcall retardomovlw '1'movwf numgoto cmpara2 ;se va a etiqueta cmpara2
Programa de la alarma en assembler
tecla2_0: movlw '*'call EnviaCarLCDcall retardomovlw '2'movwf numgoto cmpara2
tecla3_0: movlw '*'call EnviaCarLCDcall retardomovlw '3'movwf numgoto cmpara2
tecla4_0: movlw '*'call EnviaCarLCDcall retardomovlw '4'movwf numgoto cmpara2
Programa de la alarma en assembler
tecla5_0: movlw '*'
call EnviaCarLCD
call retardo
movlw '5'
movwf num
goto cmpara2tecla6_0:
movlw '*'
call EnviaCarLCD
call retardo
movlw '6'
movwf num
goto cmpara2
Programa de la alarma en assembler
tecla7_0:movlw '*'call EnviaCarLCDcall retardomovlw '7'movwf numgoto cmpara2
tecla8_0:movlw '*'call EnviaCarLCDcall retardomovlw '8'movwf numgoto cmpara2
Programa de la alarma en assembler
tecla9_0:
movlw '*'
call EnviaCarLCD
call retardo
movlw '9'
movwf num
goto cmpara2
tecla_10_0:
movlw '*'
call EnviaCarLCD
call retardo
movlw '0'
movwf num
goto cmpara2 Programa de la alarma en assembler
tecla_11_0: movlw '*'call EnviaCarLCDcall retardomovlw '#'movwf numgoto cmpara2
tecla_12_0: movlw '*'call EnviaCarLCDcall retardomovlw 'A'movwf numgoto cmpara2
Programa de la alarma en assembler
tecla_13_0: movlw '*'
call EnviaCarLCD
call retardo
movlw 'B'
movwf num
goto cmpara2
tecla_14_0: movlw '*'
call EnviaCarLCD
call retardo
movlw 'C'
movwf num
goto cmpara2
Programa de la alarma en assembler
tecla_15_0:movlw '*'call EnviaCarLCDcall retardomovlw 'D'movwf numgoto cmpara2
tecla_16_0:
movlw '*'call EnviaCarLCDcall retardomovlw 's'movwf numgoto cmpara2
cmpara2:return;----------------------------------------------------------- include "lcd.asm" ;se incluye la macro de lcdend
Programa de la alarma en assembler
0%
10%
20%
30%
40%
50%
60%
SI HAN SIDOROBADOS
NO HAN SIDOROBADOS
ROBOS EN CASA
ROBOS EN CASA
PROCEDENCIA DE LOS QUE DIJERON NO
0
1
2
3
4S.M.P.
CALLAO
SANTA ANITA
VITARTE
CERCADO
RIMAC
S.J.L.
COMASCIENEGUILLA
CHORRILLOS
VILLA EL SAL
PTE PIEDRA
V.M.T
LA VICTORIA
SURCO
PROCEDENCIA DELOS QUE DIJERONNO
CUANTO PAGARIAN LOS QUE DIJERON NO
0,00%
10,00%
20,00%
30,00%
40,00%
50,00%
60,00%
70,00%
MAX. 50SOLES
MAX. 150SOLES
MAX. 10SOLES
MAX. 1SOLES
CUANTO PAGARIANLOS QUE DIJERON NO
POR DONDE ENTRARON LOS RATEROS A SU CASA
0,00%
20,00%
40,00%
60,00%PUERTA DE FIERRO
PUERTA DE MADERA
VENTANA
TECHO
PUERTA OTRO MAT
TENIAN LLAVEPOR DONDE ENTRARONLOS RATEROS A SUCASA
QUE USARON PARA ENTRAR
0%10%20%30%40%
PATA DE CABRA
LLAVE DE ACERO
METIERON LA MANO
BALAZO
ESCALERAS
NO ESPECIFICA
QUE USARON PARAENTRAR
0,00%
10,00%
20,00%
30,00%
40,00%
50,00%
60,00%
70,00%
80,00%
TIENE ALARMA NO TIENEALARMA
DE LOS QUE DIJERON QUE SI LE HABIAN ROBADO
DE LOS QUE DIJERONQUE SI LE HABIANROBADO
QUE TIPO DE ALARMA TIENEN
0,00%
5,00%
10,00%EMPOTRADA A PUERTA
CONFIG DE ZONAS
CON SENSORINFRARROJO
TIENE PERRO
NO ESPECIFICA QUE TIPO DE ALARMATIENEN
CUANTO PAGARIAN POR UNA ALARMADE LOS QUE HAN SIDO ROBADO
0,00%5,00%
10,00%15,00%20,00%25,00%30,00%35,00%
MAX. 5
0 SOLE
S
MAX. 1
50 S
OLES
NO ESPECIF
ICA
CUANTO PAGARIANPOR UNA ALARMADELOS QUE HAN SIDOROBADO
;pantalla LCD
cblockCHAR ;ubicación del caracterTEMP ;almacenamiento temporalNumCadena ;numero de la cadena;índicecontador1 ;registro usado por retardocontador2 ;registro usado por retardoW_tempendc
DATOS EQU PORTD ;líneas de datos = portDCNTRL EQU PORTD ;líneas de control = portD
E EQU 1 ;línea de control E = bit1RW EQU 2 ;línea de control RW = bit2RS EQU 3 ;línea de control RS = bit3
|
DISP_ON_CURSOR_BLINK EQU B'00001111' ;Display ;on, cursor on,blink
DISP_ON_NOCURSOR EQU B'00001100' ;Display on, cursor offDISP_CLEAR EQU B'00000001' ;Aclarar displayDISP_OFF EQU b'00001000' ;apaga el displayDISP_LINEA2 EQU b'11000000' ;segunda línea
t0 equ 0x0;constante para generar aprox.50mst4.6ms equ 0x06*4;constante para generar 4,6mst15.4ms equ 0x14*4 ;constante para generar 15,4mst200us equ 0x01 ;constante para generar aprox. 200us
;*******************************************************;EnviaCarLCD - Envía un caracter a la pantalla LCD *;Esta rutina separa el caracter entre el nibble superior e inferior*;y los envía a la pantalla LCD, nibble mas alto primero *;*******************************************************EnviaCarLCDmovwf W_temp ;almacena temporal Wmovwf CHAR ;W contiene caracter a ser enviadocall TestBusyLCD ;Esperar que LCD este listomovf CHAR,wandlw 0xF0 ;Obtener el nibble superiormovwf DATOS ;Enviar datos al LCDbcf CNTRL,RW ;Poner al LCD en modo lecturabsf CNTRL,RS ;Poner al LCD en modo de datosnopbsf CNTRL,E ;Conmutar Enopbcf CNTRL,Eswapf CHAR,w
andlw 0xF0 ;Obtener el nibble inferiormovwf DATOS ;Enviar datos al LCDbcf CNTRL,RW ;Poner al LCD en modo lecturabsf CNTRL,RS ;Poner al LCD en modo de datosnopbsf CNTRL,E ;Conmutar Enopbcf CNTRL,Emovf W_temp,W ;restaura W
return
************************************************************;*EnviaCmdLCD - Envía comando a la pantalla LCD *;*Esta rutina separa el comando en nibble superior y nibble *;*inferior y los envía a la pantalla LCD, nibble mas alto primero *************************************************************
EnviaCmdLCDmovwf CHAR ;Caracter a ser enviado esta en reg. Wcall TestBusyLCD ;esperar LCD listomovf CHAR,wandlw 0xF0 ;Obtener nibble superiormovwf DATOS ;enviar dato al LCD
bcf CNTRL,RW ;Poner LCD en modo lectura bcf CNTRL,RS ;Poner LCD en modo comando
nopbsf CNTRL,E ;conmutar E para LCDnopbcf CNTRL,Eswapf CHAR,wandlw 0xF0 ; Obtener nibble inferiormovwf DATOS ;enviar dato al LCDnopbsf CNTRL,E ;conmutar E para LCDnopbcf CNTRL,Ereturn
;* Esta rutina chequea el flag de busy de la pantalla LCD, *;* retorna cuando no esta ocupado *;* Afecta: *;* TEMP - retorna con busy/address *TestBusyLCDbanco1movlw b'11110000' ;Seleccionar DATOS[4..7]movwf TRISD banco0bcf CNTRL,RS ; Poner LCD en modo comandobsf CNTRL,RW ; prepara para leer flag de busynopbsf CNTRL,E ;E='1'nopmovf DATOS,W ;Lee flag de busy
;del nibble sup., dirección DDRambcf CNTRL,E ;conmuta E para tomar nibble inferiorandlw 0F0h ;Enmascara el nibblemovwf TEMP ;lo almacenanopbsf CNTRL,Enop
swapf DATOS,w ;Lee flag de busy del nibble inf., dirección DDRambcf CNTRL,E ;Poner E='0'andlw 00Fh ;Enmascara nibble superioriorwf TEMP ;Combina nibblesbtfsc TEMP,7 ;Chequea flag de busy, alto = ocupadogoto TestBusyLCD ;Si esta ocupado, chequear nuevamentebcf CNTRL,RWbanco1movlw 0x00 ;poner DATOS como salidasmovwf TRISDbanco0return
;******************************************************;* Esta rutina inicializa la pantalla LCD *;* Afecta: *;* TEMP - retornado con busy/address *;******************************************************inicio_LCDbanco0
bcf CNTRL,E ; aclara líneas de controlbcf CNTRL,RWbcf CNTRL,RSmovlw 0x0F ;aclara líneas de datosmovwf DATOS;Configurar puertos DATOS[4..7] y CNTRL[1..3] como salidasbanco1movlw B'00001111' ;4 bits mas altos de DATOSmovwf TRISDbcf TRISD,E ;bits de control como salidasbcf TRISD,RWbcf TRISD,RSbanco0
;Inicializar la pantalla LCDmovlw t15.4ms ;guarda de 15msmovwf contador2call retardomovlw B'00110000' ;Configurar LCD para interfaz de 4 bitsmovwf DATOSnopbsf CNTRL,E ;conmutar E para LCDnopbcf CNTRL,Emovlw t4.6msmovwf contador2call retardomovlw B'00110000' ;Función escoger 2 líneasmovwf DATOS ;de caracteres de 5x7 bitsnopbsf CNTRL,E ;conmutar E para LCDnopbcf CNTRL,Emovlw B'00110000' ;Parte de la secuencia de encendidomovwf DATOS
call retardomovlw B'00100000' ;Configurar modo 4 bitsmovwf DATOSnopbsf CNTRL,E ;conmutar E para LCDnopbcf CNTRL,E
;El flag de ocupado estaría valido después de este punto
movlw B'00101000' ;Interfaz de 4 bits, 2 líneascall EnviaCmdLCD ; de caracteres de 5x7
nop
bsf CNTRL,E ;conmutar E para LCD
nop
bcf CNTRL,E
movlw t200us ;retardo
movwf contador2
movlw DISP_ON_CURSOR_BLINK ;Display on, cursor on,blink
call EnviaCmdLCD
movlw DISP_CLEAR ;Aclarar display
call EnviaCmdLCD
movlw B'00000110' ;Poner modo ;incremental, sin desplazamiento
call EnviaCmdLCD
movlw B'10000000' ;Address DDRam ;upper left
call EnviaCmdLCD
return
retardo: Rutina que genera un retardo,;* el registro contador2 contiene la duración del retardo;*frecuencia de reloj = 16.000 Mhz;********************************************retardo:
clrf contador1 ;aclara contador1ret:
decfsz contador1,F ;goto retdecfsz contador2,Fgoto retreturn
ret100ms: ;RETARDO 100 msmovlw t0movwf contador2call retardocall retardoreturn
ret300ms:;RETARDO 300 ms
call ret100ms
call ret100ms
call ret100ms
return
ret600ms:;RETARDO 600 ms
call ret300ms
call ret300ms
return
STATUS,Z →0
DIRECCION
endm
STATUS,Z →0
ENDM
DIRECCION
List p= 16f877Include <p16f877.inc>
Errorlevel -207, -302, -305, -209, -205, -306, -203, -301_CONFIG_XT_OSC & _LVP_OFF & _WDT_OFF & _CP_OFF
Je macro direccion
Jae macro direccion
Cte – reg, w
endm
cmp macro reg,cte
Diagrama de Flujo
BANCO3: STATUS,RP0 →1 STATUS,RP1 →1
EECON1,WR → 0
BANCO2: STATUS,RP1 →0
Dato → EEDATA direcc→ EEADR
BANCO3: STATUS,RP1 →1
INTCON,GIE →0EECON1, EEPGD →0EECON1, WREN →1O55H→ WW → EECON2OAAH→ WW → EECON2EECON1, WREN →0EECON1, WR →1EECON1, GIE→1
ENDM
write macro
direc,dato
Diagrama de Flujo
BANCO2: STATUS,RP0 →1STATUS,RP1 →0
Dato → EEDATA direcc→ EEADR
BANCO3: STATUS,RP1 →1
EECON1, EEPGD →0EECON1, RD →1W→ EEDATA
endm
BANCO0: STATUS,RP0 →0STATUS,RP1 →0
endm
BANCO0: STATUS,RP0 →0STATUS,RP1 →0
endm
read macro
direc,dato
Banco0 macro
Banco0 macro
Diagrama de Flujo
COD1 EQU b’11101110'COD2 EQU b’11101101'COD3 EQU b’11101011'COD4 EQU b’11011110'COD5 EQU b’11011101'COD6 EQU b’11011011'COD7 EQU b’10111110'COD8 EQU b’10111101'COD9 EQU b’10111011'COD0 EQU b’01111101'COD# EQU b’01110111'CODA EQU b’11100111'CODB EQU b’11010111'CODC EQU b’10110111'CODD EQU b’01110111'COD EQU b’10111110'
#define c1 → PORTB,0#define c2 → PORTB,1#define c3 → PORTB,2#define c4 → PORTB,3
#define clave1 → ‘A’#define clave2 → ‘3’#define clave3 → ‘B’#define clave4 → ‘4’
Diagrama de Flujo
/declarando variables Ficol, Ficol0, Ficol1, Ficol2, Ficol3, conta, contador,
conta1, conta2, conta_e, conta3, conta4, conta5, conta6, conta7, conta7.1, conta7.2, conta7.3, conta7.4, conta8, conta9, conta10, conta11, conta12, conta13, conta14,
conta15, conta16, conta17, conta18, conta2.2, conta2.3, conta2.4, , nuevo_num1, nuevo_num2, nuevo_num3,
nuevo_num4, nuevo_num5, nuevo_num6, nuevo_num7, nuevo_num8, numA, num, num1, num2, num3, num4, num5, num6, num7, num8, dato1, dato2, dato3, dato4,
PDel0, PDel1, PDel2, PDel0_1, PDel1_1, PDel2_1, conta55, conta00, ficol0_2, ficol0_3, ficol0_4, ficol3_2,
ficol3_3, ficol3_4, ficol01
Endc
Org0Goto inicio
Org4Goto inter
inicio
b’11111111'w → TRISCb’0000000'
w → TRISAb’11110000'w → TRISBb’00000010'
w → OPTION_REG
Diagrama de Flujo
Clrf PORTAClrf tecla
Clrf conta18Clrf conta17Clrf conta16Clrf conta15Clrf conta14Clrf conta13Clrf conta12Clrf conta11Clrf conta10Clrf conta9Clrf conta8Clrf conta7Clrf conta6Clrf conta5Clrf conta4Clrf conta3Clrf conta2Clrf conta
Clrf contadorClrf num
Clrf numA
w→ b’00000001'Call EnviaCmdLCD
Contador = Contador +1Call inicio_LCD
Bienvenido Ir MENU Presione A
Diagrama de Flujo
W → d’131'TMR0 → w
W → b’10100000'INTCON → w
Clrf filaClrf columna
Clrf ficolClrf tecla
W → b’00001110'PORTB → wColumna → w
w→ PORTBColumna → w
Fila → wB’11110000' * fila
B’00001111' * columna
Fila,4 =1 ?
Fila,5 =1 ?
Fila,6 =1 ?
Fila,7 =1 ?
detec
detec
detec
detec
inter
Diagrama de Flujo
Columna, 0 =1 ?
Columna, 1 =1 ?
Columna, 2 =1 ?
act1
act2
act3
explora
act1
C4 →1Nop
C1 →0
act2
C1 →1Nop
C2→0
act3
C2→1Nop
C3 →0
Rec_tmr0
Rec_tmr0
Rec_tmr0
Diagrama de Flujo
detec
act4
C3 →1Nop
C4 →0
Rec_tmr0
Rec_tmr0
TMR0 → wINTCON,TOIF → 0
retfie
W → filaIorwf → columna
Ficol → w
Cmp conta18, d’1'
Detec0_8
jae
Diagrama de Flujo
Cmp conta17, d’1'
Detec0_7
jae
Cmp conta16, d’1'
Detec0_6
jae
Cmp conta15, d’1'
Detec0_5
jae
Cmp conta14, d’1'
Detec0_4
je
Cmp conta12, d’1'
Detec0_3
je
Cmp conta10, d’1'
Detec0_2
je
Cmp conta9, d’1'
Detec0
je
Diagrama de Flujo
Cmp conta7, d’1'
Detec1
jae
Cmp conta7.1, d’1'
Detec1.1
jae
Cmp conta7.2, d’1'
Detec1.2
jae
Cmp conta7.3, d’1'
Detec1.3
jae
Cmp conta2, d’1'
Detec3
jae
Cmp conta2.1, d’1'
Detec3.2
jae
Cmp conta2.2, d’1'
Detec3.3
jae
Cmp conta2.3, d’1'
Detec3.4
jae
Diagrama de Flujo
Cmp conta, d’1'
Detec2
jae
Cmp ficol, codC
Tecla_14
je
Cmp ficol, codA
je
Tecla_12 explora
Tecla_14
Conta5 = Conta5 +1
Cmp conta5, d’7'
je
Cambio_clave explora
Tecla_12
w→ AnumA→ ww→ d’2'
Call EnviaCmd LCD
Cmp conta5, d’7'
je
Cambio_clave explora
Diagrama de Flujo
Cambio_clave
Conta7 = Conta7 + 1W → b’00000001'
Call EnviaCmdLCD
Ingrese clave anterior
Call retardoCall retardoCall retardo
explora
detec1
W → ficolFicol0 → wCall deteccion
W → numnum1→ wClrf conta7
Conta7.2= Conta7.2+1
Detec1_2
W → ficolFicol0 → wCall deteccion
W → numnum2→ w
Clrf conta7.2Conta7.3= Conta7.3+1
exploragoto
exploragoto
Diagrama de Flujo
Detec1_3
W → ficolFicol0 → wCall deteccion
W → numnum3→ w
Clrf conta7.3Conta7.4= Conta7.4+1
Detec1_4
W → ficolFicol0 → wCall deteccion
W → numnum4→ w
Clrf conta7.4
Compara_clave_a
Read 15hSTATUS,RP1 → 0
Conta1 → w
1 – conta1 =1 ? Compara_antigua_clave_ano
explora
explora
goto
goto
Diagrama de Flujo
Cmp num1, clave1ir_clave2_aJe
Mensaje_error_a
goto
Ir_clave2_a
Cmp num2, clave2ir_clave3_aJe
Mensaje_error_a
goto
Ir_clave3_a
Cmp num3, clave3ir_clave4_aJe
Mensaje_error_a
goto
Ir_clave4_a
Cmp num4, clave4Clave_correcta_aJe
Mensaje_error_a
goto
Diagrama de Flujo
Compara_nueva_clave
Read 01hSTATUS, RP1 →0
dato1→w
num1 – dato1 =1 ? Mensaje_error_a
Read 04hSTATUS, RP1 →0
dato2→w
num2 – dato2 =1 ? Mensaje_error_ano
Read 08hSTATUS, RP1 →0
dato3→w
num3– dato3 =1 ? Mensaje_error_ano
Read 12hSTATUS, RP1 →0
dato4→w
num4– dato4=1 ?Mensaje_error_ano
Clave_correcta_a
goto
si
Diagrama de Flujo
Mensaje_error_a
Clrf num1Clrf num2Clrf num3Clrf num4
error
Conta_e = Conta_e +1Call retardo: 3
num1 – dato1 =3 ? lazos1 lzgoto goto
Clave_correcta
Clrf conta7Clrf num1Clrf num2Clrf num3Clrf num4
Nueva clave
Conta9 = Conta9 +1 Exploragoto
Diagrama de Flujo
Detec0
Clrf conta9W → ficol
ficol0 → wCall deteccion
W → numNuevo_num1 → w
Conta10 → Conta10 + 1 exploragoto
Detec0_2
W → ficol ficol0 → w
Call deteccionW → num
Nuevo_num2→ wClrf conta10
Conta12 → Conta12 + 1 exploragoto
Detec0_3
W → ficol ficol0 → w
Call deteccionW → num
Nuevo_num3→ wClrf conta12
Conta14 → Conta14 + 1 exploragoto
Detec0_4
W → ficol ficol0 → w
Call deteccionW → num
Nuevo_num 4 → wClrf conta14 exploragoto
Diagrama de Flujo
Confirmar clave
Conta15 = Conta15 + 1 exploragoto
salta
Conta15 = Conta15 + 1 exploragoto
Detec0_5
Clrf conta15W → ficol
ficol0 → wCall deteccion
W → numNuevo_num 4 → w
Conta14 = conta14 + 1 exploragoto
Detec0_6
W → ficol ficol0 → w
Call deteccionW → num
Nuevo_num 4 → wClrf conta16
Conta17 = conta17 + 1exploragoto
Diagrama de Flujo
Detec0_7
W → ficol ficol0 → w
Call deteccionW → num
Nuevo_num 4 → wClrf conta17
Conta18 = conta18 + 1exploragoto
Detec0_8
W → ficol ficol0 → w
Call deteccionW → num
Nuevo_num 4 → wClrf conta18 exploragoto
Nuevo_num1 – Nuevo_num5 = 0 ?
Nuevo_num1 – Nuevo_num5 = 0 ?
Nuevo_num1 – Nuevo_num5 = 0 ?
Nuevo_num1 – Nuevo_num5 = 0 ?
eerror
no
eerror
eerror
eerror
no
no
no
Diagrama de Flujo
eerror
Conta00 = Conta00 + 1
Cmp Conta00 , d’3'
lazos1
salta
je
goto
correcto
W → d’1'Conta1 → w
Write 15h, conta1
Write 1h, nuevo_num1Write 4h, nuevo_num2Write 8h, nuevo_num3Write 12h, nuevo_num4
STATUS,RP0 → 0STATUS,RP1 → 0
iniciogoto
Diagrama de Flujo
Ingresa_submenu
Conta = conta +1w→b’00000001'
Call enviaCarLCD
Menu activar zonas 1 2 3 4 / A
Call retardo :3 exploragoto
detec2
W → ficol ficol2 → w
Cmp ficol2, cod1
Tecla 1_2goto
Cmp ficol2, cod2
Tecla 2_2goto
Cmp ficol2, cod3
Tecla 3_2goto
Cmp ficol2, cod4
Tecla 4_2goto
Cmp ficol2, codA
Tecla_11_2goto
Cmp ficol2, codC
Tecla_14_2goto
Diagrama de Flujo
Tecla 1_2
Contador = Contador + 1w→c1
Call enviaCmdLCDw→a
Call enviaCarLCDCall retardo
exploragoto
Tecla 2_2
Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1
w→c4Call enviaCmdLCD
w→Call enviaCarLCD
Call retardo
exploragoto
Tecla 3_2
Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1
w→c7Call enviaCmdLCD
w→aCall enviaCarLCD
Call retardo
explora
goto
Diagrama de Flujo
Tecla 4_2
Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1Contador = Contador + 1
w→caCall enviaCmdLCD
w→aCall enviaCarLCD
Call retardo
explora
goto
Tecla_11_2
w→h’d0'Call EnviaCmdLCD
w→’A’Call EnviaCarLCD
Call retardow→b’00000001'
Call EnviaCmdLCD
Activar_todasgoto
Tecla_14_2
w→h’d3'Call EnviaCmdLCD
w→’C’Call EnviaCarLCD
Call retardow→b’00000001'
Call EnviaCmdLCD
Activar_todasgoto
Diagrama de Flujo
ZONAS ?ACTIVADAS
Activar_selecgoto
Activar_selec
Cmp contador, d’2' Test_aje
Cmp contador, d’6' Test_bje
Cmp contador, d’10' Test_cje
Cmp contador, d’13' Test_dje
Cmp contador, d’7' Test_abje
Cmp contador, d’11' Test_acje
Cmp contador, d’14' Test_adje
Cmp contador, d’15' Test_bcje
Cmp contador, d’18' Test_bdje
Cmp contador, d’22' Test_cdje
Cmp contador, d’16' Test_abcje
Cmp contador, d’23' Test_acdje
Cmp contador, d’27' Test_bcdje
Cmp contador, d’19' Test_abdje
Cmp contador, d’28' Test_abcdje
Test_a
1
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Diagrama de Flujo
Test_b
2
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo
PORTC,4 =0?reset
PORTC,0 =1? alarma
no
si
no
Lazo1
PORTC,4 =0?reset
PORTC,1 =1? alarma
no
si
no
Diagrama de Flujo
Test_b
2
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo1
PORTC,4 =0?reset
PORTC,1 =1? alarma
no
si
no
Test_c
3
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo2
PORTC,4 =0?reset
PORTC,2 =1? alarma
no
si
no
Diagrama de Flujo
Test_d
4
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo3
PORTC,4 =0?reset
PORTC,3 =1? alarma
no
si
no
Test_ab
1 y 2
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo4
PORTC,4 =0?reset
PORTC,0 =1?PORTC,1 =1?
alarma
no
si
no
Diagrama de Flujo
Test_ac
1 y 3
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo5
PORTC,4 =0?reset
PORTC,0 =1?PORTC,2 =1?
alarma
no
si
no
Test_ad
1 y 4
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo6
PORTC,4 =0?reset
PORTC,0 =1?PORTC,3 =1?
alarma
no
si
no
Diagrama de Flujo
Test_bc
2 y 3
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo7
PORTC,4 =0?reset
PORTC,1 =1?PORTC,2 =1?
alarma
no
si
no
Test_bd
2 y 4
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo8
PORTC,4 =0?reset
PORTC,1 =1?PORTC,3 =1?
alarma
no
si
no
Diagrama de Flujo
Test_cd
3 y 4
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo9
PORTC,4 =0?reset
PORTC,2 =1?PORTC,3 =1?
alarma
no
si
no
Test_abc
1,2 y 3
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo10
PORTC,4 =0?reset
PORTC,0 =1?PORTC,1 =1?PORTC,2 =1?
alarma
no
si
no
Diagrama de Flujo
Test_abd
1,2 y 4
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo11
PORTC,4 =0?reset
PORTC,0 =1?PORTC,1 =1?PORTC,3 =1?
alarma
no
si
no
Test_acd
1,2 y 3
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo12
PORTC,4 =0?reset
PORTC,0 =1?PORTC,2 =1?PORTC,3 =1?
alarma
no
si
no
Diagrama de Flujo
Test_bcd
2,3 y 4
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo13
PORTC,4 =0?reset
PORTC,1 =1?PORTC,2 =1?PORTC,3 =1?
alarma
no
si
no
Test_abcd
todas
Call demora 5sw→ b’00000001'
enviaCmdLCD →ww→ b’00001000'
enviaCmdLCD →wCall DEMORA5
Lazo14
PORTC,4 =0?reset
PORTC,0 =1?PORTC,1 =1?PORTC,2=1?PORTC,3 =1?
alarma
no
si
no
Diagrama de Flujo
Alarma
PORTA,3→1
w→b’00001111'call enviaCmdLCD
lazos
Cmp conta55, d’1' resetjae
Call retardo: 5
w→b’00000001'call enviaCmdLCD
ALARMA INGRESE
CLAVE PARA DESACTIVAR
ronald
w→h’cf’Call enviaCmdLCDConta2 = conta2 +1
Clrf num1Clrf num2Clrf num3Clrf num4
explora
goto
Diarama de FlujoDiagrama de Flujo
detec3
W → ficolFicol0 → wCall deteccion
W → num1num1→ wClrf conta2
Conta2.2= Conta2.2+1
Detec3_2
W → ficolFicol0 → wCall deteccion
W → numnum1→ w
Clrf conta2.2Conta2.3= Conta2.3+1
Detec3_3
W → ficolFicol0 → wCall deteccion
W → numnum1→ w
Clrf conta2.3Conta2.4= Conta2.4+1
Detec3_4
W → ficolFicol0 → wCall deteccion
W → numnum1→ w
Clrf conta2.4
goto explora
goto explora
goto explora
goto explora
Diagrama de Flujo
Compara_clave
Clrf conta3Read 15h
STATUS,RP1 → 0Conta1 → w
1 – conta1 =1 ? Compara_nueva_claveno
Cmp num1, clave1 ir_clave2Je
Mensaje_error
goto
Ir_clave2
Cmp num2, clave2 ir_clave3Je
Mensaje_error
goto
Ir_clave3
Cmp num3, clave3ir_clave4Je
Mensaje_error
goto
Ir_clave4
Cmp num4, clave4 Clave_correctaJe
Mensaje_errorgoto
Diagrama de Flujo
Compara_nueva_clave
Read 01hSTATUS, RP1 →0
dato1→w
num1 – dato1 =1 ? Mensaje_error
Read 04hSTATUS, RP1 →0
dato2→w
num2 – dato2 =1 ? Mensaje_errorno
Read 08hSTATUS, RP1 →0
dato3→w
num3– dato3 =1 ? Mensaje_errorno
Read 12hSTATUS, RP1 →0
dato4→w
num4– dato4=1 ?Mensaje_errorno
Clave_correcta
goto
si Diagrama de Flujo
Mensaje_error
Clrf num1Clrf num2Clrf num3Clrf num4
error
Conta4 = Conta4 +1
Clave_correcta
PORTA,3→0
Clave correcta
Cmp conta4, d’3'
bloqueo alarmaje
lazosgoto
Call retardo: 4
lazosgoto
Bloqueo_alarma
Alarma bloqueada
lazos1goto
Call DEMORA5: 4 lazos1goto
Diagrama de Flujo
reset
W → b’001101'PORTA → w
W → b’00001111'Call EnviaCmdLCD
Call retardoW → b’00000001'
Call EnviaCmdLCD
Conta55 = Conta55 + 1
Ing. clave
ronald
DEMORA5
w→ 193PDel0 → w
PLoop0
w→ 193PDel0 → w
PLoop1
w→ 232PDel1 → w
PLoop2
clrwdt
Diagrama de Flujo
PDel1 PDel2goto
PDel2 PDel3goto
PDel3 PDel4goto
PDel4 PDel5goto
PDel5 PDel6goto
PDel6 PDel7goto
PDel7 PDel8goto
PDel8 PDel9goto
PDel9 PDel10goto
PDel10 PDel11goto
PDel11 PDel12goto
PDel12 clrwdtgoto
PDel2,1 = PDel2,1 - 1 PLoop2goto
PLoop1goto
PLoop0goto
PDel1,1 = PDel1,1 - 1
PDel0,1 = PDel0,1 - 1
Diagrama de Flujo
PDel13 PDel14goto
PDel14 PDel15goto
PDel15 PDel16goto
PDel16 PDel17goto
PDel17 PDel18goto
PDel18 PDel19goto
PDel19 PDel20goto
PDel20 PDel21goto
PDel21 PDel22goto
PDel22 PDel23goto
PDel23 PDel24goto
PDel24 clrwdtgoto
return
demora5s
w→ 165PDel0 _1→ w
PLoop0_1
w→ .41PDel0_1 → w
PLoop1_1
w→ 232PDel1_1 → w
Diagrama de Flujo
PLoop2_1
clrwdt
clrwdt
PDel2_1,1 = PDel2_1,1 - 1 PLoop2goto
PLoop1goto
PLoop0goto
PDel1_1,1 = PDel1_1,1 - 1
PDel0_1,1 = PDel0_1,1 - 1
return
deteccion
Cmp ficol0,cod1
Tecla1_0je
Cmp ficol0,cod2
Tecla2_0je
Cmp ficol0,cod3
Tecla3_0je
Cmp ficol0,cod4
Tecla4_0je
Cmp ficol0,cod5
Tecla5_0je
Diagrama de Flujo
Cmp ficol0,cod6
Tecla6_0je
Cmp ficol0,cod7
Tecla7_0je
Cmp ficol0,cod8
Tecla8_0je
Cmp ficol0,cod9
Tecla9_0je
Cmp ficol0,cod0
Tecla10_0je
Cmp ficol0, cod#
Tecla11_0je
Cmp ficol0, codA
Tecla12_0je
Cmp ficol0, codB
Tecla13_0je
Cmp ficol0,codC
Tecla14_0je
Cmp ficol0,codD
Tecla15_0je
Cmp ficol0,cod
Tecla16_0je
Diagrama de Flujo
Tecla1_0
W → ‘1’Num → w
cmpara2goto
Tecla2_0
W →‘2’Num → w
cmpara2goto
Tecla3_0
W →‘3’Num → w
cmpara2goto
Tecla4_0
W → ‘4’Num → w
cmpara2goto
Tecla5_0
W → ‘5’Num → w
cmpara2goto
Tecla6_0
W → ‘6’Num → w
cmpara2goto
Diagrama de Flujo
Tecla7_0
W → ‘7’Num → w
cmpara2goto
Tecla8_0
W → ‘8’Num → w
cmpara2goto
Tecla9_0
W → ‘9’Num → w
cmpara2goto
Tecla10_0
W → ‘0’Num → w
cmpara2goto
Tecla11_0
W → ‘#’Num → w
cmpara2goto
Tecla12_0
W → ‘A’Num → w
cmpara2goto Diagrama de Flujo
Tecla13_0
W → ‘B’Num → w
cmpara2goto
Tecla14_0
W → ‘C’Num → w
cmpara2goto
Tecla15_0
W → ‘D’Num → w
cmpara2goto
Tecla16_0
W → ‘ ’Num → w
cmpara2goto
cmpara2
return
Include “lcd.asm”
end
Diagrama de Flujo
A1
F1 F2
Sensor de movimiento
220V I1
S2
I2
I3Leyenda I1: Interruptor S/2.90I2: Interruptor S/2.90I3: Interruptor S/2.90
S1: Sensor F1: Reflector Halógeno 500W S/14.90F2: Reflector Halógeno 500W S/14.90
A1: AdaptadorKIT
-Central de alarmas-Detector de movimiento
-Sensor de apertura-Control remoto x 2
Total s/304.9
VIII BIBLIOGRAFIALibro Microcontroladores PIC16F877, José M. Angulo, Susana Romero Yesa, Ignacio Angulo MartínezLibro PROGRAMMING AND CUSTOMIZING PICmicro MICROCONTROLLERS 2nd edition, Myke Predko.Revista 'Saber Electrónica' Agosto 2003, Artículo 'MICROCONTROLADORES, que son y para que sirven' Revista 'Saber Electrónica' Febrero 2003, Artículo'ELECTRONICA Y COMPUTACION Estímulo por reloj en la simulación de programas para PIC'Revista 'Saber Electrónica' Mayo 2003, Artículo'MONTAJES Compilador de basic para assembler de PIC'Revista 'Saber Electrónica' No 165, Artículo 'MICROCONTROLADORES, Diseño básico de osciladores con PIC'Revista 'Saber Electrónica' No 161, Artículo 'ARTICULO PORTADA, Niple: ahora programar es fácil'Revista 'Saber Electrónica' Octubre 2003, Artículo 'ELECTRONICA Y COMPUTACION, Prueba de Pcs para trabajar con PICs' Revista 'Evereryday Practical Electronics', Vol.32 'Special Feature PIC MACROS AND COMPUTED GOTOS', Malcolm WilesRevista 'Ciencias' Vol. 65, Marzo 2002 Artículo 'Pequeña manual de reglas básicas ¿Cómo escribir una tesis?, Zenón Cano Santana