Académique Documents
Professionnel Documents
Culture Documents
;XXXXXXXXXXXXXXX
www.diselc.es
XXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXX
ASCENSOR DE 5 PLANTAS
XXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;con el pic 16f84A solo disponia de pines para controlar 5 plantas, pero
;utilizando elmicrocontrolador 16f628 podemos controlar 7 plantas utilizando
;su reloj interno.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST
P=16f84A
;Procesador utilizado.
INCLUDE <P16F84A.INC>
;codigo de proteccion no;perro guardian no;reset inicio si;oscilador a cristal
;******************************** igualdades ********************************
;tanto las salidas como las entradas se consideran que estan activadas cuando
;se encuentran en estado logico bajo
;RA0
;RA1
;RA2
;RA3
;RA4
entrada y
salida de
salida de
entrada y
entrada y
salida de cabina de
bajada, dispara por
subida, dispara por
salida del pulsador
salida del pulsador
5 planta
positivo
positivo
de llamada de 5 planta
de llamada de 4 planta
;RB0
;RB1
;RB2
;RB3
;RB4
;RB5
;RB6
;RB7
entrada
entrada
entrada
entrada
entrada
entrada
entrada
entrada
de llamada de 3 planta
de llamada de 2 planta
de llamada de 1 planta
;******************************
LIST
RADIX
P=16f84a
hex
equ
equ
equ
equ
equ
equ
equ
equ
equ
****************************
;Procesador utilizado.
;trabajo en numeracion hexadecimal
MAPA DE MEMORIA
****************************
0x03
0x05
0x05
0x06
0x06
0x0c
0x0d
0x0e
0x0f
;********************************
reset
planta
planta
planta
planta
ZONA DE DATOS
;*****************************
status
trisa
porta
trisb
portb
reg1
reg2
reg3
reg4
1
2
3
4
org 0x00
goto inicio
inicio
**********************************
b'11001'
;3 entradas y dos salida del puerto a.
trisa
b'11111111' ;el puerto b esta como entradas
trisb
status,5
;Acceso al Banco 0.
bcf porta,1
bcf porta,2
principio nop
call pulsadores
cs call coincide
call subida
call pulsadores
btfsc porta,2
goto cs
cb call coincide
call bajada
call pulsadores
btfsc porta,1
goto cb
goto principio
;******************************************************************************
;**************************
RUTINA DE SUBIDA
***************************
;******************************************************************************
;aqui solo conectamos el motor en sentido ascendente teniendo en cuenta la
;posicion donde esta la cabina y las llamadas que hay realizadas
subida nop
sube2 btfsc portb,1
goto sube3
btfss portb,4
bsf porta,2
sube3 btfsc portb,0
goto sube4
1 planta ejecuta la
btfss portb,4
bsf porta,2
;siguiente linea
;activa la subida
btfss portb,5
bsf porta,2
;siguiente linea
;activa la subida
planta ejecuta la
btfss portb,4
bsf porta,2
;siguiente linea
;activa la subida
btfss portb,5
bsf porta,2
;siguiente linea
;activa la subida
btfss portb,6
bsf porta,2
;siguiente linea
;activa la subida
1 planta ejecuta la
1 planta ejecuta la
2 planta ejecuta la
3 planta ejecuta la
btfss portb,4
bsf porta,2
;siguiente linea
;activa la subida
btfss portb,5
bsf porta,2
;siguiente linea
;activa la subida
btfss portb,6
bsf porta,2
;siguiente linea
;activa la subida
btfss portb,7
bsf porta,2
;siguiente linea
;activa la subida
1 planta ejecuta la
2 planta ejecuta la
3 planta ejecuta la
4 planta ejecuta la
subefin nop
return
;******************************************************************************
;**************************
RUTINA DE BAJADA
***************************
;******************************************************************************
;aqui solo conectamos el motor en sentido descendente teniendo en cuenta la
;posicion donde esta la cabina y las llamadas que hay realizadas
bajada nop
baja4 btfsc porta,4
goto baja3
btfss porta,0
bsf porta,1
;siguiente linea
;activa la bajada
btfss portb,7
bsf porta,1
;siguiente linea
;activa la bajada
btfss porta,0
bsf porta,1
;siguiente linea
;activa la bajada
bsf porta,1
;siguiente linea
;activa la bajada
btfss portb,7
bsf porta,1
;siguiente linea
;activa la bajada
bsf porta,1
baja1 btfsc portb,2
goto bajafin
4 planta ejecuta la
5 planta ejecuta la
btfss portb,6
btfss porta,0
5 planta ejecuta la
3 planta ejecuta la
4 planta ejecuta la
5 planta ejecuta la
btfss portb,5
bsf porta,1
;siguiente linea
;activa la bajada
btfss portb,6
bsf porta,1
;siguiente linea
;activa la bajada
btfss portb,7
2 planta ejecuta la
3 planta ejecuta la
4 planta ejecuta la
bsf porta,1
;siguiente linea
;activa la bajada
btfss porta,0
bsf porta,1
;siguiente linea
;activa la bajada
5 planta ejecuta la
bajafin nop
return
;******************************************************************************
;************************** RUTINA DE PULSADORES ***************************
;******************************************************************************
;enciendo y apago los led de posicion de la cabina
;compruebo la posicion de la cabina, pasandola a salida, y la posicion de la
;cabina inferior y superior mas inmediata la pongo como entrada
;vamos a un bucle, para hacer tiempo para que la carga de los condensadores
;de filtro se estabilice
;enciendo los led de llamada
pulsadores nop
;***********
************
bcf status,5
;acceso al banco 0
bcf portb,6
;ahora enciendo el led
call condensador ;hago tiempo para estabilizar los condensadores
cabina4 btfsc portb,7
goto cabina5
bsf status,5
bcf trisb,7
bsf trisb,6
bsf trisa,0
bcf status,5
bcf portb,7
call condensador
cabinafin nop
;**************
llama1
llama2
llama3
llama4
btfsc portb,2
goto llama2
bsf status,5
bcf trisb,2
bcf status,5
;si llama1
;si no voy
;acceso al
;configuro
;acceso al
bcf portb,2
btfsc portb,1
goto llama3
bsf status,5
bcf trisb,1
bcf status,5
;si llama2
;si no voy
;acceso al
;configuro
;acceso al
bcf portb,1
btfsc portb,0
goto llama4
bsf status,5
bcf trisb,0
bcf status,5
;si llama3
;si no voy
;acceso al
;configuro
;acceso al
bcf portb,0
btfsc porta,4
goto llama5
bsf status,5
bcf trisa,4
bcf status,5
;si llama4
;si no voy
;acceso al
;configuro
;acceso al
bcf porta,4
**************
llama5
btfsc porta,3
goto llamafin
bsf status,5
bcf trisa,3
bcf status,5
;si llama5
;si no voy
;acceso al
;configuro
;acceso al
bcf porta,3
llamafin nop
call condensador ;hago tiempo para estabilizar los condensadores
return
;******************************************************************************
;************************** RUTINA DE COINCIDE
***************************
;******************************************************************************
;si la cabina esta en la misma planta que esta pulsada:
;apaga el led de llamada, configurandolo como entrada
;para el motor tanto en sentido ascendente como descendente
;se detiene 5 segundos comprobando los pulsadores
coincide nop
llamada1 btfsc portb,2
goto llamada2
btfsc portb,4
goto llamada2
bsf status,5
bsf trisb,2
bcf status,5
;acceso al banco 1
;pulsador de 1 planta como entrada
;acceso al banco 0
bcf porta,1
bcf porta,2
call bucle5
btfsc portb,5
goto llamada3
bsf status,5
bsf trisb,1
bcf status,5
;acceso al banco 1
;pulsador de 2 planta como entrada
;acceso al banco 0
bcf porta,1
bcf porta,2
call bucle5
goto llamada4
btfsc portb,6
goto llamada4
bsf status,5
bsf trisb,0
bcf status,5
;acceso al banco 1
;pulsador de 3 planta como entrada
;acceso al banco 0
bcf porta,1
bcf porta,2
call bucle5
btfsc portb,7
goto llamada5
bsf status,5
bsf trisa,4
bcf status,5
;acceso al banco 1
;pulsador de 4 planta como entrada
;acceso al banco 0
bcf porta,1
bcf porta,2
call bucle5
btfsc porta,0
goto llamadafin
bsf status,5
bsf trisa,3
bcf status,5
;acceso al banco 1
;pulsador de 5 planta como entrada
;acceso al banco 0
bcf porta,1
bcf porta,2
call bucle5
llamadafin nop
return
;******************************************************************************
;************************** RUTINA DE 5 SEGUNDOS ***************************
;******************************************************************************
;rutina retardo de 5 seg aproximadamente
;no se puede calcular el tiempo exacto ya que al pasar por la rutina de
;pulsadores, el tiempo de esta depende de las variables que la componen
;por este motivo la llamada a pulsadores la hago en el ciclo3, ya que este es
;ciclo que menos veces se repite y por lo tanto menos interviene en el tiempo
;final
;con los tiempos aqui dados, cada 0,09seg comprobamos los pulsadores
50
reg1
ciclo2 movlw
movwf
ciclo
0xff
reg3
decfsz reg3,1
goto
ciclo
decfsz reg2,1
goto
ciclo2
decfsz reg1,1
goto
ciclo3
; idem
return
;******************************************************************************
;************************ RUTINA DE CONDENSADORES *************************
;******************************************************************************
;aqui esperamos 766 microsegundos para que el valor de las entradas se
;estabilice, debido a la capacidad de los condensadores
condensador movlw 0xff ;ff equivale a 255, t=(255x3)+1 = 766 microsegundos
movwf reg4
espero
end
decfsz reg4,1
goto
espero
return