Você está na página 1de 17

ESCUELA SUPERIOR POLITCNICA DEL

LITORAL

FIEC


Laboratorio de MicroControladores

Proyecto del Primer Parcial

Sistema de Seguridad Caja Fuerte

Integrante:
Brian Laaz Ochoa

Paralelo: # 7

2014 I TRMINO



1. ENUNCIADO DEL PROYECTO
SISTEMA DE SEGURIDAD CAJA FUERTE
Se tendr un sistema de seguridad de una caja fuerte, en donde se requiere un
controlador para el ingreso y comprobacin de la clave de 4 dgitos que abrir el cerrojo,
la clave correcta se encontrara almacenada en una variable dentro del programa. El
usuario podr tener como mximo 3 errores, es decir:
Error #1 Encender el primer LED
Error #2 Encender el segundo LED
Error #3 Parpadearan los tres LEDs durante a una frecuencia de 60Hz indicando un tipo de
alerta, adems se encender un speaker emitir un sonido de alarma, el pic se mantendr
en este estado hasta realizar un reinicio del mismo.

Se tendrn 4 DISPLAY (Usar tcnica de Multiplexacion para ahorrar pines) para mostrar los
nmeros que vaya ingresando el usuario, la forma de ingresar los nmeros ser la
siguiente debajo de cada display deber haber un pulsador el cual mediante l enva de un
alto incremente el valor en el respectivo display al final para comprobar si la clave es
correcta se adicionara un switch para indicar que debe proceder hacer la comparacin del
valor ingresado por el usuario y el q est dentro de una.

2. DIAGRAMA DE BLOQUES


3. DIAGRAMA DE FULO FUNCIONAL DEL PROGRAMA PRINCIPAL
INICIO
CONFIGURACION
SETEO DE PUERTOS
INICIALIZACION DE
VARIABLES
TECLA 1 NUM1=NUM1+1
1
0
TECLA2 NUM2=NUM2+1
1
0
TECLA 3 NUM1=NUM1+1
1
TECLA4 NUM2=NUM2+1
1
0
COMPROBAR
0
1
1
1
NUM1=C1
CARRY=1
Rotar PORTD
NUM2=C2
NUM3=C3
NUM4=C4
0
0
0
0
1
1
1
2
2
3
3
PORTD2=1
FALLA
4
4
1
0



INTERRUPCIONES
INTERUPCCIONES
WNUM1,NUM2
LLAMAR TABLAS
PORTBCod 7 seg
WNUM3,NUM4
LLAMAR TABLAS
PORTCCod 7 seg
Borrar Banderas
RETFIE


4. DESCRIPCION DEL ALGORITMO O ESTRATEGIA UTILIZADA
PROGRAMA PRINCIPAL
1. Se realiza un seteo de los puertos
2. Se inicializa las variables
3. Se presionan los pulsadores para el ingreso de la clave, la cual est configurada
en el PORTA.
4. Se presiona la tecla de comprobar para verificar si la clave ingresada es
correcta
5. Si es correcta vuelve al inicio del programa, caso contrario al primer error se
enciende uno de los tres leds que lo hemos configurado en el PORTD.
6. Al tercer error se encender los tres leds y adicional una alarma, y volver al
estado inicial si se presiona el botn reset
INTERRUPCION
1. Se mueven los numero1 y numero 2 a w
2. Manda a llamar a la tabla
3. Retorna el codigo de 7 segmentos
4. Se muestran en el puerto b
5. Se mueven numero3 y numero 4 a w
6. Manda a llamat a la tabla
7. Retorna el codigo de 7 segmentos
8. Se muestran en el puerto c
9. Borra las banderas




5. LISTADO DEL PROGRAMA FUENTE EN LENGUAJE ENSAMBLADOR CON
COMENTARIOS
;**********************************************************
; NOMBRE: caja fuerte.asm
; FECHA: 26/06/2014
; VERSION: 1.00
; PROGRAMADOR: Brian Laaz
;**********************************************************
;DIRECTIVAS

LIST p=16F887 ;Tipo de microcontrolador
INCLUDE P16F887.INC ;Define los SFRs y bits del
;P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC
;Setea parmetros de
;configuracin

