Está en la página 1de 38

C

C
A
A
J
J
A
A
D
D
E
E


S
S
E
E
G
G
U
U
R
R
I
I
D
D
A
A
D
D




















Abraham Romero Quesada
Adaya S. Lorenzo Len
Soraya Santana de la Fe

Diseo de Sist. Basados en Proc. - ndice - Proyecto de Curso
Caja de Seguridad
ndice


1. Objetivos: ..................................................................................................................... 1
2. Componentes y materiales necesarios:......................................................................... 1
3. Pic 16F84...................................................................................................................... 1
4. Conversor analgico/digital y digital/analgico PCF8591.......................................... 3
5. Pantalla LCD: ............................................................................................................... 7
6. Teclado hexadecimal .................................................................................................... 9
7. Bus I
2
C........................................................................................................................ 11
8. Circuitos de acondicionamiento. ................................................................................ 14
9. Programa de control. .................................................................................................. 16
9.1. Pantalla LCD....................................................................................................... 16
9.2. Teclado................................................................................................................ 17
9.3 EEPROM.............................................................................................................. 17
9.3.1. Escritura........................................................................................................ 18
9.3.2. Lectura.......................................................................................................... 18
9.4. Lectura sensor...................................................................................................... 19
9.5. Emitir sonido....................................................................................................... 20
9.6. Retardo................................................................................................................ 20
9.7. Flujo del programa.............................................................................................. 21
9.7.1. Flujograma.................................................................................................... 22
10. Problemas y mejoras................................................................................................. 23
11. Conclusiones............................................................................................................. 24
Apndice. Cdigo fuente................................................................................................ 25

Diseo de Sist. Basados en Proc. - 1 - Proyecto de Curso
Caja de Seguridad

1. Objetivos:

El objetivo de este proyecto es la realizacin de una caja de seguridad. La caja
esta dotada de un sistema por contrasea que ser introducida por teclado y visualizada
de forma codificada a travs de la pantalla LCD. La contrasea real estar almacenada
en EEPROM y ser definible en tiempo de ejecucin. Cuando se introduce una
contrasea se hace una comprobacin automticamente de forma que si es correcta se
permitir la apertura de la caja, si no lo fuera se dar la opcin de introducirla de nuevo.
En caso de que se intente abrir la caja sin haber introducido correctamente la
contrasea se generar una seal de alarma.
2. Componentes y materiales necesarios:

Caja de cartn
PIC 16F84
Conversor analgico/digital
Altavoz de 8 , 5 W.
Resistencias
Fotorresistencia
Transistor bipolar
Potencimetro
Cables
Pantalla LCD
Teclado hexadecimal
Ordenador personal

3. Pic 16F84

El PIC16F84 es un microcontrolador de la familia PIC, fabricada por la empresa
Microchip. Se trata de un microcontrolador de 8 bits y 18 pines, que a dems consta
internamente de:
Memoria Flash de programa (1K x 14).
Memoria EEPROM de datos (64 x 8).
Memoria RAM (68 registros x 8).
Un temporizador/contador (timer de 8 bits).
Un divisor de frecuencia.

Diseo de Sist. Basados en Proc. - 2 - Proyecto de Curso
Caja de Seguridad
Varios puertos de entrada-salida (13 pines en dos puertos, 5 pines el puerto A y
8 pines el puerto B).

Otras caractersticas son:
Manejo de interrupciones (de 4 fuentes).
Perro guardin (watchdog).
Bajo consumo.
Frecuencia de reloj externa mxima 10MHz. (Hasta 20MHz en nuevas
versiones). La frecuencia de reloj interna es un cuarto de la externa, lo que
significa que con un reloj de 20Mhz, el reloj interno sera de 5Mhz y as pues se
ejecutan 5 Millones de Instrucciones por Segundo (5 MIPS)
No posee conversores analgicos-digital ni digital-analgicos integrados.
Pipe-line de 2 etapas, 1 para bsqueda de instruccin y otra para la ejecucin de
la instruccin (los saltos ocupan un ciclo ms).
Repertorio de instrucciones reducido (RISC), con tan solo 30 instrucciones
distintas.
4 tipos distintos de instrucciones, orientadas a byte, orientadas a bit, operacin
entre registros, de salto.
En los ltimos aos se ha popularizado el uso de este microcontrolador debido a
su bajo coste y tamao. Se ha usado en numerosas aplicaciones, que van desde los
automviles a decodificadores de televisin.
Puede ser programado tanto en lenguaje ensamblador como en Basic y
principalmente en C, para el que existen numerosos compiladores.




Diseo de Sist. Basados en Proc. - 3 - Proyecto de Curso
Caja de Seguridad
Estructura de los pics de la familia 16fX:


4. Conversor analgico/digital y digital/analgico PCF8591
Se trata de un circuito con cuatro canales analgicos de entrada, uno de salida,
interface con el bus I
2
C tensin de alimentacin nica. Dispone de tres lneas de
direccionamiento por hardware, A0-A2, que permite conectar 8 chips idnticos sobre el
mismo bus.
Caractersticas:
Tensin de alimentacin nica de 2.5 a 6V.
Bajo consumo.
Interface para el bus I
2
C.
Tres lneas de direccionamiento por hardware
Cuatro entradas analgicas programables como entradas individuales o
diferenciales.

Diseo de Sist. Basados en Proc. - 4 - Proyecto de Curso
Caja de Seguridad
Una salida analgica.
El rango de la tensin analgica va desde 0V hasta Vdd.

Diagrama estructural:

Diagrama de pines:



Pin 1-4 (Seal AIN0-AIN4):
entradas analgicas para el ADC.

Pin 5-7 (Seal A0-A2): lneas
de direccionamiento por hardware.

Pin 8 (Seal Vss): negativo de
alimentacin.

Pin 9 (Seal SDA): lnea de
datos para el bus I
2
C.

Pin 10(Seal SCL): lnea de
reloj del bus I
2
C.


