Proyecto mi alarma pbp completo 48pag

Page 1

PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

Autor: Joaquín Berrocal Piris, en PicBasicPro PROYECTO “MI_ALARMA.PBP”

1 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

2 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

3 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

4 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

5 JOAQUÍN BERROCAL PIRIS


MI_ALARMA

Alarma con llamada telefónica. Teclado 4x4 y LCD 2x16 Se pueden programar los tiempos de entrada y salida clave inicial "1-2-3-4-5-6"

Pas 1

R15

Pas 1

R20 10K Pas 1

Pas 1

Pas 1

R21 10K

R22 10K

10K

Pas 1

Pas 1

Pas 1

R24 4K7

R23

Pas 1

Pas 1

X2-10

Pas 0

X2-9

Sup 0

masa COMÚN pulsadores Zonas 1 a 3

X2-8

Pas 0

X2-7

LZONA_2

Pas 0

X2-6

LZONA_1

Pas 0

X2-5

SALIDA_BUZZER_2

Pas 0

X2-4

Buzzer2; para activar SIRENA de la alarma

SALIDA_BUZZER_1

Pas 0

X2-3

Buzzer1; para activar pitido al pulsar tecla

Pas 0

X2-2

Pas 0

X2-1

Sup 0

+12V

Sup 0

Pas 0

LZONA_3 GND

Sup 0 Pas 1

+5V

Aquí se conectaría la línea de Telfno

GND

Aquí se conectarían los pulsadores de la Zona 1 a la Zona 3 para activar la alarma

ALIMENTACIÓN +/- 9V DC

Pas 1

+5V

Pas Sup 1 0

10K Pas 1

R18

20 PwrSup0 0 19 8

PIC16876P

220

Pas 1

220 R11

330

Pas 1

Los LEDS se pueden conectar en el exterior de la placa. Pero para simulación los tengo también en la misma placa

LED1

Pas Pas 0 1 Pas 0

Pas 0

LED2

Pas Pas 0 1

330 R1

Pas 1

Pas 1 Pas 0

LED3

Pas Pas 0 1

330 R2

Pas 1 Pas Pas 0 1

LED4 Pas 0 Sup 0

Pas 0

220 R3

Pas 1 Pas Pas 0 1

220 R4

Pas 1

220 R5

Pas Pas 0 1

LED6 Pas 0

LED5

GND

Pas 1

Pas 1

JP3

8Pas 0 7Pas 0 6Pas 0 5Pas 0 4Pas 0 3Pas 0 2Pas 0 1Pas 0

Sup 0

330 R6 LED7

Pas 0

conexion línea teléfono

220 R12

R16 LACTIVADA LZONA_3 LZONA_2 LZONA_1 LSIRENA LBUZZER +5V

330

R17 LSIRENA Pas 1 Pas 1

Pas Sup 3 0 Pas 2

SP1

Pas 0

Pas 1

R25 4K7

RA0 RA1 RA2 RA3 + LED

RA4 RB3 Pwr Sup 0 0

FILA_D FILA_C FILA_B FILA_A

BC548A Q2 Pas 1

Pas 0

GND

R7

Sup 0

Pas 0

Pas 0

+_TELFNO

Estas resistencias deben ser de 220 Ohm

Pas 1

2AL60P1

Pas 1

+5V +5V

Sup 0

Pas 0

COL_1 COL_2 COL_3 COL_4 SP2

GND

BC548A Q3

Pas 2 Pas 0

2AL60P1

SALIDA_BUZZER_1

R8 Pas 1

Pas Sup 3 0

Pas 1

+5V

+5V

330

SALIDA_BUZZER_2

GND

Pas 1

LBUZZER

RB1 Pas 1

R13

10k

Sup 0

BC548A Q4

Sup 0

Pas 0

Pas 0

18 I/O 0 17 I/O 0 16 I/O 0 15 I/O 0

RC7 RC6 SDO/RC5 SDI/RC4

RC0/T1OSO RC1/T1OSI RC2/CCP1 RC3/SCK VSS

--_TELFNO

LACTIVADA LZONA_3 LZONA_2 LZONA_1 RB3 LSIRENA RB1 RB0

Pas 1

LBUZZER

11 I/O 0 12 I/O 0 13 I/O 0 14 I/O 0

OSC1/CLKIN OSC2/CLKOUT

Pas Pas 0 1

los 2 cables del medio del cable del teléfono

K1

--_TELFNO

El (+) y (-)_TELEFONO son

ZNS5106 14 Pas 0 +_TELFNO

12

A1

K1 Pas 0

Pas 1

Pas 2

11 Pas 0

A2Pas 0

GND

Pas 1

Pas 0

1uF/100V GND

Pas 1

Pas 1

9 Out 0 10 In 0

RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3 RA4/T0CKI RA5/AN4

GND

Pas 3

Pas 0

Pas 0

R26 4K7

4K7 I/O 0

Pas 1

Pas 0

+

1N4004 Pas 0 D4

Pas 0

Pas 0

Sup 0 I/O 0

2 3 4 5 6 7

28 I/O 0 27 I/O 0 26 I/O 0 25 I/O 0 24 I/O 0 23 I/O 0 22 I/O 0 21 I/O 0

PGD/RB7 PGC/RB6 RB5 RB4 PGM/RB3 RB2 RB1 INT/RB0

Pwr 0

22 pF

C3

22 pF

Sup 0

I/O 0

Pas 1

Pull Up RB3. Evita se reinicia tocar patilla RB3

MCLR/THV

RB0

+5V D1 Pas 0 Sup 0 1N4004

Sup 0

1N4004 Pas 0 D5

1N4004 Pas 0 D3

+5V

I/O 0

NOTA: Aunque en el esquema esté puesto el modelo BC 548A (NPN) los transistores son NPN BC 337-25 (Dan 500 mA y Pot >800 mW) Lo hago así por tener su PACKAGE en línea en lugar de forma de triangulo

Pas 0

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

I/O 0

Pas 1

Pas 1

C6

Pas 1

Pas 1

VSS VDD VEE RS RW E D0 D1 D2 D3 D4 D5 D6 D7

Pas 1

Pas 1

1 Pas 1

1 2

1

Conexión del Teclado 4 x 4

JP2

VDD

I/O 0

3 4

C4

Pas 2

GND

560

COL_4 COL_3 COL_2 COL_1

D C B A 4 3 2 1

GND

IC1

In 0

4 MHZ Pas 1 2 Q1

Sup 0

Pas 2

Pas 1

1N4004 Pas 0 D2

Pas 0

Sup 0

RESET

680 Ohm/1W R19 Pas 1

JP1

+5V

RA4 RA3 RA2 RA1 RA0 MCLR-RESET

Pas 1 Pas 1

MCLR-RESET

R9

100

S1

Pas 1

Sup 0

10K RA4Pas 1

+5V

Pas Sup 1 0

10K

Sup 0

GND

GND

8Pas 0 7Pas 0 6Pas 0 5Pas 0 4Pas 0 3Pas 0 2Pas 0 1Pas 0

FILA_D FILA_C FILA_B FILA_A

C2 220 uF

470 k Pas 1

In 0

+

C5

IC2 7805

Pas 0

220 uF

LCD 2X16

R10

+5V Pas 0

Pas 0 Sup 0

OUT GND

C1

+

IN

Pas 0

In 0

Pas 0

>=9 Vcc

Pas 1

Sup 0

+12V