errorlevel -302 ;Deshabilita mensajes de
;advertencia por cambio bancos
CBLOCK 0X020
contador ;Cuenta 100 interrupciones
uni_cod
dec_cod
sel
num1
num2
num3
num4
c1
c2
c3
c4
con1
con2
con3
cont1
cont2
cont3
ENDC
;**********************************************************
;PROGRAMA
ORG 0x00 ;Vector de RESET
GOTO MAIN
ORG 0x04 ;Vector de interrupcin
GOTO Interrupcion ;Va a rutina de interrupcin

;DURANTE LA INTERRUPCION SE CUENTAN 100 INTERRUPCIONES
;PARA COMPLETAR 10x100=1000ms.
Interrupcion
movf sel,w ;Se mueve a si mismo para afectar bandera
btfss STATUS,2 ;sel=0 refresca dig1; sel=1 refresca dig2
goto dig2
dig1
movf num2,w
call tabla
movwf uni_cod
movf uni_cod,w
bsf PORTA,0
bsf PORTA,1
movwf PORTB
movf num4,w
call tabla
movwf uni_cod
movf uni_cod,w
movwf PORTC
bcf PORTA,0
comf sel,f
goto Seguir
dig2
movf num1,w
call tabla
movwf dec_cod
movf dec_cod,w
bsf PORTA,0
bsf PORTA,1
movwf PORTB
movf num3,w
call tabla
movwf dec_cod
movf dec_cod,w
movwf PORTC
bcf PORTA,1
comf sel,f

Seguir
bcf INTCON,T0IF ;Repone flag del TMR0
movlw ~.39
movwf TMR0 ;Repone el TMR0 con ~.39
retfie ;Retorno de interrupcin

MAIN
;SETEO DE PUERTOS
BANKSEL ANSEL ;Selecciona el Bank3
CLRF ANSEL
CLRF ANSELH
BANKSEL TRISA ;Selecciona el Bank1
MOVLW b'00111100'
MOVWF TRISA ;PORTA configurado como salida
CLRF TRISB ;PORTB configurado como salida
CLRF TRISC
clrf TRISD
movlw b'11111111'
movwf TRISE

;INICIALIZACION
BANKSEL PORTA ;Selecciona el Bank0
CLRF PORTA ;Borra latch de salida de PORTB
CLRF PORTB ;Borra latch de salida de PORTC
clrf PORTC
clrf PORTE
clrf PORTD
clrf sel
movlw b'00000000'
movwf num1
movwf num2
movwf num3
movwf num4
movlw .1
movwf c1
movlw .2
movwf c2
movlw .3
movwf c3
movlw .4
movwf c4

;PROGRAMACION DEL TMR0
banksel OPTION_REG ;Selecciona el Bank1
movlw b'00000111' ;TMR0 como temporizador
movwf OPTION_REG ;con preescaler de 256
BANKSEL TMR0 ;Selecciona el Bank0
movlw .217 ;Valor decimal 217
movwf TMR0 ;Carga el TMR0 con 217

;PROGRAMACION DE INTERRUPCION
movlw b'10100000'
movwf INTCON ;Activa la interrupcin del TMR0
movlw .100 ;Cantidad de interrupciones a contar
movwf contador ;N de veces a repetir la interrupcin

Loop
nop
btfsc PORTA,2
GOTO digito1
btfsc PORTA,3
GOTO digito2
btfsc PORTA,4
GOTO digito3
Btfsc PORTA,5
GOTO digito4
Btfsc PORTE,0
GOTO COMPROBAR
goto Loop

digito1
incf num1
movlw .10
subwf num1,w
btfsc STATUS,Z
clrf num1
call retard
call retard
goto Loop

digito2
incf num2
movlw .10
subwf num2,w
btfsc STATUS,Z
clrf num2
call retard
call retard
goto Loop

digito3
incf num3
movlw .10
subwf num3,w
btfsc STATUS,Z
clrf num3
call retard
call retard
goto Loop

digito4
incf num4
movlw .10
subwf num4,w
btfsc STATUS,Z
clrf num4
call retard
call retard
goto Loop

COMPROBAR

movf c1,W
subwf num1,W
btfsc STATUS,Z
goto soniguales1
goto fail

soniguales1
movf c2,W
subwf num2,W
btfsc STATUS,Z
goto soniguales2
goto fail

soniguales2
movf c3,W
subwf num3,W
btfsc STATUS,Z
goto soniguales3
goto fail

soniguales3
movf c4,W
subwf num4,W
btfsc STATUS,Z
goto abierto
goto fail
goto retorno
abierto
bsf PORTD,3
call retard
call retard
call retard
goto retorno