Diseo de Sist. Basados en Proc. - 5 - Proyecto de Curso
Caja de Seguridad
Pin 11(Seal OSC): E/S del oscilador.
Pin 12(Seal EXT): seleccin del oscilador: 0 interno; 1 externo.
Pin 13(Seal AGND): tierra de la seal analgica.
Pin 14(Seal Vref): entrada de la tensin de referencia.
Pin 15(Seal Aout): Salida analgica del DAC.
Pin 16(Seal Vdd): Positivo de alimentacin.
Direccionamiento:
El dispositivo se activa cuando, a travs del bus I
2
C, se le enva el byte de
direccionamiento con la direccin vlida. Dicha direccin consta de una parte fija y otra
programable. La parte programable se establece mediante los pines A0-A2, ponindolos
al nivel lgico deseado. El byte de direccin se enva siempre tras la condicin de inicio
y, su ltimo bit, indica si se realizar una operacin de lectura o de escritura.
El byte de control:
El segundo byte enviado a dispositivo se guarda en el registro de control del
mismo y realiza diferentes funciones de control. Los cuatro bits de ms peso se usan
para activar la salida analgica y programar las entradas analgicas. Los cuatro bits de
menos peso seleccionan uno de los cuatros canales analgicos de entrada y si el nmero
de canal se autoincrementar al final de cada conversin.
Durante el reset del dispositivo, producido al conectar la tensin por
alimentacin (POR), todos los bits de este registro se ponen a 0. La salida analgica
queda en alta impedancia.
Conversin digital/analgica:
El tercer byte enviado al dispositivo por el master se almacena en el circuito
convertidor analgico/digital y se convierte a su tensin analgica correspondiente. El
convertidor consta de un divisor de tensin resistivo de 256 elementos al que se aplica
una tensin externa de referencia. Un decodificador selecciona uno de esos elementos
en funcin del cdigo binario, obtenindose as una tensin analgica equivalente.

Diseo de Sist. Basados en Proc. - 6 - Proyecto de Curso
Caja de Seguridad
Dicha tensin se aplica a un amplificador de ganancia que puede activarse o no
segn el bit 6 del byte de control y, finalmente, se obtiene por el pin Aout en el exterior.
Esta tensin de salida se mantiene estable hasta una prxima conversin.
El convertidor digital/analgico se emplea tambin durante la conversin
analgica/digital mediante aproximaciones sucesivas.
Conversin analgica/digital:
El convertidor analgico/digital emplea la tcnica de conversin por
aproximaciones sucesivas. El convertidor analgico/digital as como el comparador de
alta ganancia se emplean durante un ciclo de conversin.
Este se inicia siempre poniendo la direccin del dispositivo, en nuestra placa
0x9_ y el bit de lectura. Tras recibirse el bit ACK enviado por el esclavo se enva el
byte de la conversin previa al tiempo que se toma una muestra del canal seleccionado
para una nueva conversin. Finalizada esta se obtiene el cdigo binario de 8 bits y se
deposita en el registro ADC para su posterior envo.
En caso de emplear entradas diferenciales el resultado se presenta en
complemento a 2 y se transmite. Si est activado el bit 2 del registro de control
(autoincremento) se selecciona el siguiente canal automticamente. El primer byte que
transmite el dispositivo durante un ciclo de lectura contiene el resultado de la
conversin previa. Tras la condicin POR el primer byte ledo corresponde al valor 80h.


Diseo de Sist. Basados en Proc. - 7 - Proyecto de Curso
Caja de Seguridad
5. Pantalla LCD:

Este bloque est destinado a una breve descripcin del funcionamiento del
mdulo LCD incluido en el sistema de evaluacin PIC Trainer.

Se trata de un mdulo capaz de representar dos lneas de diecisis caracteres
cada una. A travs de 8 lneas de datos se le enva el carcter ASCII que se desea
visualizar as como ciertos cdigos de control que permiten realizar diferentes efectos
de visualizacin. Igualmente mediante estas lneas de datos el mdulo devuelve
informacin de su estado interno.

Con otras tres seales adicionales se controla el flujo de informacin entre el
mdulo LCD y el equipo informtico que lo gestiona.

A continuacin se presenta la descripcin de seales empleadas por el mdulo
LCD as como el nmero de patilla a la que corresponden.







Pin 1(Seal Vss): Patilla de tierra de alimentacin.

Pin 2(Seal Vdd): Patilla de alimentacin de +5V.

Pin 3(Seal Vo): Patilla de contraste de cristal lquido. Normalmente se conecta
a un potencimetro a travs del cual se aplica una tensin variable entre 0 y +5V
que permite regular el contraste del cristal lquido.

Pin 4(Seal RS): Seleccin del registro de control/registro de datos:

RS=0 Seleccin del registro de control.
RS=1 Seleccin del registro de datos.



Diseo de Sist. Basados en Proc. - 8 - Proyecto de Curso
Caja de Seguridad
Pin 5(Seal R/W): Seal de lectura/escritura

R/W=0 El mdulo LCD es escrito.
R/W=1 El mdulo LCD es ledo.

Pin 6(Seal E): Seal de activacin del mdulo LCD:

E=0 Mdulo desconectado.
E=1 Mdulo conectado.

Pines 7-14(Seales D0-D7): Bus de datos bidireccional. A travs de estas lneas
se realiza la transferencia de informacin entre el mdulo LCD y el sistema
informtico que lo gestiona.

Juego de Instrucciones.

En el uso del mdulo LCD se ha utilizado una librera que consta de varias
funciones con las que se configuran diferentes opciones de trabajo del mdulo LCD y se
realiza la comunicacin con dicho mdulo.

La interfaz que pone a nuestra disposicin esta librera se detalla a continuacin:

LCD_INI: inicializa el display. Imprescindible ejecutar antes de usar el resto de
rutinas. No lleva parmetros.

DISPLAY_CONF: inicializa el display a dos lneas, cursor desactivado y
autoincremento.

BORRA_Y_HOME: borra la pantalla y vuelve al punto de entrada a cero.

LCD_REG: Enva como comando el contenido de w.

LCD_DATO: Enva como dato el contenido de w.

Estas rutinas modifican el estado de los puertos y usan dos registros de memoria.