;-. La "Tecla A" ---Permite la activación directa de la alarma ;-. La "Tecla B" ---Permite la Configuración (tiempos entrada-salida+telefno.) ;-. La "Tecla C" ---Permite Cambiar la clave ("Acepta números,letras y signos) ;-. La "Tecla D" ---Permite Desconectar,pero pedirá validar Clave.

Pas 1 Sup 0

+5V

;A continuación nos pide la clave para poner operativa el sistema. ;Se permiten como máximo 3 fallos. Caso contrario; Activación de sirena y el teléfono ; Para meter la clave se permiten números, letras y símbolos

R14 obligatorio poner a pull-up RA4/tock para poder ver en la LCD

;-. Los Tiempos de Salida y Entrada de 1 a 10 minutos. (en principio está configurado a 5' la entrada y salida) ;-. Y el Teléfono a llamar en caso de activación de la alarma ; (Sólo se permite la lectura de los números del teclado.)

Sup 0

Realizada: Oct/Nov 2012

;Cuando se conecta la alarma, y si se pulsa la "Tecla B" en los ;primeros 4 segs SE PUEDEN CONFIGURAR :

Autor: Joaquín Berrocal Piris


MI_ALARMA. OCT/NOV 2012 (120 X 100 mm) Q2

PIC16876P

C4

R25 4K7

22 pF Q1

Q4 BC548A 1N4004

1

D1

220 uF

C3

LED4

LED5

LED6

LED7

S1

220 uF

D

1

LED3

2

LED2

3

LED1

4

C5

I - O IC2 7805

470 k

K1 ZNS5106

22 pF

C2

C1

R13 10k

R19

R2 330 R3 330 R4 220 R5 220 R6 220

R1 330

R24 4K7

R26 4K7

C6

R8 BC548A 330

Buzzer SP2Sirena

560

IC1

4 MHZ

1uF/100V

Q3

AL60P

10K R21 R23 4K7

1N4004

R16 220

1N4004

R22 10K

10K R14

1N4004 D4

R12 220

1N4004 D5

R20 10K

D2

R11 220

JP2

AL60P

R15 10K

R7 330 R18 10K D3

BC548A R17 330 SP1 Buzzer 1

10K R10

100 R9

JP1

1

2

3

4

5

6

7

8

9

10

JP3

X2

25/11/2012 17:54:46 C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100 - 4 líneas\MI_ALARMA.brd


26/11/2012 0:11:37 C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\MI_ALARMA.


25/11/2012 17:53:48 C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100 - 4 líneas\MI_ALARMA.brd


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) PROYECTO “MI_ALARMA.PBP” '****************************************** '* Nombre : Mi_Alarma.pbp * '* Autor : Joaquín Berrocal * '* Copyright : Copyright * '* Fecha : NOV-2012 * '* Versión : 1.0 * '****************************************** '********************* FUNCIONAMIENTO ********************** ;MI_ALARMA; DE TRES ZONAS CON LLAMADAS A TELÉFONO CELULAR 'REALIZADA PARA EL PIC16F876A. ;SE USA UN TECLADO 4 X 4 ; ;

Bornes----> 1 2 3 4 5 6 7 8 (Columnas) C1-C2-C3-C4-FA-FB-FC-FD (Filas)

;***************OBSERVACIONES PREVIAS:*************** '* 1) Los tiempos de Entrada y Salida los tengo configurados en '* Segundos en lugar de minutos para hacer pruebas y no aburrirme '* tan sólo modificar los PAUSE para obtener minutos. '* Por defecto lo tengo configurado a 4sg. para pulsar la tecla '* de configurar "B" '* y 5 Sg para salir y/o entrar. '* 2) Por otro lado se aconseja utilizar un cuarzo de 10, 12 o mejor de 20 MHZ '* pero por no tenerlos utilizo uno de 4 MHZ. La fiabilidad para conseguir los '* tonos de teléfono es menor pero tengo comprobado que SÍ FUNCIONA aunque '* algunas veces no lo consigue. tan sólo esperar y que se efectúa la llamada. '* los condensadores para el cuarzo son de 22 pf. Se aceptan de 15 a 30 pf '* (ver anotaciones en página 94 de los apuntes 3ª edición) '* (En el programador "ICPROG" marcar tipo de oscilador HS; esta opción se debe '* utilizar cuando empleemos un cristal de cuarzo igual o superior a 8 MHZ.) '* Como en éste programa utilizo uno de 4 MHZ marcar tipo de oscilador XT.

;-----------------FUNCIONAMIENTO-------------------------;Cuando se conecta la alarma, y si se pulsa la "Tecla B" en los ;primeros 4 segs SE PUEDEN CONFIGURAR : ;A)‐. Los Tiempos de Salida y Entrada de 1 a 10 minutos. ; (en principio está configurado a 5' la entrada y salida) ;B)‐. El Teléfono a llamar en caso de activación de la alarma ; (en este caso Sólo se permite la lectura de los números del teclado.) ;A continuación nos pide la clave para poner operativa el sistema. ;Se permiten como máximo 3 fallos caso contrario Activación de sirena ; y teléfono. ;‐. La "Tecla A" ‐‐‐Permite la activación directa de la alarma ;‐. La "Tecla B" ‐‐‐Permite la Configuración (tiempos entrada‐salida + telefno.) ;‐. La "Tecla C" ‐‐‐Permite Cambiar la clave ("Acepta números, letras y signos) ;‐. La "Tecla D" ‐‐‐Permite Desconectar, pero pedirá validar Clave. 1 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) ;En caso de Activación se conecta una sirena y se marca el número. Se chequea ;la tecla de Desconexión "Tecla D" que en caso de ser pulsada pedirá la clave. ;Otros Datos: en memoria EEPROM: ;‐. Posición 0 ‐‐Se graba el flag indicador de que ya se grabó la clave ; y el teléfono en el 1er montaje. ;‐. Posición 1 a 6 ‐‐ La clave; en principio será la 1‐2‐3‐4‐5‐6 ; (se aceptan números, letras y signos) ;‐. Posición 10 ‐‐Tiempo de Salida; valor 1 a 10 1l. (1 representa 1 minuto ; el 0 representa los 10 minutos) ;‐. Posición 11 ‐‐Tiempo de Entrada; valor 1 a 10 1l. (1 representa 1 minuto ; el 0 representa los 10 minutos) ;‐. Posición 20 a 28 ‐‐El número de Teléfono para avisar si se dispara ;OBSERVACIÓN: ;La simulación en proteus ; da problemas con la LCD pero todo está OK. de hecho ;si se deja y espera la LCD vuelve a verse OK. ;También problemas con la instrucción DTMFOUT Y SOUND. ;OBSERVACIONES: ;La simulación en proteus da problemas con la LCD pero todo está OK. de hecho ;si se deja y espera la LCD vuelve a verse OK. ;También problemas en la simulación del proteus con las instrucciones ;DTMFOUT Y SOUND. 1) Al encender la alarma, tenemos 4 sgdos. Si deseamos configurar: ‐. Los tiempos de SALIDA, ENTRADA y el Nº de teléfono con el que se conectará si salta la alarma

2 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) 2) Pulsar “B” PARA CONFIGURAR LOS TIEMPOS DE SALIDA, ENTRADA, Y EL Nº DE TELEFONO A LLAMAR

3 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

4 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

5 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

6 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) 3) Lo primero antes de poner activa la alarma, se chequea si alguna Zona está abierta (representada por los interruptores). Si es así, hasta que no se cierren no dejará ponerla operativa 4) Todas cerradas, Mensaje de bienvenida y petición de clave de Acceso. 5) La clave es de 6 cifras, por defecto es la “123456” pero se puede cambiar en la configuración. (se aceptan números, letras y signos) 6) Se permiten un máximo de 3 fallos para poner la clave. Si se supera se activará la alarma; activación del zumbador (Sirena) y llamada de teléfono al número establecido. 7) Una vez metida la clave correcta, tenemos un tiempo de 1 a 10 minutos según lo que se haya configurado para SALIR y/o ENTRAR. 8) Si deseamos DESACTIVAR la alarma pulsar la “Tecla D”. Nos pedirá la clave. 9) En el display se nos indica el tiempo que aún nos queda para entrar y/o salir sin que salte la Alarma. También el número de teléfono al que se está llamando si es que hubiese saltado la alarma. Sería interesante poner el nº de la Policía; Por supuesto, siempre que entremos tendremos que “pulsar la tecla D” con la clave para desactivarla, de lo contrario se activará en el tiempo establecido.

7 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

8 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) Clave errónea máximo tres intentos

9 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

10 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

11 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

12 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) MENSAJE INDICANDO LA ZONA POR LA QUE SE HA ENTRADO Y HECHO QUE SALTE LA ALARMA

13 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) HE PULSADO LA TECLA “D” Para desactivar la alarma. Me pide la Clave.

14 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012) HE PULSADO LA TECLA “C” Para cambiar la clave. ‐. 1º Me pide la actual y después introduzco la nueva clave. ‐. Al finalizar me saldrá en el display la nueva clave para poder anotarla y lo confirmaré pulsando < 1>

15 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

16 JOAQUÍN BERROCAL PIRIS


PROYECTO “MI_ALARMA.PBP” (Abril‐Nov. 2012)

17 JOAQUÍN BERROCAL PIRIS


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

'****************************************** '* Nombre : Mi_Alarma.pbp * '* Autor : Joaquín Berrocal * '* Copyright : Copyright * '* Fecha : NOV-2012 * '* Versión : 1.0 * '****************************************** '********************* FUNCIONAMIENTO ********************** ;MI_ALARMA.PBP; DE TRES ZONAS CON LLAMADAS A TELÉFONO CELULAR ;REALIZADA PARA EL PIC16F876A. ;SE USA UN TECLADO 4 X 4 ; Bornes--> 1 2 3 4 5 6 7 8 ; (Columnas) C1-C2-C3-C4-FA-FB-FC-FD (Filas) ;***************OBSERVACIONES PREVIAS:*************** '* 1) Los tiempos de Entrada y Salida los tengo configurados en '* Segundos en lugar de minutos para hacer pruebas y no aburrirme '* tan sólo modificar los PAUSE para obtener minutos. '* Por defecto lo tengo configurado a 4sg. para pulsar la tecla '* de configurar "B" '* y 5 Sg para salir y/o entrar. '* '* '* '* '* '*