fail
bsf STATUS,0
rlf PORTD
call retard
call retard
call retard
btfsc PORTD,2
goto falla
goto Loop


falla
clrf PORTD
call retardo
bsf PORTD,0
bsf PORTD,1
bsf PORTD,2
bsf PORTD,3
call retardo
clrf PORTD
call retardo
bsf PORTD,0
bsf PORTD,1
bsf PORTD,2
bsf PORTD,3
call retardo
clrf PORTD
call retardo
bsf PORTD,0
bsf PORTD,1
bsf PORTD,2
bsf PORTD,3
call retardo
clrf PORTD
call retardo
bsf PORTD,0
bsf PORTD,1
bsf PORTD,2
bsf PORTD,3
call retardo
clrf PORTD
call retardo
bsf PORTD,0
bsf PORTD,1
bsf PORTD,2
bsf PORTD,3
call retardo
clrf PORTD
call retardo
bsf PORTD,0
bsf PORTD,1
bsf PORTD,2
bsf PORTD,3
call retardo
goto falla

retorno
goto MAIN
; TABLA DE CONVERSION---------------------------------------------------------

tabla
ADDWF PCL,F ; PCL + W -> PCL
; El PCL se incrementa con el
; valor de W proporcionando un
; salto
RETLW 0x3F ; Retorna con el cdigo del 0
RETLW 0x06 ; Retorna con el cdigo del 1
RETLW 0x5B ; Retorna con el cdigo del 2
RETLW 0x4F ; Retorna con el cdigo del 3
RETLW 0x66 ; Retorna con el cdigo del 4
RETLW 0x6D ; Retorna con el cdigo del 5
RETLW 0x7D ; Retorna con el cdigo del 6
RETLW 0x07 ; Retorna con el cdigo del 7
RETLW 0x7F ; Retorna con el cdigo del 8
RETLW 0x67 ; Retorna con el cdigo del 9

retard
clrf con1
clrf con2
MOVLW .2
MOVWF con3
reta2
decfsz con1 ; Decrements "counter1" by 1. If result is 0
goto reta2 ; skip next instruction
decfsz con2 ; Decrements "counter2" by 1. If result is 0
goto reta2 ; skip next instruction
decfsz con3 ; Decrements "counter2" by 1. If result is 0
goto reta2 ; skip next instruction
return

retardo
clrf cont1
movlw .28
movwf cont2

reta1
decfsz cont1 ; Decrements "counter1" by 1. If result is 0
goto reta1 ; skip next instruction
decfsz cont2 ; Decrements "counter2" by 1. If result is 0
goto reta1 ; skip next instruction
return

END

6. SIMULACION DEL CIRCUITO ARMADO EN PROTEUS















RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT
14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5
RD4
27
RB3/AN9/PGM/C12IN2-
36
RA0/AN0/ULPWU/C12IN0-
2
U1
PIC16F887
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
T2
1
2
12
a1
b1
c1
d1
e1
f1
g1
a
1
b
1
c
1
d
1
e
1
f
1
g
1
a
2
b
2
c
2
d
2
e
2
f
2
g
2
a2
b2
c2
d2
e2
f2
g2
R10
330
R11
330
R12
330
R13
330
R14
330
R15
330
R16
330
12
T1
T3
T4
R8
10k
T4
R9
10k
T3
R17
10k
T2
R18
10k
T1
L1
L2
L3
D1
LED-GREEN
D2
LED-YELLOW
D3
LED-RED
L
1
L
2
L
3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R19
10k
RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT
14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5
RD4
27
RB3/AN9/PGM/C12IN2-
36
RA0/AN0/ULPWU/C12IN0-
2
U1
PIC16F887
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
T2
1
2
12
a1
b1
c1
d1
e1
f1
g1
a
1
b
1
c
1
d
1
e
1
f
1
g
1
a
2
b
2
c
2
d
2
e
2
f
2
g
2
a2
b2
c2
d2
e2
f2
g2
R10
330
R11
330
R12
330
R13
330
R14
330
R15
330
R16
330
12
T1
T3
T4
R8
10k
T4
R9
10k
T3
R17
10k
T2
R18
10k
T1
L1
L2
L3
D1
LED-GREEN
D2
LED-YELLOW
D3
LED-RED
L
1
L
2
L
3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R19
10k





RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT
14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5
RD4
27
RB3/AN9/PGM/C12IN2-
36
RA0/AN0/ULPWU/C12IN0-
2
U1
PIC16F887
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
T2
1
2
12
a1
b1
c1
d1
e1
f1
g1
a
1
b
1
c
1
d
1
e
1
f
1
g
1
a
2
b
2
c
2
d
2
e
2
f
2
g
2
a2
b2
c2
d2
e2
f2
g2
R10
330
R11
330
R12
330
R13
330
R14
330
R15
330
R16
330
12
T1
T3
T4
R8
10k
T4
R9
10k
T3
R17
10k
T2
R18
10k
T1
L1
L2
L3
D1
LED-GREEN
D2
LED-YELLOW
D3
LED-RED
L
1
L
2
L
3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R19
10k
RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT
14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5
RD4
27
RB3/AN9/PGM/C12IN2-
36
RA0/AN0/ULPWU/C12IN0-
2
U1
PIC16F887
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
T2
1
2
12
a1
b1
c1
d1
e1
f1
g1
a
1
b
1
c
1
d
1
e
1
f
1
g
1
a
2
b
2
c
2
d
2
e
2
f
2
g
2
a2
b2
c2
d2
e2
f2
g2
R10
330
R11
330
R12
330
R13
330
R14
330
R15
330
R16
330
12
T1
T3
T4
R8
10k
T4
R9
10k
T3
R17
10k
T2
R18
10k
T1
L1
L2
L3
D1
LED-GREEN
D2
LED-YELLOW
D3
LED-RED
L
1
L
2
L
3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R19
10k



7. CONCLUSIONES
En este proyecto aprendimos el importante uso de los contadores,
programndolos para el PIC 16F887, lo que es bsico en cuestiones de
desarrollo de cualquier otro proyecto que necesite llevar algn tipo de
conteo a determinada frecuencia, adems aplicamos la tcnica usada para
darle el tiempo de retardo de conteo deseado, haciendo posible el control
del mismo

El timer0 puede funcionar como temporizador o como contador. En modo
temporizador el valor del registro TMR0 se incrementa con cada ciclo de
instruccin. En modo contador el valor del registro TMR0 se incrementa en
cada flanco. En ambos casos al desbordarse (pasar de FFh a 00h) el registro
TMR0 la bandera de interrupcin del timer 0 (bit T0IF del registro INTCON)
se pone en 1.

RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT
14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5
RD4
27
RB3/AN9/PGM/C12IN2-
36
RA0/AN0/ULPWU/C12IN0-
2
U1
PIC16F887
R1
330
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
T2
1
2
12
a1
b1
c1
d1
e1
f1
g1
a
1
b
1
c
1
d
1
e
1
f
1
g
1
a
2
b
2
c
2
d
2
e
2
f
2
g
2
a2
b2
c2
d2
e2
f2
g2
R10
330
R11
330
R12
330
R13
330
R14
330
R15
330
R16
330
12
T1
T3
T4
R8
10k
T4
R9
10k
T3
R17
10k
T2
R18
10k
T1
L1
L2
L3
D1
LED-GREEN
D2
LED-YELLOW
D3
LED-RED
L
1
L
2
L
3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R19
10k
La frecuencia trabajada en los leds no fue la de 60hz ya que a dicha
frecuencia no se observaba con claridad el parpadeo de los leds se trabajo
a frecuencia mayor

8. RECOMENDACIONES


Se recomienda utilizar varias subrutinas dentro de un programa para
facilitar la resolucin del problema. Como se observ en el proyecto, las
rutinas de tablas nos ayudaron a obtener el cdigo que representara las
unidades y las decenas de los segundos de nuestro cronometro para
atletismo y as se pudo resolver el problema de manera efectiva y
estructurada

Se debe revisar los mensajes y advertencias que se obtienen luego de que
se realiza la compilacin del programa en el MPLAB, aunque en ciertas
ocasiones la compilacin termina satisfactoriamente hay que tener en
cuenta lo que dicen estos mensajes para prevenir errores.

Utilizar el software conocido como Microsoft Visio para realizar los
diagramas de flujo correcto de nuestro proyecto ya que de esta manera
podemos comprender como es su funcionamiento.

Familiarizarnos con los Datasheet de los microcontroladores. Nos sirve de
mucho ya que cada uno de ellos contiene informacin valiosa de cmo usar
los microcontroladores y bajo que parmetros puede trabajar.

Você também pode gostar