Diseo de Sist. Basados en Proc. - 9 - Proyecto de Curso
Caja de Seguridad
X
Y Y Y Y
5V
X
X
X
6. Teclado hexadecimal
















Se trata de una matriz de pulsadores donde las columnas estn en pulled-up a
una tensin de referencia, X son las seales configuradas como salida e Y estn
configuradas como entradas.

Los pulsadores se encuentran en las intersecciones los cuales ponen en contacto
su fila con la columna correspondiente.














Tal como se muestra en la figura anterior, las columnas reciben toda la tensin
de referencia. El estado de las entradas Y es de un 1 lgico.

Al pulsar una tecla se establece un puente entre la fila y la columna. Si la X
correspondiente est a tierra toda la corriente derivar hacia ella quedando la entrada Y
X

X

X

X
1 1 1 1
5
V

Diseo de Sist. Basados en Proc. - 10 - Proyecto de Curso
Caja de Seguridad
respectiva en contacto con tierra. Cuando se ha detectado una entrada activa, se vuelven
a desactivar todas las salidas y se procede a explorar el teclado fila a fila.

Al detectar la columna ya tenemos identificada la tecla pulsada con un cdigo
de tecla: XXXXYYYY. Este cdigo de tecla debe luego traducirse al cdigo del
carcter

Al igual que con el mdulo LCD hemos utilizado una librera. Se utilizaron las
siguientes funciones:

Key_Scan: explora el teclado y devuelve el cdigo de tecla u 80h si no se ha
pulsado ninguna tecla.

Cods_Tecla: traduce el cdigo de tecla a cdigo binario.

Ambas funciones se apoya en el uso de unos registros:

Tecla: registro en el que Key_Scan devuelve el cdigo de teclado ledo. Es
tambin el parmetro de entrada a Cods_Tecla.

POS: registro en el que Cods_Tecla devuelve el cdigo binario de la tecla leda.








Diseo de Sist. Basados en Proc. - 11 - Proyecto de Curso
Caja de Seguridad
7. Bus I
2
C

En algunas aplicaciones, especialmente las que emplean microcontroladores
mono-chip, se deben establecer ciertos criterios:

Cierto tipo de microcontroladores no son ampliables desde el exterior por
lo que la aplicacin se tiene que ceir al tipo y cantidad de elementos que
contenga en su interior.

Normalmente un sistema completo adems del microcontrolador necesita
de otros circuitos perifricos.

El coste de conexin de todos estos perifricos con el microcontrolador
debe reducirse al mnimo.

Normalmente la aplicacin no requiere una gran velocidad de
transferencia entre el microcontrolador y los distintos dispositivos.

La eficacia general del sistema depende de la versatilidad de los
dispositivos conectados al mismo.

Estos criterios se pueden implementar con una estructura de bus serie. Este tipo
de bus no puede alcanzar velocidades similares a las conseguidas con una estructura del
bus paralelo, pero requiere mucho menos cableado y el hardware es mucho ms
sencillo.

Los distintos dispositivos conectados al bus serie deben comunicarse entre s
mediante un protocolo que evite el bloqueo de la informacin y garantice la
comunicacin entre todos ellos.

El sistema debe ser independiente de los dispositivos conectados al bus, con
objeto de poder realizar futuras ampliaciones y/o modificaciones. Mediante el adecuado
protocolo se decide qu dispositivo se hace cargo del bus y cundo.

Todos estos conceptos se contemplan en las especificaciones del bus I
2
C.

El I
2
C es un bus compuesto por dos lneas, SDA para datos y SCL de reloj,
transportan la informacin entre los diferentes dispositivos conectados al bus. Cada

Diseo de Sist. Basados en Proc. - 12 - Proyecto de Curso
Caja de Seguridad
dispositivo se identifica por una nica direccin y puede transmitir o recibir
dependiendo de la operacin que se vaya a realizar.

Los dispositivos pueden clasificarse en master o slave. El master es el que inicia
la transferencia de datos y genera una seal de reloj. Cualquiera de los dispositivos
direccionados por un master se considera un slave.

El I
2
C es un bus multimaster. Puede haber ms de un master conectado y
controlando el bus. Normalmente se tratan de microcontroladores o microcomputadores.

Supongamos que en un momento dado el microcontrolador A acta como
master:

1.- Enva informacin al B:

a) A, emisor, direcciona a B
b) A, emisor, enva dato a B, receptor
c) A termina la transferencia

2.- Recepcin desde el B:

a) A, emisor, direcciona a B
b) A, receptor, recibe el dato desde el B, transmisor.
c) A, termina la transferencia.

Esta configuracin puede no ser permanente. En otro momento puede ser el B
quien acte de master. Todo depende la direccin del dato a transferir en un momento
dado.

Dada la posibilidad de que existieran varios masters, podra ocurrir que ms de
uno inicie la transferencia en un mismo instante de tiempo. Para evitar el caos que
pueda provocar esta situacin se ha desarrollado un sistema de arbitraje del bus. El
procedimiento consiste en una conexin tipo AND entre todos los dispositivos
conectados al bus.

Cuando uno o ms masters colocan informacin en la lnea SDA, verifican si el
bit que ellos sacan coincide con el nivel lgico de dicha lnea. Si un master saca un 1
pero la lnea SDA est a 0 coincidiendo con un pulso de reloj, pierde la posesin del bus

Diseo de Sist. Basados en Proc. - 13 - Proyecto de Curso
Caja de Seguridad
cancelando desde ese momento la transmisin. El nivel lgico 0 (bit dominante)
presente en la lnea SDA proceder de un master.

Las seales de reloj durante el arbitraje del bus son una combinacin entre las
seales de CLOCK de los distintos masters conectadas entre s a la lnea SCL mediante
una conexin tipo AND.

Direccionamiento:

El proceso de direccionamiento del bus I
2
C consiste en que el primer byte que
enva el master tras la condicin START es un cdigo que determina y selecciona a un
determinado slave. Existe una excepcin en el cdigo denominado llamadas
generales. Cuando un master realiza una llamada general (cdigo 0000 000) todos
los slaves existentes deben responder con el bit ACK. Puede darse el caso de
dispositivos que ignoren esta llamada. El siguiente byte tras la misma indicar la
operacin a realizar.