2) Por otro lado se aconseja utilizar un cuarzo de 10, 12 o mejor de 20 MHZ pero por no tenerlos utilizo uno de 4 MHZ. La fiabilidad para conseguir los tonos de teléfono es menor pero tengo comprobado que SÍ FUNCIONA aunque algunas veces no lo consigue. tan sólo esperar y que se efectúa la llamada. los condensadores para el cuarzo son de 22 pf. Se aceptan de 15 a 30 pf (ver anotaciones en página 94 de los apuntes 3ª edición)

'* (En el programador "ICPROG" marcar tipo de oscilador HS; esta opción se debe '* utilizar cuando empleemos un cristal de cuarzo igual o superior a 8 MHZ.) '* Como en éste programa utilizo uno de 4 MHZ marcar tipo de oscilador XT. ;************************************************* ;-----------------FUNCIONAMIENTO-------------------------;Cuando se conecta la alarma, y si se pulsa la "Tecla B" en los ;primeros 4 segs SE PUEDEN CONFIGURAR : ;NOTA: ;(en este programa lo tengo en segundos en lugar de minutos ) ;-. Los Tiempos de Salida y Entrada de 1 a 10 minutos. ; (en principio está configurado a 5' la entrada y salida ;-. Y el Teléfono a llamar en caso de activación de la alarma ; (Sólo se permite la lectura de los números del teclado.) ;-. A continuación nos pide la clave para poner operativa el sistema. ;-. Se permiten como máximo 3 fallos caso contrario Activación de sirena ; y teléfono. ;-. ;-. ;-. ;-.

La La La La

"Tecla "Tecla "Tecla "Tecla

A" B" C" D"

---Permite ---Permite ---Permite ---Permite