Definicin del primer byte

Los siete primeros bits de ms del primer byte se emplean para direccional a un
determinado slave. El de menos peso, el octavo, determina si se realizar una operacin
de lectura o de escritura(R/W) sobre el slave diseccionado.
Cuando el master enva una direccin por el bus, todos los slaves conectados la
comparan con la suya propia interna. Aquel que coincida se considerar seleccionado
por el master.

De los siete bits que forman una direccin hay una parte que son fijos y ya estn
definidos internamente por el propio dispositivo slave, y por otra parte, que son
programables. De esta forma es posible conectar al mismo bus dispositivos idnticos
cuya parte fija de direccin es la misma pero la programable es diferente.

El comit I
2
C creado al efecto coordina las direcciones asignadas a los diferentes
dispositivos. La direccin 1111 111 est reservada como extensin de direccin en el
que el proceso de direccionamiento de un dispositivo continua en los siguientes bytes
transferidos por el master. La direccin 1111 XXX est reservada tambin con

Diseo de Sist. Basados en Proc. - 14 - Proyecto de Curso
Caja de Seguridad
propsitos de direccionamientos extendidos y la emplean en ciertos dispositivos que
tienen diez bits de diseccionado. La direccin 0000 XXX est reservada para un grupo
especial de dispositivos.

8. Circuitos de acondicionamiento.

Se han realizado dos circuitos de acondicionamiento distintos para la utilizacin
de un altavoz y una fotorresistencia.

Fotorresistencia.

Este tipo de sensores se caracterizan por variar su resistencia en funcin de la
magnitud fsica medida, en este caso la luz. Las fotorresistencias son semiconductores
que varan su resistencia al incidir radiacin ptica (longitud de onda entre 10nm y
1mm) en ellos.

En general la conductividad de cualquier material depende del nmero de
portadores que posee en la banda de conduccin. En el caso de un semiconductor a baja
temperatura la mayora de los portadores se encuentran en la banda de valencia y a
medida que aumenta sta se produce un salto a la de conduccin, y en el caso de que se
encuentre dopado el salto se realiza con menor aporte de energa. Aparte del calor la
energa puede ser por radiacin ptica o por la tensin elctrica.

Las aplicaciones de las fotorresistencias se pueden encuadrar en dos grupos. Una
primera aplicacin donde la precisin no es alta e interesa bajos costos pueden ser la
medicin de brillo y luminosidad en una televisin, control de iluminacin en interiores,
deteccin de fuego o ajuste en cmaras fotogrficas. Otro tipo de aplicaciones requieren
de mayor precisin como puede ser la deteccin de posicin y/o presencia o la medicin
de nivel en un depsito.

En nuestro caso hemos utilizado una fotorresistencia por radiacin ptica, es
decir cuanto ms incidencia de luz sobre la misma, menor ser la resistencia medida.
Adems no requeramos una gran precisin por tanto ha bastado con establecer un rango

Diseo de Sist. Basados en Proc. - 15 - Proyecto de Curso
Caja de Seguridad
de lectura para la caja cerrada y cualquier valor que se salga de ese rango supondr que
la caja se encuentra abierta.

El circuito de acondicionamiento realizado para el sensor es el siguiente:



La medicin de la tensin a extremos de la fotorresistencia oscila
aproximadamente entre 3.5 y 4.5 V, con caja abierta y cerrada, respectivamente.

Desde los nodos sealados en el circuito anterior sale el cableado que conecta el
circuito con nuestra placa Pic Trainer, concretamente con el conversor
analgico/digital. Del nodo A sale la lectura del sensor que se conecta con la entrada
An0, del nodo B se conecta a Vref, que ser la tensin de referencia para la lectura, y
del nodo C, salen dos cables que se conectan a las tierras.


Altavoz.

El altavoz utilizado ha sido uno de 8 de resistencia y 5 W de potencia. Para su
uso ha sido necesario un circuito de proteccin para nuestro conversor analgico/digital,
puesto que el altavoz al aportar una resistencia tan baja podra suponer una elevada
corriente de salida desde el conversor, lo que podra quemar el mismo.

Por tanto se ha montado el circuito mostrado a continuacin:











Diseo de Sist. Basados en Proc. - 16 - Proyecto de Curso
Caja de Seguridad
La tierra del circuito se ha conectado a la tierra del conversor y la tensin Vcc se
corresponde con la salida analgica que se obtendr como resultado de la conversin. El
transistor ser el encargado de derivar la corriente cuando el altavoz no se encuentre
funcionando, cuando este se encuentre activo la corriente pasar por el altavoz y el
transistor hasta tierra. As el transistor funciona como un interruptor protegiendo
nuestro conversor.

9. Programa de control.

El programa como se ha dicho anterior debe imprimir un mensaje por pantalla
pidiendo que se introduzca un password que ser el que permita abrir la caja, dicho
password se habr guardado previamente en el EEPROM del PIC. En cada pulsacin de
tecla se comprueba el estado de un sensor de luz que se encuentra en el interior de la
caja, si la caja se detecta como abierta sin haber introducido el password correcto se
enva un sonido de alarma por le altavoz. Si la contrasea es correcta permite abrir la
caja (mostrando su correspondiente mensaje en el LCD) y si no es correcta se vuelve a
pedir la contrasea.

9.1. Pantalla LCD

Para escribir en la LCD se usa la librera lcd.lib, que provee las operacions
LCD_DATO y LCD_COD,.
La poder escribir algo en la pantalla LCD lo primero que hay que hacer es
habilitar la pantalla, para ello se debe dar un pulso en la lnea 2 del puerto A, que est
conectada a la lnea E de la pantalla (lnea para habilitar y deshabilitar la pantalla). Para
deshabilitar la pantalla simplemente se pone esta lnea a nivel bajo.
Un ejemplo de habilitacin y deshabilitacin de la pantalla es el siguiente:

bsf PORTA,2
nop
bcf PORTA,2
;operaciones con la pantalla
bcf PORTA,2


Diseo de Sist. Basados en Proc. - 17 - Proyecto de Curso
Caja de Seguridad
Una vez con la pantalla habilitada basta con cargar en el W el carcter a mostrar
en la pantalla (su cdigo ASCII correspondiente), y llamar a la funcin LCD_DATO.
Ejemplo de escritura de una A en la LCD:

movlw 0x41
call LCD_DATO

9.2. Teclado

Para trabajar con el teclado hexadecimal se hace uso de la librera tecla.lib que
se ha explicado con anterioridad en el apartado 5. Dicha librera nos proporciona dos
procedimientos, Key_Scan y Cods_Tecla.
Para leer de teclado se utiliza Key_Scan, que devuelte el cdigo de la tecla que
est pulsada en ese momento (codificada en cdigo de teclado) y sino hay ninguna tecla
pulsada devuelve 80h. Por eso el modo habitual te leer es el siguente:

Leer call Key_Scan
movfw Tecla
sublw 80h
btfsc STATUS,Z
goto Leer

Por lo que el programa se quedara en un bucle hasta que se pulse alguna tecla.

Como se ha dicho Key_Scan devuelve la tecla en cdigo de teclado, por lo que
existe la funcin Cods_Tecla que te convierte este cdigo a su nmero hexadecimal
correspondiente para as poder representarlo en la pantalla o poder trabajar mejor con el.

9.3 EEPROM
Se ha decidido guardar la contrasea en la EEPROM ya que es una memoria no
voltil y se puede quedar guardada incluso una vez se apague el PIC. El proceso de
guardar por lo tanto puede ir en el mismo programa que el resto de operaciones o puede
ser un programa que se ejecute previamente en el PIC y se vuelva a ejecutar cada vez
que se quiera cambiar la contrasea.

Diseo de Sist. Basados en Proc. - 18 - Proyecto de Curso
Caja de Seguridad
9.3.1. Escritura
Hemos decidido almacenar la contrasea en la EEPROM, as se podra guardar
antes de ejecutar el programa de comprobacin de contrasea y estar siempre ah. La
forma de escribir en la EEPROM es la siguiente:
Escribir_EE
movlw 0x31
movwf EEDATA
movlw 0x02
movwf EEADR
bsf STATUS,RP0
bsf EECON1,2
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,1
bcf EECON1,2
espera btfss EECON1,4
goto espera
bcf EECON1,4
bcf STATUS,RP0
return

Como se puede observar se carga el dato a guarda, luego la direccin y
comienza el proceso de escritura. Una vez se ha realizado la operacin de guardar hay
que esperar a que la EEPROM termine de guardar, el bit 4 de EECON1 nos lo notifica.
Este procedimiento se realiza cuatro veces, uno por cada dgito de la contrasea.
9.3.2. Lectura
Como ya se ha dicho la contrasea va a estar guardada en la EEPROM por lo
que hay que leerla, el proceso de lectura es como sigue:
leerEE
movlw 0x00
movwf EEADR
bsf STATUS,RP0
bsf EECON1,0
bcf STATUS,RP0
movfw EEDATA
movwf dEE1
return

Donde primero que direcciona y luego se lee.

Diseo de Sist. Basados en Proc. - 19 - Proyecto de Curso
Caja de Seguridad
9.4. Lectura sensor
La caja dispone de un sensor de luz en su interior (fotorresistencia) que
usaremos para saber si la caja se ha abierto sin tener el permiso para ello.
Para poder leer el valor de la salida del sensor en cada momento hay que hacer
uso de un conversor A/D (analgico/digital). En la placa que tenemos montada para
acceder a dicho conversor hay que hacer usos el bus I2C, ya que el PIC 16F84 no posee
conversor A/D.
Para trabajar con el bus I2C para recibir datos hay que direccionar el dispositivo
del que se quiera recibir y luego recibir. Una recepcin del conversor A/D sera como
sigue:
clrf BUS_STATE
movlw 0x91
movwf DIRECCION
movlw 0x40
call ENVIAR_1
call RECIBIR_1
call RECIBIR_1

Lo primero que se hace es borrar el BUS_STATE, luego se pone la direccin del
conversor en modo lectura. Lo siguiente es enviarle un byte de configuracin, que est
compuesto de la siguiente forma :


Por lo que el byte de control enviado es 0x40. Despus ya se puede leer el estado
del sensor, pero hay que tener en cuenta que el conversor no da un dato fiable hasta la
segunda lectura, por ello hay que leer primero dos veces.
Hemos decidido que cada vez que se lea el sensor se hagan cuatro lecturas del
estado del mismo y luego la media. Para ello cada lectura se desplaza dos veces a la
X 1 0 0 0 0 0 0
Seleccindel canal 0
Noautoincrementodecanales
Canales independientes
Salida analgica activa

Diseo de Sist. Basados en Proc. - 20 - Proyecto de Curso
Caja de Seguridad
derecha (dividirlo por cuatro) y luego se suman, as tendramos la media de las cuatro
lecturas.
Una vez tenemos el valor medio de las lecturas del sensor nos quedamos con la
parte baja del byte (ya que comprobamos que no variaba significativamente el valor de
caja cerrada a caja abierta) y comparamos con 5, si est por debajo la caja estar abierta
y si est por encima est cerrada.
9.5. Emitir sonido
Cuando la caja es abierta sin haber introducido la contrasea correctamente el
altavoz debe emitir un sonido de alarma. Para emitir dicho sonido hacemos uso del
conversor D/A a travs del bus I2C. Dicho conversor deja en su salida el ltimo dato
convertido, por ello para emitir un sonido que no sea un pitido continuo hay que
cambiar cada cierto tiempo el dato en el conversor.
La forma de enviar un dato al conversor es la siguiente:
clrf BUS_STATE
movlw 0x90
movwf DIRECCION
movlw 0x40
movwf DATO
call ENVIAR_1
movlw 0xEE
movwf DATO
call ENVIAR_1