la activación directa de la alarma la Configuración (tiempos entrada-salida+telefno.) Cambiar la clave ("Acepta números,letras y signos) Desconectar, pero pedirá validar Clave.

;En caso de Activación se conecta una sirena y se marca el número. Se chequea ;la tecla de Desconexión "Tecla D" que en caso de ser pulsada pedirá la clave. ;Otros Datos: en memoria EEPROM: ;-. Posición 0 --Se graba el flag indicador de que ya se grabó la clave ; y el teléfono en el 1er montaje. ;-. Posición 1 a 6 -- La clave; en principio será la 1-2-3-4-5-6 ; (se aceptan numeros,letras y signos) ;-. Posición 10 --Tiempo de Salida; valor 1 a 10 1l. (1 representa 1 minuto ; el 0 representa los 10 minutos)

Page 1 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

;-. Posición 11 --Tiempo de Entrada; valor 1 a 10 1l. (1 representa 1 minuto ; el 0 representa los 10 minutos) ;-. Posición 20 a 28 --El número de Teléfono para avisar si se dispara ;OBSERVACIONES: ;La simulación en proteus dá problemas con la LCD pero todo está OK. de hecho ;si se deja y espera la LCD vuelve a verse OK. ;También problemas en la simulación del proteus con las instrucciones ;DTMFOUT Y SOUND. '********************************************************** 'DEFINICIONES INICIALES. Fusibles de configuración. ''@ hs_osc 'Cambia automáticamente a un oscilador de de alta velocidad ' el HS va de 8 MgHz A 20 Mghz Para que los tonos DTMF sean '100% validos utilizar un cristal de 10-12 ó 20 MHZ mejor el 'de 20MHZ (ver pag 94 3ª edicion.) define Osc 4

' Define el Oscilador para un Cristal ' de 10 Mhz.

'WDT_OFF PWRT_ON 'BOD_OFF ;ESTOS OTROS NO LO ACEPTA Y NO SÉ PORQUÉ 'LVP_OFF 'CPD_OFF 'WRT_OFF 'DEBUG_OFF PROTECT_OFF ' Configuración de Puertos: ADCON1=7 'PARA CONFIGURAR EL PUERTO A COMO ENTRADA/SALIDA TRISA = %00000000 TRISB = %01110000 TRISC = %11110000 'TRISD = %01111000

'Todo como salida 'entradas ZONAS ->B4-B5-B6 resto salidas 'Conexión Teclado RC0,1,2,3 Columnas 'conexión teclado RC4,5,6,7 Filas 'el pic 16F876A no dispone de puerto D

;INICIAMOS LAS PUERTAS de salida PORTA = 0 PORTB = 0 PORTC = 1 'Todos los pines configurados como salida

a nivel 1 (Teclado)

' Declaramos las variables: Flag var bit 'flag para no tener que escribir de nuevo la clave X var word Tiempo_E_S var word 'VARIABLE COMUN COMO Tiempo de Entrada Salida Tiempo_LCD var word Contaje var byte VAR1 var byte NFallos var byte : NFallos = 0 'para iniciarla a cero DIGITO var byte[9] ' Lo utilizo también para lectura del Telfno CLV var byte[7] DIRECCION_EEPROM var byte 'Para indicar el comienzo de grabación en la EEPROM POSICION_LCD var byte 'para indicar * en lcd al cambiar la clave

Page 2 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

NumZona1 var byte NumZona2 var byte NumZona3 var byte

'para los mensajes de cerrar la zona X 'para los mensajes de cerrar la zona X 'para los mensajes de cerrar la zona X

LZona_1 var PORTB.4 LZona_2 var PORTB.5 LZona_3 var PORTB.6 LActivada var PORTB.7 LSirena var PORTB.2 LBuzzer var PORTA.5

'Nombre LZona_1 para pin B.4 'Nombre LZona_1 para pin B.5 'Nombre LZona_1 para pin B.6 'Nombre LActivada para pin B.7 'Nombre LSirena para B.2 'Nombre LBuzzer para A.5

Rele var PORTB.1 Col_1 Col_2 Col_3 Col_4

var var var var

Fila_A Fila_B Fila_C Fila_D

PORTC.0 PORTC.1 PORTC.2 PORTC.3

var var var var

PORTC.4 PORTC.5 PORTC.6 PORTC.7

'Nombre 'Nombre 'Nombre 'Nombre

Col_1 Col_1 Col_1 Col_1

para para para para

'Nombre 'Nombre 'Nombre 'Nombre

Fila_A Fila_B Fila_C Fila_D

C.0 C.1 C.2 C.3

para para para para

C.4 C.5 C.6 C.7

'Para leer la posición 0 de EEPROM si ya se grabó en fabrica no volver 'a grabar mas la clave de fabrica. read 0, CLV[0] ' leemos la 1ª posición de la EEPROM y lo guardamos en CLV[0] if CLV[0]= 170 then goto CONFIGURAR 'Si ya se grabo saltar configurar, de lo contrario 'proceder a grabar el flag (170) y la clave de fabrica y 'el teléfono establecido de fabca. ' Guardamos cada digito de la clave en las posiciones elegidas previamente: else write 0,170 pause 10

'SI ES LA 1ª VEZ QUE SE ARRANCA EL PIC EN FÁBRICA 'grabo en la posición 0 el valor 170 b'1010101010' '10 ms no es necesario pero por si acaso

; PASS INICIAL ; Carga la memoria EEPROM desde la posición ;1 en adelante con los valores posición 1 valor 1 ;posición 6 valor 6 eeprom 10,[5,5] 'guardo el valor 1 en posición 10 y 11 de la EEPROM 'Representan el valor de 5 minuto para Salida y entrada eeprom 1,[1,2,3,4,5,6]

eeprom 20,[1,2,3,4,5,6,7,8,9]

'son 9 números de un teléfono "ficticio" 'para no poner el mío. Pulsando "B" puedo 'añadir cualquier nº de teléfono 'al que quiera que active la alarma

endif ;++LO 1º ES UN TIEMPO PARA PODER CONFIGURAR LOS TIEMPOS DE SALIDA ++++++ ;++Y ENTRADA Y EL Nº DE TELFNO A LLAMAR. este tiempo será de aprox +++++ ;++++++4 sgds . Si pulso la Tecla "B" ir a Configurar_Tiempos_Telfno donde ;preguntará si quiero o No configurar. Si "SÍ" activo Flag = 1 y 'goto Chequeo_Inicial, El flag lo utilizo para no repetir la Clave. ' si "NO" directamente go Chequeo_Inicial.

Page 3 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

CONFIGURAR: Flag = 0 lcdout lcdout lcdout lcdout

'Como seguridad inicio el flag a 0 para evitar repetir 'la clave 2 veces en caso de hacer configuración

$fe, 1 'limpia LCD $fe, 2 ' Posiciona el cursor en el inicio "CONFIGURAR" $fe,$C0, "PULSAR B"

call Beep 'pongo 205 para que sean 4 sgs con cristala de 10 Mghz X = 1 to 205 'TIEMPO ESPERA DE 4 Sgs PARA PULSAR "B" a 4 MHZ seria 80 pause 50 'pausa de 50 ms high Col_1:high Col_2:high Col_3:low Col_4 if Fila_B = 0 then call Beep_Estabilizacion:goto Configurar_Tiempos_Telfno high Col_4 'para que en el PROTEUS reconozca que se pulsa 'NO SERÍA NECESARIO PERO SÍ EN LA SIMULACIÓN next for

'PASADO EL TIEMPO DE ESPERA PARA CONFIGURAR, CONTINÚA Chequeo_Inicial: ;chequeo de las Zonas si hay alguna abierta no permitir continuar ;hasta que no estén cerradas todas. NumZona1 = 0 NumZona2 = 0 NumZona3 = 0

'inicializamos variables 'EL VALOR 0 indica que estan todas cerradas

pause 100

'Eespera 100 ms antirebote normal de 20 a 30 ms A 4 MHZ 'como trabajo a 10 MHZ pongo 100 ms '************************************************** if lzona_1 = 1 then NumZona1 = 1 ' si la zona1 esta abierta asignar valor 1 if lzona_2 = 1 then NumZona2 = 2 ' si la zona2 esta abierta asignar valor 2 if lzona_3 = 1 then NumZona3 = 3 ' si la zona3 esta abierta asignar valor 3 '************************************************** 'Si alguna zona está abierta mensaje if

lzona_1 = 1 or lzona_2 = 1 or lzona_3 = 1 then goto Mensaje_Zonas_Abiertas

else goto Inicio 'Si todas las zonas están cerradas permitir continuar endif '+++++*************************++++ Mensaje_Zonas_Abiertas: lcdout $fe, 1 pause 1000

'limpia la pantalla

'para dar efecto intermitente

lcdout $fe,$85,"CERRAR" ' Posiciona el cursor posicion 6 línea 1 lcdout $fe,$C0, "ZONA: ",#NumZona1," - ",#NumZona2," - ",#NumZona3," " 'posicion 1 de línea 2 pause 1000

Page 4 of 22

' Hacemos una pausa de 1 segundo

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

call beep call beep call beep goto

' Generamos un sonido ' Generamos un sonido ' Generamos un sonido

Chequeo_Inicial 'vuelve a chequear

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;ESTE CONJUNTO DE SUBRUTINAS es llamada de la Subrutina "Desconectar:" ;verifca que se conoce la clave antigua para poder desconectar ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Clave_Desconectar: pause 50 X = 0

'INICIAMOS LA VARIABLE

lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "INTRODUCIR CLAVE" 'NO LE PONGO LA "¿" por no reconocerla la LCD 'LCDOut $fe,$C0, "Si,pulsar 1 NO 2" call Beep

' Generamos un sonido

'----Iniciamos la posicion inicial para escribir en LCD y EEPROM---POSICION_LCD= $C8 'primera posición en la LCD para sacar "******" '------------------------------------------------------------------'Chequea la clave para poder desconectar. Chequeo_Clave_Desconectar: call Teclado ' Si ninguna tecla fue pulsada salta a "Chequeo_Clave_Desconectar" if VAR1 = 170 then Chequeo_Clave_Desconectar '' call Beep

no es necesaria por haber un Beep en el Teclado

lcdout $fe,$C0, "Valor: ",#VAR1 lcdout $fe,POSICION_LCD, "*" 'ocultarlo 'incrementamos la posición, se deben poner un máximo de 6 digitos POSICION_LCD = POSICION_LCD + 1 X = X + 1 DIGITO[X] = VAR1

' El valor de la tecla pulsada lo ' guardamos en la variable correspondiente

' Si X = 6 estamos guardando en DIGITO[6] ' el último valor introducido desde el ' teclado matricial if X >= 6 then Comprobar_Clave_Desconectar goto

Chequeo_Clave_Desconectar

' Si X es diferente de 6 continuamos ' esperando el siguiente valor a ser ' ingresado desde el teclado

' A partir de la siguiente etiqueta empezamos la comprobación,

Page 5 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

' y el formato es: ' Comprobar_Clave_Desconectar: X = 0 'iniciamos la variable por seguridad 'Si no son iguales ir a error ' de lo contrario pasar al siguiente If .. 'si Todos OK retornar a la rutina inicial que es la de if DIGITO[1] <> pasar_a1: if DIGITO[2] <> pasar_a2: if DIGITO[3] <> pasar_a3: if DIGITO[4] <> pasar_a4: if DIGITO[5] <> pasar_a5: if DIGITO[6] <> goto error else va

;Desconectar: CLV[1] then goto error CLV[2] then goto error CLV[3] then goto error CLV[4] then goto error CLV[5] then goto error CLV[6] then 'Desde la subrutina error: se activa la alarma. 'Si la clave es correcta DESCONECTAR LSirena/relé telfno/ir 'a chequeo_Inicial de aquí pedirá de 'nuevo la clave para poner Operativa la Alarma

'Desconectamos LA SIRENA,EL RELÉ TELFNO. Y el LED de Alarma Operativa low LSirena low rele low LActivada 'led indicador de que la alarma está Operativa 'INDICARLO EN LA LCD DE MANERA INTERMITENTE 'PARA EFECTO INTERMITENCIA 4 sgos lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "ALAR DESACTIVADA" 'LCDOut $fe,$C0, "** Bienvenido **" pause 2000

' Hacemos una pausa de 2 segundos

lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "ALAR DESACTIVADA" pause 2000

' Hacemos una pausa de 2 segundos

'VOLVER A CHEQUEO_INICIAL goto Chequeo_Inicial endif ;++++++CONFIGURAR TIEMPOS SALIDA/ENTRADA Y EL TELFNO +++++++++++ ' RUTINAS PARA configurar los tiempos de Salida y Entrada 'y para el Teléfono a llamar en caso de Alarma. 'Estas rutinas son llamadas al pulsar la tecla "B" desde 'la Rutina "Chequeo_Zonas:" o bien de la rutina "Chequeo_Inicial:" ;El TIEMPO DE SALIDA se guarda en posición 10 EEPROM ;El TIEMPO DE ENTRADA se guarda en posición 11 EEPROM ;El TELÉFONO se guarda DESDE LA POSICIÓN 20 A 28 EEPROM (son 9 números ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;proviene de la rutina "Chequeo_inicial:" o bien de "Chequeo_Zonas:" Configurar_Tiempos_Telfno:

Page 6 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

call Consulta_Clave

'primero consulta si sabemos la clave 'si no lo sabemos Activar_Alarma

'Si pulso que "SI" poner un Flag para que al ir a Chequeo_Inicial 'no tenga que volver a poner la Clave. pues ya lo hemos hecho al 'configurar los tiempos y el telfno. ;+++++++++++++++++ pause 50 'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada lcdout $fe, 1 ' lcdout $fe, 2 ' lcdout lcdout $fe,$C0, call Beep Chequeo_1_2: pause 50 Col_1 Col_2 Col_3 Col_4

= = = =

0 1 1 1

Limpia la LCD Posiciona el cursor en el inicio " CONFIGURAR?" 'NO LE PONGO LA "¿" por no reconocerla la LCD "Si,pulsar 1 NO 2"

' Generamos un sonido 'chequeo de si se pulsa 1 o 2 para cambiar la clave 'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada ' Columna 1 = 0 RC.0 a RC.3 ' Columna 2 = 1 ' Columna 3 = 1 ' Columna 4 = 1

if Fila_A = 0 then

' tecla "1"

SÍ QUIERO CAMBIAR LA CLAVE

Flag = 1

'flag para evitar tener que repetir la clave al 'ir a Chequeo_Inicial una vez hecho la configuración 'de los tiempos y el Telfno. call Beep_Estabilizacion; goto Tiempo_De_Salida

'Ir a Tiempo_De_Salida para comenzar la Configu 'ración de los tiempos y el Teléfono al final 'hay un RETURN

endif Col_1 Col_2 Col_3 Col_4

= = = =

1 0 1 1

' ' ' '

Columna Columna Columna Columna

1 2 3 4

= = = =

1 0 1 1

RC.0 a RC.3

if Fila_A = 0 then ' tecla "2" call Beep_Estabilizacion goto Chequeo_Inicial

No quiero cambiar clave

'para chequear las zonas e ir a Inicio

endif goto Chequeo_1_2

'a la espera de que se pulse una u otra acción

'+++++++++++++++++

;+++++SI PONGO LO DEL SÍ- NO CONFIGURAR ESTO SOBRA++++++ lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "CONFIGURAR ..." 'LCDOut $fe,$C0, "** Bienvenido **" pause 2000

Page 7 of 22

' Hacemos una pausa de 2 segundos

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

;+++++++++++++++++++++++++++++++++++++++++++++++++++++ Tiempo_De_Salida: lcdout $fe, 1 lcdout $fe, 2 ' lcdout lcdout $fe,$C0, pause 2000

'limpia LCD Posiciona el cursor en el inicio "Tiempo de Salida" "Pulsar 1 a 10 mi"

' Hacemos una pausa de 2 segundos

call Teclado_Configuracion 'Sólo verifica los Números if VAR1 = 0 then VAR1 = 10

;el valor 0 es el valor 10

;El valor del tiempo de SALIDA se guarda en posicón 10 de la EEPROM write 10,VAR1 call Mensaje_Tiempos ;En LCD ver el valor grabado Tiempo_De_Entrada: lcdout $fe, 1 lcdout $fe, 2 ' lcdout lcdout $fe,$C0, pause 2000

'limpia LCD Posiciona el cursor en el inicio "Tiempo Entrada" "Pulsar 1 a 10 mi"

' Hacemos una pausa de 2 segundos

call Teclado_Configuracion 'Sólo verifica los Números if VAR1 = 0 then VAR1 = 10

;el valor 0 es el valor 10

;El valor del tiempo de ENTRADA se guarda en posicón 11 de la EEPROM write 11,VAR1 call Mensaje_Tiempos ;En LCD ver el valor grabado goto Telefono ;ir a rutina "Telefono:" para Grabaciónd el Nº de tefno. Mensaje_Tiempos:

;En LCD ver el valor grabado

lcdout $fe, 1 lcdout $fe, 2 ' lcdout lcdout $fe,$C0, pause 2000

'limpia LCD Posiciona el cursor en el inicio " GRABADO ... " "Tiempo ",#VAR1," minuto" ;justo 16 (incluso si es 10)

' Hacemos una pausa de 2 segundos

return 'Para añadir el Teléfono al que se desea llamar en caso de 'que salte la alarma Telefono: '----Iniciamos la posicion inicial para escribir en LCD y EEPROM--'---El número de Teléfono comienza en posicion 20 de EEPROM ----POSICION_LCD = $C7

'primera posición en la LCD para sacar 'los números de telefono en la LCD DIRECCION_EEPROM = 20 'primera posición de la EEPROM para grabar 'el número de Telefono son 9 digitos X = 0 ' Iniciamos la variable POR SI ACASO. '-------------------------------------------------------------------

lcdout $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio

Page 8 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

lcdout "Telefno a Llamar" 'sin la (o) son 16 lcdout $fe,$C0, "Numero " '1ª posicion línea 2 pause 2000

' Hacemos una pausa de 2 segundos

Numero: 'Rutina para poner el Número telefónico call Teclado_Configuracion 'Sólo verifica los Números lcdout $fe,POSICION_LCD,#VAR1'Se añade el numero 956678... write DIRECCION_EEPROM,VAR1 'incrementamos la posición, se deben poner un máximo de 9 digitos Nº Tefno. X = X + 1 POSICION_LCD = POSICION_LCD + 1 ' Escribe el valor en la memoria de datos.El 1º en 'la posición 20 de la EEPROM y el 9º en la 28 DIRECCION_EEPROM = DIRECCION_EEPROM + 1 'Al llegar al noveno nº del telfno. Mensaje y vuelta Chequeo_Inicial 'desde donde ya no habrá que poner de nuevo la clave por tener el 'Flag activo. Y SALDRÁ EN LCD "Chequeando ..." if X = 9 then pause 1000 'para dar sensación de estar grabando lcdout $fe,2, "Telefono GRABADO" '16 caracteres pause 1500 lcdout $fe,2, " " pause 1500 lcdout $fe,2, "Telefono GRABADO" pause 1500 lcdout $fe,2, " " pause 1500 lcdout $fe,2, "Telefono GRABADO" pause 3000 goto Chequeo_Inicial endif goto Numero

' Si aún no se han metido los 9 dígitos ir a Numero:

'++++++RUTINA DE LECTURA DE TECLADO SÓLO LOS NÚMEROS ++++++ Mens_Solo_Numeros: ' LCDOut $fe, 1 'limpia LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout " Solo Numeros " 'sin la (o) son 16 digitos pause 1000 lcdout $fe, 2 lcdout "Telefno a Llamar" 'sin la (o) son 16 return Teclado_Configuracion: call Teclado if VAR1 = 170 then Teclado_Configuracion if if if if

VAR1 VAR1 VAR1 VAR1

= = = =

Page 9 of 22

"A" "B" "C" "D"

then then then then

call call call call

'No se ha pulsado ninguna

Mens_Solo_Numeros:goto Mens_Solo_Numeros:goto Mens_Solo_Numeros:goto Mens_Solo_Numeros:goto

Teclado_Configuracion Teclado_Configuracion Teclado_Configuracion Teclado_Configuracion

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

if VAR1 = "#" then call Mens_Solo_Numeros:goto Teclado_Configuracion if VAR1 = "*" then call Mens_Solo_Numeros:goto Teclado_Configuracion return '++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Rutina para consultar la clave si OK retorna de los contrario 'salta a Error: y de ahí a Activar_Alarma '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Consulta_Clave: 'SI ESTÁ TODAS LAS ZONAS CERRADAS INICIAR LA entrada de clave para 'activar la alarma lcdout $fe, 1 lcdout $fe, 2 ' lcdout lcdout $fe,$C0, pause 2000

'limpia LCD Posiciona el cursor en el inicio "Cont. de Acceso" "** Bienvenido **"

' Hacemos una pausa de 2 segundos

call Beep

' Generamos un sonido

Clave: X = 0

' inicializamos la variable X = 0

;nota en la posición CLV[0] guardo el valor 170 de haberse grabado ; el pass inicial : 123456 read read read read read read

1, 2, 3, 4, 5, 6,

CLV[1] CLV[2] CLV[3] CLV[4] CLV[5] CLV[6]

' ' ' ' ' '

lcdout $fe, 1 ' lcdout $fe, 2 ' lcdout lcdout $fe,$C0, call Beep

leemos leemos leemos leemos leemos leemos

el el el el el el

primer dígito y lo guardamos en CLV[1] segundo dígito y lo guardamos en CLV[2] tercer dígito y lo guardamos en CLV[3] cuarto dígito y lo guardamos en CLV[4] quinto dígito y lo guardamos en CLV[5] sexto dígito y lo guardamos en CLV[6]

Limpia la LCD Posiciona el cursor en el inicio "Introduzca su " "Clave de Acceso:" ' Generamos un sonido

;****SE PERMITEN NÚMEROS Y SIGNOS DEL TECLADO****** Consulta: call Teclado

;consultamos el Teclado

if VAR1 = 170 then consulta ' Si no hay una tecla pulsada vuelve a consultar '170=1010101010' y lo pongo en lugar de var1= 0 'para que se cheque también el 0 en caso de cambiar 'clave. ' Seguidamente lo que hacemos es almacenar ' en seis variables definidas ' por el programador los dígitos introducidos

Page 10 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

' desde el teclado matricial ' para luego ser comparados con los valores ' almacenados en la memoria de datos. X = X + 1 DIGITO[X] = VAR1 ' El valor de la tecla pulsada lo ' guardamos en la variable correspondiente if X = 6 then comprobar ' Si X = 6 estamos guardando en DIGITO[6] ' el último valor introducido desde el ' teclado matricial goto Consulta ' Si X es diferente de 6 continuamos ' esperando el siguiente valor a ser ' ingresado desde el teclado ' ' ' ' ' '

A partir de la siguiente etiqueta empezamos la comprobación, y el formato es: Si DIGITO[X] es igual a CLV[X] el digito es correcto, y salta a la etiqueta "paseX", si es diferente salta a la subrutina "error"; veamos…

Comprobar: if DIGITO[1] Activar_Alarma pase1: if DIGITO[2] pase2: if DIGITO[3] pase3: if DIGITO[4] pase4: if DIGITO[5] pase5: if DIGITO[6]

= CLV[1] then pase1:goto error

'de error hay un goto

= CLV[2] then pase2:goto error = CLV[3] then pase3:goto error = CLV[4] then pase4:goto error = CLV[5] then pase5:goto error = CLV[6] then correcto:goto error

' Si los seis dígitos han sido correctos ' se ejecuta la subrutina correspondiente. Correcto: high lactivada pause 500

'activar led ROJO indicador de estar ACTIVADA LA ALARMA

lcdout $fe, 1 ' lcdout $fe, 2 ' lcdout lcdout $fe,$C0,

Limpia la LCD Posiciona el cursor en el inicio " * * * * * * " "Clave Correcta!"

call beep

' RA.5 Generamos un sonido + led Lbuzzer

pause 2000

' Pausa para visualizar el mensaje

return ;++++++++++++++++++++++++++++INICIO+++++++++++++++++++++++++++++ ' Iniciamos el sistema con una bienvenida: 'Y CHEQUEAMOS el teclado "SE PERMITEN TODAS LAS TECLAS" para 'asignar la CLAVE. (Consulta:) ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Tiempo_Para_Salir:

Page 11 of 22

' "es llamado desde un GOTO en lugar de un CALL"

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

read 10,Tiempo_E_S

'En posición 10 EEPROM 'lee el tiempo de Salida va de 1 a 10 'EL "0" representa el valor 10 y por ello 'se guarda como 10 dicho valor en la eeprom. 'Variable Byte

Tiempo_LCD = Tiempo_E_S lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Tiempo a SALIR :" for X = 1 to Tiempo_E_S

'+++LO REDUZCO a Segundos PARA NO ABURRIRME++++++

lcdout $fe,$C0, "Aprox.: ",#Tiempo_LCD," seg " ;Utilizo un pause de 1 sgdo en lugar de 1 minuto ;PARA CONTAR POR SEGUNDOS EN LUGAR DE POR MINUTOS ;Y NO ABURRIRME EN LAS PRUEBAS. Tan sólo cambiar el pause ;a pause 60000 Y ya lo tendré en minutos el contaje. pause 1000''60000

'pausa de 1 seg. Podría llegar hasta 65535 ms

Tiempo_LCD = (Tiempo_LCD) - 1 '+++PARA LEER TECLADO PARA PERMITIR DESCONECTAR en caso de no querer salir++ call Teclado ;chequea CADA 1 sgdo para ver si deseo Desconectar if VAR1 = "D" then goto Desconectar '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ next goto Chequeo_Zonas

'IR A CHEQUEAR LAS ZONAS 'quedaría colgado si pulsara la tecla de desconectar "D"

Inicio: 'saltarse el volver a poner la clave y reiniciar el Flag en caso de 'haber configurado los tiempos y el teléfono a llamar ;y poner el tiempo de Salida if Flag = 1 then Flag = 0:goto Tiempo_Para_Salir':goto Chequeo_Zonas call Consulta_Clave 'verifica si se conoce la Clave. si no ir a Error: 'y de ahí Activar_Alarma ;lo primero, el Tiempo para SALIR goto Tiempo_Para_Salir Chequeo_Zonas:

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;CHEQUEO DE LAS ZONAS Y RECLAS ESPECIALES "A" Activar_Alarma ;"D" Desconectar . "C" Cambio_Clave 'SI SE ABRE UN INTERRUPTOR QUE CONTROLA UNA DE LAS ZONAS. ESPERAR '100 MS para que no haya rebote de contactos. NO hacerlo desde la 'rutina de estabilización, porque este es al abrirse se pone a 1 'Espera 100 ms antirebote normal de 20 a 30 ms A 4 MHZ 'como trabajo a 10 MHZ pongo 100 ms ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NumZona1 = 0 'inicializamos variables

Page 12 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

NumZona2 = 0 NumZona3 = 0

'EL VALOR 0 indica que estan todas cerradas

if lzona_1 = 1 then pause 100:NumZona1= 1 if lzona_2 = 1 then pause 100:NumZona2= 2 if lzona_3 = 1 then pause 100:NumZona3= 3

Chequeo_Especiales: call Teclado

'zona1 abierta: asignar valor 1 'zona2 abierta: asignar valor 2 'zona3 abierta: asignar valor 3

'para chequear teclas A (Activar) C (Cambiar Clave) 'D (Desactivar) 'chequea teclado pero sólo las teclas especiales

if VAR1 = "A" then goto Activar_Alarma 'activar telefono y alarma ''''''''if var1 = "B" then goto Configurar_Tiempos_Telfno if VAR1 = "D" then goto Clave_Desconectar'pide clave para poder desconectar 'Desactivar alarma. y vuelta a Chequeo_Inicial 'donde se comprueba que esté todo Cerrado y luego pedirá 'clave para volver a poner ACTIVA LA ALARMA if VAR1 = "C" then goto Cambio_Clave 'cambiar clave '*************ESTA RUTINA HABRÍA QUE DEPURARLA MEJOR DE FORMA PRÁCTICA***** '*************CON LOS CÁLCULOS DE LOS TIEMPOS************************* Continuar:

if

'si elijo que no quiero cambiar retornar a esta rutina 'para poder continuar con los mensajes y el chequeo

'si alguna zona está abierta mensaje Lzona_1 = 1 or Lzona_2 = 1 or Lzona_3 = 1 then read 11,Tiempo_E_S

'En posición 11 EEPROM 'lee el tiempo de ENTRADA va de 1 a 10 'Variable Byte

Tiempo_LCD = Tiempo_E_S lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Tiempo a ENTRAR:" for X = 1 to Tiempo_E_S lcdout $fe,$C0, "Aprox.: ",#Tiempo_LCD," seg " pause 1000''60000

'pause de 1 sgds si pongo 60000 contaría por minuto 'con el pause puedo llegar hasta 65535 ms

Tiempo_LCD = (Tiempo_LCD) - 1 '+++PARA LEER TECLADO PARA PERMITIR DESCONECTAR en caso de no querer salir++ call Teclado

;chequea CADA 1 sgdo para ver si deseo Desconectar

if VAR1 = "D" then goto Desconectar '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ next else

Page 13 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

'Con este borrado de pantalla consigo que no se mantenga fijo el último 'mensaje de zona violada 'pause 200 'POR SEGURIDAD EN LA SIMULACION lcdout $fe, 1 'limpia la pantalla pause 1000

'para dar efecto intermitente

lcdout $fe,2,"CHEQUEANDO..." ' Posiciona el cursor INICIO línea 1 pause 1000

'para dar efecto intermitente

goto Chequeo_Zonas 'Si todas las zonas están cerradas: chequear Zonas ;y teclas especiales endif '+++++*************************++++ Mensaje_Zonas_Violadas: NumZona1 = 0 NumZona2 = 0 NumZona3 = 0

'inicializamos variables 'EL VALOR 0 indica que estan todas cerradas

if lzona_1 = 1 then pause 100:NumZona1= 1 if lzona_2 = 1 then pause 100:NumZona2= 2 if lzona_3 = 1 then pause 100:NumZona3= 3

'zona1 abierta: asignar valor 1 'zona2 abierta: asignar valor 2 'zona3 abierta: asignar valor 3

'Si alguna zona está abierta mensaje y salta a "Activar_Alarma" 'Si todas las zonas están cerradas no hace el mensaje y Salta "Activar_Alarma" if

Lzona_1 = 1 or Lzona_2 = 1 or Lzona_3 = 1 then

lcdout $fe, 1

'limpia la pantalla

lcdout $fe,2,"

" ' Posiciona el cursor INICIO línea 1 'posicion 1 de línea 2 lcdout $fe,$C0, "ZONA: ",#NumZona1," - ",#NumZona2," - ",#NumZona3," " 'Pause 400

' Hacemos una pausa de 4 msegundos

call beep call beep call beep 'Pause 1500 endif goto

VIOLADA:

' Generamos un sonido ' Generamos un sonido ' Generamos un sonido ' Pausa para visualizar el mensaje

Activar_Alarma

;+++++++++++++++++++++ ERROR AL METER CLAVE +++++++++++++++++++++++++ Error: low lactivada

'APAGAR led VERDE indicador de estar ACTIVADA LA ALARMA

NFallos = NFallos + 1

'incrementa para limitar a un max de 3 fallos

pause 500 lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "Maxi. 3 intentos" '" * * * * * *

Page 14 of 22

"

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

lcdout $fe,$C0, "Numero:

",#NFallos

'"

ERROR!

call beep call beep call beep

' Generamos un sonido ' Generamos un sonido ' Generamos un sonido

pause 2000

' Pausa para visualizar el mensaje

if NFallos >= 3 then goto Clave

"

'Máximo nº de Fallos 3 para meter la clave NFallos = 0 :goto Activar_Alarma

' Salta a "Clave" para nueva oportunidad

;******RUTINA DE ACTIVACIÓN DE ALARMA CON EL Nº DE TELÉFONO ***** Activar_Alarma:

high lactivada high LSirena

'TARDARÁ APROX 12 SEGS para volver a la rutina '"Chequeo_Zonas:" desde la cual se verifica si se 'pulsa alguna tecla Especial con "A" activar '"C" Cambiar Clave "D" Desconectar. 'ACTIVAR led VERDE indicador de estar 'ACTIVADA LA CENTRAL DE ALARMA 'RB2 activa led y sirena

;Para DESACTIVAR LA ALARMA pulsar "D" e INTRODUCIR LA CLAVE. ; si NO es correcta se vuelve a activar la alarma desde la rutina Error: ; Si la clave es OK ir a "Chequeo_Inicial:" habrá que volver a meter la clave ; pero no estará nada operativa. Desconectar: high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar high Col_4

'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:"

'+++++ ACTIVA LLAMADAS TELÉFONICA +++++ ;SI NO SE HA PULSADO LA TECLA "D" HACER la LLAMADAS: LLAMADAS: 'ME FALTA POR PONER EL DTMFOUT con el teléfono de la eeprom 'recordar que si if var1 = 0 then var1 = 10 'Que es el tono dtmfout 'correspondiente al 0 pause 2000

;espera 2 segundos antes de empezar

'------- Para Desconectar rápido en caso de pulsar "D"---------high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar high Col_4

'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:" '-----------------------------------------------------------high rele ; energice la bobina del rele pause 2000 ; espere 2 segundos hasta obtener tono de marcar '------- Para Desconectar rápido en caso de pulsar "D"---------high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar

Page 15 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

high Col_4

'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:" '-----------------------------------------------------------'EL VALOR 0 en código DTMFOUT es el valor 10. por ello la conversión 'del valor 0 en valor DTMFOUT read read read read read read read read read

20,DIGITO[1]:if 21,DIGITO[2]:if 22,DIGITO[3]:if 23,DIGITO[4]:if 24,DIGITO[5]:if 25,DIGITO[6]:if 26,DIGITO[7]:if 27,DIGITO[8]:if 28,DIGITO[9]:if

DIGITO[1]= DIGITO[2]= DIGITO[3]= DIGITO[4]= DIGITO[5]= DIGITO[6]= DIGITO[7]= DIGITO[8]= DIGITO[9]=

0 0 0 0 0 0 0 0 0

then then then then then then then then then

DIGITO[1]= DIGITO[2]= DIGITO[3]= DIGITO[4]= DIGITO[5]= DIGITO[6]= DIGITO[7]= DIGITO[8]= DIGITO[9]=

10 10 10 10 10 10 10 10 10

pause 50 'Pongo este pause para mayor seguridad de que se han copiado todos los digitos. ;Colocar el Número celular a llamar dtmfout PORTB.0,[#DIGITO[1],#DIGITO[2],#DIGITO[3],#DIGITO[4],#DIGITO[5], #DIGITO[6],#DIGITO[7],#DIGITO[8],#DIGITO[9]] lcdout $fe, 1 ' Limpia la LCD lcdout $fe, 2," Llamando ... " 'Posiciona el cursor en el inicio 'Posiciona el cursor inicio linea 2 lcdout $fe,$C0,"Telfno ",#DIGITO[1],#DIGITO[2],#DIGITO[3],#DIGITO[4], #DIGITO[5],#DIGITO[6],#DIGITO[7],#DIGITO[8],#DIGITO[9] pause 8000

'Espera de 8 sgs hasta que alguien conteste. 'en otros ejemplos ponen sólo 4 sgs

'------- Para Desconectar rápido en caso de pulsar "D"---------high Col_1 : high Col_2 : high Col_3 : low Col_4 if Fila_D = 0 then call Beep_Estabilizacion :goto Clave_Desconectar high Col_4

'lo pongo a 1 para que reconozca que pulso la Tecla "D" 'NO LO ENTIENDO PERO HAGO COMO CON "Confirmar_Copia_Clave:" '------------------------------------------------------------

'PASADOS LOS 8 SEGUNDOS for X= 1 to 25

;SONIDO DE SIRENA por el telefno PARA ADVERTIR ;repetir 25 veces equivale a 6 segundos a 20 MHZ ;ver explicación pag 97 3era edición

'enviar el sonido de sirena por el teléfono sound portB.0,[100,10,50,10]'Este otro es interesante[125,4,123,5] next ;siguiente repetición low rele

'desconectar el relé el cual cierra la llamada

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Chequea zonas para de esta forma poder ver en LCD 'las zonas violadas. En caso de cerrarse la zona no saldría mensaje 'y volvería a "Activar_Alarma". En cuanto se habra una zona saldrá el 'mensaje y de nuevo a "Activar_Alarma. goto Mensaje_Zonas_Violadas ' Chequeo_Zonas

Page 16 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '-----RUTINA ANTI-REBOTE PULSADORES DEL TECLADO-------------' La siguiente subrutina genera un "Beep" en el Buzzer ' conectado en RC0. cada vez que se pulse una tecla. '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Beep_Estabilizacion: high LBuzzer pause 100 low LBuzzer Espera_Suelte_Tecla:

'SE PUEDE SUSTITUIR POR "CALL Beep" 'cada vez que se pulse una tecla producir un Beep ' Estado Lógico Alto para RA5 ' Pausa de 100 milisegundos ' Estado Lógico Bajo para RA5 'De RC4 a RC7 son las filas del teclado

if Fila_A = 0 then

Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada ' no retornará para seguir

leyendo if Fila_B = 0 then

Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada ' no retornará para seguir

leyendo if Fila_C = 0 then

Espera_Suelte_Tecla 'Hasta que no deje de ser pulsada ' no retornará para seguir

leyendo if Fila_D = 0 then pulsada

Espera_Suelte_Tecla '(*) Hasta que no deje de ser ' no retornará para seguir

leyendo pause 25

'otros programas lo tienen, pero no lo creo necesario

return '-----------------------------------------------------------------------Beep: 'cuando sale mensaje produce un Beep 'cada vez que se pulse una tecla producir un Beep high LBuzzer ' Estado Lógico Alto para RA5 pause 100 ' Pausa de 100 milisegundos low LBuzzer ' Estado Lógico Bajo para RA5 return '*************************************************************** '* lee el teclado y cuando hay una tecla pulsada * '* (25 a 30 ms), carga la variable con el valor de la tecla * '* y espera a que se suelte la tecla. * '* cuando lo haga retornará a la rutina "Consulta" * '* Garantizamos el rebote de contacto garantizando que solo * '* una tecla sea cargada y no varias veces por cada pulso * '* de cierre. '* SE PERMITE LA LECTURA DE TODAS LAS TECLAS PARA LA CLAVE * '*************************************************************** Teclado: VAR1 = 170

Page 17 of 22

;SI NO SE PULSA NINGUNA TECLA VAR1 = 170 '170=1010101010' y lopongo en lugar de var1= 0 'para que se cheque también el 0 en caso de cambiar 'clave.

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

pause 100 Col_1 Col_2 Col_3 Col_4

= = = =

0 1 1 1

'CON estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada ' ' ' '

Columna Columna Columna Columna

1 2 3 4

= = = =

0 1 1 1

Col_1 var PORTC.0

if Fila_A = 0 then VAR1 = 1:goto Beep_Estabilizacion if Fila_B = 0 then VAR1 = 4:goto Beep_Estabilizacion

' tecla "1" ' tecla "4"

if Fila_C = 0 then VAR1 = 7:goto Beep_Estabilizacion ' tecla "7" if Fila_D = 0 then VAR1 = "*":goto Beep_Estabilizacion' tecla "*" 11 Col_1 Col_2 Col_3 Col_4

= = = =

1 0 1 1

' ' ' '

Columna Columna Columna Columna

1 2 3 4

= = = =

1 0 1 1

if Fila_A = 0 then VAR1 = 2:goto Beep_Estabilizacion if Fila_B = 0 then VAR1 = 5:goto Beep_Estabilizacion if Fila_C = 0 then VAR1 = 8:goto Beep_Estabilizacion

' tecla "2" ' tecla "5" ' tecla "8"

if Fila_D = 0 then VAR1 = 0:goto Beep_Estabilizacion ' tecla "0" 10 Col_1 Col_2 Col_3 Col_4

= = = =

1 1 0 1

' ' ' '

Columna Columna Columna Columna

1 2 3 4

= = = =

1 1 0 1

if Fila_A = 0 then VAR1 = 3:goto Beep_Estabilizacion

' tecla "3"

if Fila_B = 0 then VAR1 = 6:goto Beep_Estabilizacion

' tecla "6"

if Fila_C = 0 then VAR1 = 9:goto Beep_Estabilizacion

' tecla "9"

if Fila_D = 0 then VAR1 ="#":goto Beep_Estabilizacion

' tecla "#"

Col_1 Col_2 Col_3 Col_4

= = = =

1 1 1 0

' ' ' '

Columna Columna Columna Columna

1 2 3 4

= = = =

12

1 1 1 0

'"A" La utilizo para ACTIVAR EMERGENCIA" if Fila_A = 0 then VAR1 = "A":goto Beep_Estabilizacion ' tecla "A" ->13 if Fila_B = 0 then VAR1 = "B":goto Beep_Estabilizacion

' tecla "B" ->14

'"C" La utilizo para CAMBIAR CLAVE"

Page 18 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

if Fila_C = 0 then VAR1 = "C":goto Beep_Estabilizacion

' tecla "C" ->15

''"D" La utilizo para DESACTIVAR ALARMA" if Fila_D = 0 then VAR1 = "D":goto Beep_Estabilizacion ' tecla "D" ->0 'SI NO SE HA PULSADO NINGUNA TECLA RETORNAR return

' Retorna una línea después del llamado "Call"

;+++++++++++++++++++++ CAMBIO DE CLAVE ++++++++++++++++++++++++++++ Cambio_Clave: pause 50

'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada

lcdout $fe, 1 ' lcdout $fe, 2 ' lcdout la LCD lcdout $fe,$C0, call Beep Chequeo:

Limpia la LCD Posiciona el cursor en el inicio " Cambiar Clave?" 'NO LE PONGO LA "¿" por no reconocerla "Si,pulsar 1 NO 2" ' Generamos un sonido

'chequeo de si se pulsa 1 o 2 para cambiar la clave

pause 100 Col_1 Col_2 Col_3 Col_4

= = = =

0 1 1 1

'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada ' Columna 1 = 0 RC.0 a RC.3 ' Columna 2 = 1 ' Columna 3 = 1 ' Columna 4 = 1

if Fila_A = 0 then

' tecla "1"

SÍ QUIERO CAMBIAR LA CLAVE

call Beep_Estabilizacion; goto Nueva_Clave endif Col_1 Col_2 Col_3 Col_4

= = = =

1 0 1 1

' ' ' '

Columna Columna Columna Columna

1 2 3 4

= = = =

1 0 1 1

RC.0 a RC.3

if Fila_A = 0 then ' tecla "2" call Beep_Estabilizacion goto Continuar

No quiero cambiar clave

'retorna a "Continuar:"

endif goto chequeo

'a la espera de que se pulse una u otra acción

'+++++++++++++++++++++++NUEVA CLAVE+++++++++++++++++++++ Nueva_Clave: pause 100 'pausa de 1/2 segundo ;PRIMERO DEBE PONER LA CLAVE ANTERIOR: y después la actual lcdout $fe, 1 ' Limpia la LCD

Page 19 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "CLAVE ANTERIOR:" 'NO LE PONGO LA "¿" por no reconocerla la LCD call Beep

' Generamos un sonido

' goto Comparar_Clave_Antigua ;verifca que se conoce la clave antigua para ;poder cambiarla. '----Iniciamos la posicion inicial para escribir en LCD y EEPROM---POSICION_LCD= $C8 'primera posición en la LCD para sacar "******" DIRECCION_EEPROM = 1 'primera posición de la EEPROM para grabar la clave de 6 digitos 'ocupará de la 1 a la 6 SON 6 DÍGITOS DE CLAVE '------------------------------------------------------------------X = 0

' Iniciamos la variable POR SI ACASO.

Introducir_Clave_Antigua: call Teclado ' Si ninguna tecla fue pulsada salta a "Introducir_Clave_Antigua" if VAR1 = 170 then Introducir_Clave_Antigua lcdout $fe,$C0, "Valor: ",#VAR1 lcdout $fe,POSICION_LCD, "*" 'ocultarlo 'incrementamos la posición, se deben poner un máximo de 6 digitos POSICION_LCD = POSICION_LCD + 1 X = X + 1 DIGITO[X] = VAR1

' El valor de la tecla pulsada lo ' guardamos en la variable correspondiente

if X >= 6 then Comprobar_Clave_Antigua ' Si X = 6 estamos guardando en DIGITO[6] ' el último valor introducido desde el ' teclado matricial goto Introducir_Clave_Antigua

' ' ' ' ' '

'Si X es diferente de 6 continuamos 'esperando el siguiente valor a ser 'ingresado desde el teclado

A partir de la siguiente etiqueta empezamos la comprobación, y el formato es: Si DIGITO[X] es igual a CLV[X] el digito es correcto, y salta a la etiqueta "paseX", si es diferente salta a la subrutina "error"; veamos…

Comprobar_Clave_Antigua: X = 0 'iniciamos la variable por seguridad if DIGITO[1] = CLV[1] then pasar1:goto error pasar1: if DIGITO[2] = CLV[2] then pasar2:goto error pasar2: if DIGITO[3] = CLV[3] then pasar3:goto error pasar3:

Page 20 of 22

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

if DIGITO[4] = CLV[4] then pasar4:goto error pasar4: if DIGITO[5] = CLV[5] then pasar5:goto error pasar5: if DIGITO[6] = CLV[6] then goto Introducir_Nueva_Clave: goto error 'Si no son iguales ir a error 'si son iguales los 6 digitos continuar e introducir "La Nueva Clave" '--------------------------------------------------------------------------'+++DESDE AQUÍ SE HACE LECTURA DE LA NUEVA CLAVE Y SE GUARDA A PARTIR '+++ DE LA POSICIÓN 10 DE LA EEPROM

+++++ +++++

Introducir_Nueva_Clave: lcdout $fe, 1 ' lcdout $fe, 2 ' lcdout lcdout $fe,$C0, call Beep

Limpia la LCD Posiciona el cursor en el inicio "Int. Nueva Clave" " 6 DIGITOS " ' Generamos un sonido

pause 2000 lcdout $fe,$C0, "

" ;limpia la línea 2

'----Iniciamos la posicion inicial para escribir en LCD y EEPROM---POSICION_LCD= $C8 'primera posición en la LCD para sacar "******" DIRECCION_EEPROM = 1 'primera posición de la EEPROM para grabar la clave de 6 digitos 'ocupará de la 1 a la 6 SON 6 DÍGITOS DE CLAVE '------------------------------------------------------------------Lectura_Teclado_EEPROM: call teclado ' Si ninguna tecla fue pulsada salta a "Lectura_Teclado_EEPROM" if VAR1 = 170 then Lectura_Teclado_EEPROM lcdout $fe,$C0, "Valor: ",#VAR1 lcdout $fe,POSICION_LCD, "*" 'ocultarlo 'incrementamos la posición, se deben poner un máximo de 6 digitos POSICION_LCD = POSICION_LCD + 1 write DIRECCION_EEPROM,VAR1

' Escribe el valor en la memoria de datos

' Revisa si llegamos al límite asignado por ' el programador en la memoria de datos if DIRECCION_EEPROM = 6 then

Apuntar_Clave

DIRECCION_EEPROM = DIRECCION_EEPROM + 1 unidad goto Lectura_Teclado_EEPROM digitos

' Aumentamos la posición en una

'si aún no se ha llegado a introducir los 6

;AL LLEGAR A 16 ANOTAR LA CLAVE Apuntar_Clave: pause 100 'X = 0 ' read 1, CLV[1] read 2, CLV[2] read 3, CLV[3]

Page 21 of 22

inicializamos la variable X = 0 no hace falta aquí ' leemos el primer dígito y lo guardamos en CLV[1] ' leemos el segundo dígito y lo guardamos en CLV[2] ' leemos el tercer dígito y lo guardamos en CLV[3]

19/03/2013 0:48


C:\PBP ALARMAS\MI ALARMA\MI ALARMA ADAPTADA AL EAGLE 120x100-- 4 Lineas faltan\ARCHIVOS

read 4, CLV[4] ' leemos el cuarto dígito y lo guardamos en CLV[4] read 5, CLV[5] ' leemos el quinto dígito y lo guardamos en CLV[5] read 6, CLV[6] ' leemos el sexto dígito y lo guardamos en CLV[6] pause 200 'Para preparar la LCD, no es necesario, pero para simulación lcdout $fe, 1 ' Limpia la pantalla lcdout $fe, 2 ' Posiciona el cursor en el inicio lcdout "ANOTE LA CLAVE: " pause 1500 lcdout $fe, 2 , "PULSE < 1 > OK " lcdout $fe,$C0," ", #CLV[1],"-",#CLV[2],"-",#CLV[3],"-",#CLV[4],"-", #CLV[5],"-",#CLV[6]

;+++++++++++++++++++ CONFIRMAR COPIA CLAVE ++++++++++++++++++++++ ;confirmar pulsando la Tecla 1 que hemos copiado la clave nueva. Confirmar_Copia_Clave: 'chequeo de si se pulsa 1 o 2 para cambiar la clave pause 100 Col_1 Col_2 Col_3 Col_4

= = = =

0 1 1 1

'Con estos pauses evito que en la simulacion en PROTEUS 'salga CPU cargada ' Columna 1 = 0 RC.0 a RC.3 ' Columna 2 = 1 ' Columna 3 = 1 ' Columna 4 = 1

' tecla "1" SÍ QUIERO CAMBIAR LA CLAVE if Fila_A = 0 then call Beep_Estabilizacion:goto Inicio ;NOTA EN LA SIMULACION DEL PROTEUS SI NO MODIFICO EL VALOR DE "Col_1" NO 'ACTUARÍA Y NO HARÍA NADA AL PULSAR LA "TECLA 1" Y NO LO ENTIENDO 'PERO ESTÁ MÁS QUE DEMOSTRADO. Por ello le pongo el valor Col_1 = 1 ;antes de volver a confirmar Col_1 = 1 ' Columna 1 = 1 RC.0 a RC.3 'Col_2 = 0 ' Columna 2 = 0 'Col_3 = 1 ' Columna 3 = 1 'Col_4 = 1 ' Columna 4 = 1 goto Confirmar_Copia_Clave

'a la espera de que se pulse la Tecla 1

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ end

Page 22 of 22

19/03/2013 0:48


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.