Como en el caso de la lectura lo primero que se hace es borrar el BUS_STATE,
luego se direcciona el dispositivo, en este caso como en el anterior se direcciona el
conversor, pero en este caso en modo escritura. Luego se enva el byte de control, que
es el mismo que el que explic en la lectura del sensor. Una vez hecho esto ya se puede
mandar el dato a convertir.
9.6. Retardo
Para poder detectar las pulsaciones de teclado sin problema es necesario que
entre una pulsacin y otra haya un pequeo retardo para no coger dos veces la pulsacin
de la primera tecla. A continuacin se muestra el cdigo que implementa dicho retardo:

retardo movlw 0c1h
movwf ret1
movwf ret2

Diseo de Sist. Basados en Proc. - 21 - Proyecto de Curso
Caja de Seguridad
movlw 01h
movwf ret3
salto1x
decfsz ret1,1
goto salto1x
goto recga1x
salto2x
decfsz ret2,1
goto salto1x
goto recga2x
salto3x
decfsz ret3,1
goto salto1x
return
recga1x
movlw 0c1h
movwf ret1
goto salto2x
recga2x
movlw 0c1h
movwf ret2
goto salto3x
return

Es un retardo de aproximadamente 300 ms, esto se puede comprobar haciendo los
siguientes clculos.

0c1h=193
(decfsz= 1 seg) + (goto= 2 seg)= 3 seg
3 x 193 = 579
579 x 579 = 335241 seg

9.7. Flujo del programa
El programa lo primero que hace es escribir en la EEPROM la contrasea que se
va a usar (en esta versin del programa est aqu, pero tambin se puede hacer en un
programa a parte que se ejecute antes de este). Lo siguiente es escribir en la LCD el
mensaje para que el usuario sepa que tiene que introducir la contrasea. Despus de esto
nos quedamos esperando por una pulsacin de teclado, que ser el primer carcter de la
contrasea. Despus de esta pulsacin se comprueba el estado del sensor, si se detecta
que la puerta est abierta suena la alarma, sino se pide el siguiente carcter (as con los
cuatro caracteres de la contrasea. Cuando ya se ha introducido la contrasea al
completo se comprueba si es correcta o no, para ello previamente ha de leerse la

Diseo de Sist. Basados en Proc. - 22 - Proyecto de Curso
Caja de Seguridad
contrasea de la EEPROM, y si es correcta se imprime por pantalla un mensaje
notificando que se puede abrir la caja y se espera por una pulsacin de teclado que
notifique que ya se ha terminado de usar la caja.
9.7.1. Flujograma





Mensaje de
Password:
Esperar por
pulsacin de tecla
Comprobar estado
del sensor
La caja esta
abierta?
Reproducir
sonido
Comprobar si la
letra es correcta
Se ha introducido la
contrasea completa?
La contrasea
es correcta?
Mensaje de
Caja Abierta
Esperar por
pulsacin de tecla

Diseo de Sist. Basados en Proc. - 23 - Proyecto de Curso
Caja de Seguridad
10. Problemas y mejoras

Durante el desarrollo de este proyecto han surgido varios contratiempos que
creemos interesante comentar para que sean tenidos en cuenta en futuras ampliaciones o
cambios en el cdigo.
Primeramente un punto a tener muy en cuenta, y que se refleja claramente en el
programa realizado, es la necesidad de que la pantalla LCD se encuentre deshabilitada
cuando se utiliza el teclado. Esto es debido a que interfieren el uno con el otro si se
encontrara habilitado el mdulo LCD cuando se escribe con el teclado. Es por esto que
durante la realizacin del cdigo se ha decidido mantener la pantalla desactivada en
todo momento, siendo activada nicamente cuando se realiza alguna escritura en el
LCD.
Otro factor importante es la lectura del sensor de luz colocado dentro de la caja
de seguridad. Si pasamos de tener la caja cerrada a abierta la alarma salta fcilmente, en
caso de que proceda, sin embargo al contrario se tarda algn tiempo en volver a un
estado en el que la alarma no se dispare. Esto es debido a que la fotorresistencia tiene un
tiempo de respuesta algo bajo, segn pruebas empricas es mayor cuando se decrementa
la luminosidad, y por tanto existe un tiempo de estabilizacin en esta lectura. Adems
las lecturas de luminosidad entre caja cerrada y abierta son bastante cercanas y muy
dependientes de la condicin de luz ambiente, lo que hace que el limite vare en ciertas
ocasiones, a pesar de que se han tomado varias lecturas y realizado un promediado para
cada comprobacin del sensor.
Una posible mejora en el programa presentado consistira en que la lectura del
sensor fuera realizada desde una rutina de servicio correspondiente a una excepcin. De
esta forma se asignara una interrupcin para la lectura del sensor que controlada con un
timer interrumpiera ocasionalmente al programa principal, para de este modo poder leer
el sensor en cualquier momento de la ejecucin del programa, puesto que actualmente
solo se testea entre pulsaciones de teclado. Esto es debido a que el teclado interfiere con
el conversor analgico/digital en el uso del bus.


Diseo de Sist. Basados en Proc. - 24 - Proyecto de Curso
Caja de Seguridad
11. Conclusiones

Los objetivos planteados han sido finalmente realizados en el proyecto. Se ha
efectuado un correcto uso de la pantalla LCD y del teclado matricial de la placa PIC
Trainer , adems se ha utilizado, como se haba propuesto en los objetivos, el conversor
digital analgico para generar una alarma mediante un altavoz, logrando un sonido que
presenta una variacin de frecuencia, emitiendo as dos tonos distintos, ms similar a
una alarma que un pitido continuado. Por otro lado el conversor tambin ha sido usado
en la lectura del sensor, en este caso de analgico a digital, salvando los contratiempos
que ha podido producir la variacin de la fotorresistencia. Las transferencias de datos
entre estos mdulos se han realizado por medio del bus I
2
C.
Por tanto en el proyecto se utilizan variedad de mdulos que interactan entre s,
gobernados por el PIC16F84.






Diseo de Sist. Basados en Proc. - 25 - Proyecto de Curso
Caja de Seguridad
Apndice. Cdigo fuente
List p=16f84
include "P16F84.INC"
include "lcd.inc"
include "tecla.inc"
include "i2c.inc"

principal UDATA
algo1 res 1
algo2 res 1
algo3 res 1
algo4 res 1
sig res 1
index res 1
tmp1 res 1
tmp2 res 1
cont res 1
dato res 1
leido res 1
dato1 res 1
dato2 res 1
dato3 res 1
dato4 res 1
correcto res 1
dEE1 res 1
dEE2 res 1
dEE3 res 1
dEE4 res 1
ret1 res 1
ret2 res 1
ret3 res 1
nombrete res 1
b1 res 1
b2 res 1
b3 res 1
contador res 1
nast res 1
temp res 1
contad res 1
rango res 1
lecsensor res 1
lecsensor1 res 1
lecsensor2 res 1
lecsensor3 res 1
lecsensor4 res 1

inic code 0x00
goto Inicio

Diseo de Sist. Basados en Proc. - 26 - Proyecto de Curso
Caja de Seguridad

main code

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Precedimiento que escribe por pantalla "Password:"
mensaje call DISPLAY_CONF
call BORRA_Y_HOME
bsf PORTA,2
movlw 0x50
call LCD_DATO
movlw 0x41
call LCD_DATO
movlw 0x53
call LCD_DATO
movlw 0x53
call LCD_DATO
movlw 0x57
call LCD_DATO
movlw 0x4f
call LCD_DATO
movlw 0x52
call LCD_DATO
movlw 0x44
call LCD_DATO
movlw 0x3a
call LCD_DATO
movlw 0x0b
call LCD_DATO
movfw nast
movwf temp
ponerast decfsz temp,1
goto ast
goto salirm
ast movlw 0x2a
call LCD_DATO
goto ponerast
salirm
bcf PORTA,2
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Precedimiento que escribe por pantalla "Password:"
cajaabierta call DISPLAY_CONF
call BORRA_Y_HOME
movlw 0x43
call LCD_DATO
movlw 0x41
call LCD_DATO

Diseo de Sist. Basados en Proc. - 27 - Proyecto de Curso
Caja de Seguridad
movlw 0x4a
call LCD_DATO
movlw 0x41
call LCD_DATO
movlw 0x20
call LCD_DATO
movlw 0x41
call LCD_DATO
movlw 0x42
call LCD_DATO
movlw 0x49
call LCD_DATO
movlw 0x45
call LCD_DATO
movlw 0x52
call LCD_DATO
movlw 0x54
call LCD_DATO
movlw 0x41
call LCD_DATO
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Precedimiento que escribe por pantalla "Password:"
menalarma call DISPLAY_CONF
call BORRA_Y_HOME
bsf PORTA,2
nop
bcf PORTA,2
movlw 0x41
call LCD_DATO
movlw 0x4c
call LCD_DATO
movlw 0x41
call LCD_DATO
movlw 0x52
call LCD_DATO
movlw 0x4d
call LCD_DATO
movlw 0x41
call LCD_DATO
movlw 0x21
call LCD_DATO
movlw 0x21
call LCD_DATO
movlw 0x21
call LCD_DATO
movlw 0x21

Diseo de Sist. Basados en Proc. - 28 - Proyecto de Curso
Caja de Seguridad
call LCD_DATO
bcf PORTA,2
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Graba un dato en la EEPROM
grabarEE
movlw 0x31 ;;se carga el dato (1)
movwf EEDATA
movlw 0x00 ;direccion
movwf EEADR
call Escribir_EE


movlw 0x32 ;;se carga el dato (2)
movwf EEDATA
movlw 0x01 ;direccion
movwf EEADR
call Escribir_EE

movlw 0x33 ;;se carga el dato (3)
movwf EEDATA
movlw 0x02 ;direccion
movwf EEADR
call Escribir_EE

movlw 0x34 ;;se carga el dato (4)
movwf EEDATA
movlw 0x03 ;direccion
movwf EEADR
call Escribir_EE

return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Escribir_EE
bsf STATUS,RP0 ;se selecciona el banco 1
bsf EECON1,2
movlw 0x55 ;secuencia de 5 pasos para ecribir en la flash
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,1 ;inicia la escritura
bcf EECON1,2 ;deshabilita escritura en la flash
espera btfss EECON1,4
goto espera ;bucle hasta finalizar escritura
bcf EECON1,4

Diseo de Sist. Basados en Proc. - 29 - Proyecto de Curso
Caja de Seguridad
bcf STATUS,RP0 ;banco 0
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee la contrasea completa de la EEPROM

leercon
call leerdee1
call leerdee2
call leerdee3
call leerdee4
return
leerdee1
movlw 0x00
movwf EEADR
bsf STATUS,RP0 ;banco 1
bsf EECON1,0
bcf STATUS,RP0 ;banco 0
movfw EEDATA
movwf dEE1 ;leo fah de la eeprom y lo guardo en dEE1
return

leerdee2
movlw 0x01
movwf EEADR
bsf STATUS,RP0 ;banco 1
bsf EECON1,0x00
bcf STATUS,RP0 ;banco 0
movfw EEDATA
movwf dEE2 ;leo fah de la eeprom y lo guardo en dEE1
return
leerdee3
movlw 0x02
movwf EEADR
bsf STATUS,RP0 ;banco 1
bsf EECON1,0x00
bcf STATUS,RP0 ;banco 0
movfw EEDATA
movwf dEE3 ;leo fah de la eeprom y lo guardo en dEE1
return
leerdee4
movlw 0x03
movwf EEADR
bsf STATUS,RP0 ;banco 1
bsf EECON1,0x00
bcf STATUS,RP0 ;banco 0
movfw EEDATA
movwf dEE4 ;leo fah de la eeprom y lo guardo en dEE1
return

Diseo de Sist. Basados en Proc. - 30 - Proyecto de Curso
Caja de Seguridad

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee un dato de teclado y lo pone en w
leer_teclado decfsz contad
goto leertecla
;call comprobar_sensor

movlw 0x20
movwf contad
goto leer_teclado


leertecla call retardo
call Key_Scan ;;Leemos una tecla y comprobamos que se ha
pulsado alguna
movfw Tecla
sublw 80h
btfsc STATUS,Z
goto leer_teclado
call Cods_Tecla
movfw POS
addlw 0x30 ;;se pasa al cod de pantalla

;bsf PORTA,2
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee de teclado y lo guarda en el registro dato1
leercnt call leer_teclado
movwf dato1
call retardo
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee de teclado y lo guarda en el registro dato1
leer1 call leer_teclado
movwf dato1
incf nast,1
call retardo
call mensaje
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee de teclado y lo guarda en el registro dato2


Diseo de Sist. Basados en Proc. - 31 - Proyecto de Curso
Caja de Seguridad

leer2 call leer_teclado
movwf dato2
incf nast,1
call retardo
call mensaje
return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee de teclado y lo guarda en el registro dato3
leer3 call leer_teclado
movwf dato3
incf nast,1
call retardo
call mensaje
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee de teclado y lo guarda en el registro dato4
leer4 call leer_teclado
movwf dato4
incf nast,1
call retardo
call mensaje
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Lee el estado actual del sensor de luz
leer_sensor

clrf BUS_STATE
movlw 0x91 ;direccionamiento del conversor analogico
digital (lectura)
movwf DIRECCION
movlw 0x40
call ENVIAR_1

call RECIBIR_1
movf DATO,0
call RECIBIR_1
movfw DATO
movwf lecsensor1
bcf STATUS,C
rrf lecsensor1,1
bcf STATUS,C
rrf lecsensor1,1

Diseo de Sist. Basados en Proc. - 32 - Proyecto de Curso
Caja de Seguridad
call RECIBIR_1
movfw DATO
movwf lecsensor2
bcf STATUS,C
rrf lecsensor2,1
bcf STATUS,C
rrf lecsensor2,1
call RECIBIR_1
movfw DATO
movwf lecsensor3
bcf STATUS,C
rrf lecsensor3,1
bcf STATUS,C
rrf lecsensor3,1
call RECIBIR_1
movfw DATO
movwf lecsensor4
bcf STATUS,C
rrf lecsensor4,1
bcf STATUS,C
rrf lecsensor4,1
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Comprueba el estado del sensor y en caso de no estar dentro de un rango emite un
sonido
comprobar_sensor call leer_sensor

clrf lecsensor
movfw lecsensor1
addwf lecsensor,1
movfw lecsensor2
addwf lecsensor,1
movfw lecsensor3
addwf lecsensor,1
movfw lecsensor4
addwf lecsensor,1


movfw lecsensor
andlw 0x0f
addlw 0x30

bsf PORTA,2
call LCD_DATO
bcf PORTA,2
;; Comprobar si esta dentro de un rango y si no llamar a sonido
movfw lecsensor

Diseo de Sist. Basados en Proc. - 33 - Proyecto de Curso
Caja de Seguridad
andlw 0x0f
sublw 5
btfsc STATUS,C
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Retardo de 300 ms

retardo movlw 0c1h
movwf ret1
movwf ret2
movlw 01h
movwf ret3
salto1x
decfsz ret1,1
goto salto1x
goto recga1x
salto2x
decfsz ret2,1
goto salto1x
goto recga2x
salto3x
decfsz ret3,1
goto salto1x
return
recga1x
movlw 0c1h
movwf ret1
goto salto2x
recga2x
movlw 0c1h
movwf ret2
goto salto3x
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reproduce la alarma y no para hasta que se pulsa una tecla
otro movlw 0x1
movwf nombrete
bucle3 nop
decfsz nombrete,1
goto bucle3
goto volver

sonido call menalarma
clrf BUS_STATE
movlw 0x90
movwf DIRECCION

Diseo de Sist. Basados en Proc. - 34 - Proyecto de Curso
Caja de Seguridad
movlw 0x40
movwf DATO
call ENVIAR_1
movlw 0x50
movwf b1
movwf b2
movwf b3

movlw 0xfe
movwf b2
loop movlw 0xEE
movwf DATO
call ENVIAR_1
movlw 0x90
movwf contador

bucle nop
decfsz contador,1
goto bucle
movlw 0x00
movwf DATO
call ENVIAR_1
decfsz b2,1
goto loop

movlw 0xff
movwf contador
bucle5 nop
decfsz contador,1
goto bucle5


movlw 0xff
movwf b1
bucle6 movlw 0xFF
movwf DATO
call ENVIAR_1
movlw 0x20
movwf contador
bucle4 nop
decfsz contador,1
goto bucle4
movlw 0x00
movwf DATO
call ENVIAR_1
decfsz b1,1
goto bucle6

movlw 0x10
movwf contador

Diseo de Sist. Basados en Proc. - 35 - Proyecto de Curso
Caja de Seguridad
bucle2 nop
goto otro
volver decfsz contador,1
goto bucle2
goto loop
salir_sonido return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




feli call cajaabierta
call leercnt
call retardo
call retardo
call retardo
goto Inicio1


Inicio call DISPLAY_CONF
call BORRA_Y_HOME
call grabarEE
movlw 0x20
movwf contad
Inicio1
movlw 0x01
movwf nast
movwf correcto
call mensaje
call leercon


call leer1
call comprobar_sensor
movfw dato1
subwf dEE1
btfss STATUS,Z
clrf correcto
call leer2
call comprobar_sensor
btfss correcto,0
goto l3
movfw dato2
subwf dEE2
btfss STATUS,Z
clrf correcto
l3 call leer3
call comprobar_sensor
btfss correcto,0
goto l4

Diseo de Sist. Basados en Proc. - 36 - Proyecto de Curso
Caja de Seguridad
movfw dato3
subwf dEE3
btfss STATUS,Z
clrf correcto
l4 call leer4
call comprobar_sensor
movfw dato4
subwf dEE4
btfss STATUS,Z
clrf correcto


btfsc correcto,0
goto feli

call retardo
call retardo
call retardo
goto Inicio1

nop
nop
end

También podría gustarte