Vous êtes sur la page 1sur 9

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

;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

y salida del pulsador


y salida del pulsador
y salida del pulsador
de puerta de cabina
y salida de cabina de
y salida de cabina de
y salida de cabina de
y salida de cabina de

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

**********************************

;El programa comienza en la direccin 0.


;pasa a la posicion de inicio para evitar la int.

;que se encuentra en la posicion 4


inicio bsf status,5
movlw
movwf
movlw
movwf
bcf

;Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.

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

;paro el motor hacia abajo


;paro el motor hacia arriba

principio nop
call pulsadores

;compueba si hay algun pulsador dado, asi como la posicion


;de la cabina

cs call coincide

;aqui para el motor si la cabina coincide con la llamada y


;espera 5 seg chequeando los pulsadores
;comprueba todas las combinaciones posibles para activar el
;motor en direccion ascendente

call subida
call pulsadores
btfsc porta,2
goto cs
cb call coincide
call bajada

;si el motor esta subiendo, ejecuta la siguiente instruccion

call pulsadores
btfsc porta,1
goto cb

;comprueba todas las combinaciones posibles para activar el


;motor en direccion descendente
;si el motor esta bajando, ejecuta la siguiente instruccion

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

;si esta activada la llamada2 salta la siguiente linea


;comprueba sube3
;si la cabina esta en la
;siguiente linea
;activa la subida

1 planta ejecuta la

;si esta activada la llamada3 salta la siguiente linea


;comprueba sube4

btfss portb,4

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

btfss portb,5

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

sube4 btfsc porta,4


goto sube5

planta ejecuta la

;si esta activada la llamada4 salta la siguiente linea


;comprueba sube5

btfss portb,4

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

btfss portb,5

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

btfss portb,6

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

sube5 btfsc porta,3


goto subefin

1 planta ejecuta la

1 planta ejecuta la

2 planta ejecuta la

3 planta ejecuta la

;si esta activada la llamada5 salta la siguiente linea


;va al final de esta rutina

btfss portb,4

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

btfss portb,5

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

btfss portb,6

;si la cabina esta en la

bsf porta,2

;siguiente linea
;activa la subida

btfss portb,7

;si la cabina esta en la

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

; vuelvo donde se hizo la llamada

;******************************************************************************
;**************************
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

;si esta activada la llamada4 salta la siguiente linea


;comprueba baja3

btfss porta,0

;si la cabina esta en la

bsf porta,1

;siguiente linea
;activa la bajada

baja3 btfsc portb,0


goto baja2

;si esta activada la llamada3 salta la siguiente linea


;comprueba baja2

btfss portb,7

;si la cabina esta en la

bsf porta,1

;siguiente linea
;activa la bajada

btfss porta,0

;si la cabina esta en la

bsf porta,1

;siguiente linea
;activa la bajada

baja2 btfsc portb,1


goto baja1

;si la cabina esta en la

bsf porta,1

;siguiente linea
;activa la bajada

btfss portb,7

;si la cabina esta en la

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

;si esta activada la llamada2 salta la siguiente linea


;comprueba baja1

btfss portb,6

btfss porta,0

5 planta ejecuta la

;si la cabina esta en la


;siguiente linea
;activa la bajada

3 planta ejecuta la

4 planta ejecuta la

5 planta ejecuta la

;si esta activada la llamada4 salta la siguiente linea


;va al final de esta rutina

btfss portb,5

;si la cabina esta en la

bsf porta,1

;siguiente linea
;activa la bajada

btfss portb,6

;si la cabina esta en la

bsf porta,1

;siguiente linea
;activa la bajada

btfss portb,7

;si la cabina esta en la

2 planta ejecuta la

3 planta ejecuta la

4 planta ejecuta la

bsf porta,1

;siguiente linea
;activa la bajada

btfss porta,0

;si la cabina esta en la

bsf porta,1

;siguiente linea
;activa la bajada

5 planta ejecuta la

bajafin nop
return

; vuelvo donde se hizo la llamada

;******************************************************************************
;************************** 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
;***********

enciendo y apago los led de posicion de la cabina

************

cabina1 btfsc portb,4


goto cabina2
bsf status,5
bcf trisb,4
bsf trisb,5
bcf status,5
bcf portb,4
call condensador

;si la cabina esta en el 1 salto la siguiente linea


;si no voy a cabina2
;acceso al banco 1
;configuro cabina 1 como salida - enciende el led
;configuro cabina 2 como entrada
;acceso al banco 0
;ahora enciendo el led
;hago tiempo para estabilizar los condensadores

cabina2 btfsc portb,5


goto cabina3
bsf status,5
bcf trisb,5
bsf trisb,4
bsf trisb,6
bcf status,5
bcf portb,5
call condensador

;si la cabina esta en el 2 salto la siguiente linea


;si no voy a cabina3
;acceso al banco 1
;configuro cabina 1 como salida - enciende el led
;configuro cabina 1 como entrada
;configuro cabina 3 como entrada
;acceso al banco 0
;ahora enciendo el led
;hago tiempo para estabilizar los condensadores

cabina3 btfsc portb,6


goto cabina4
bsf status,5
bcf trisb,6
bsf trisb,5
bsf trisb,7

;si la cabina esta en el 3 salto la siguiente linea


;si no voy a cabina4
;acceso al banco 1
;configuro cabina 3 como salida - enciende el led
;configuro cabina 2 como entrada
;configuro cabina 4 como entrada

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

;si la cabina esta en el 4 salto la siguiente linea


;si no voy a cabina5
;acceso al banco 1
;configuro cabina 4 como salida - enciende el led
;configuro cabina 3 como entrada
;configuro cabina 5 como entrada
;acceso al banco 0
;ahora enciendo el led
;hago tiempo para estabilizar los condensadores

cabina5 btfsc porta,0


goto cabinafin
bsf status,5
bcf trisa,0
bsf trisb,7
bcf status,5
bcf porta,0
call condensador

;si la cabina esta en el 5 salto la siguiente linea


;si no voy a cabinafin
;acceso al banco 1
;configuro cabina 5 como salida - enciende el led
;configuro cabina 4 como entrada
;acceso al banco 0
;ahora enciendo el led
;hago tiempo para estabilizar los condensadores

cabinafin nop
;**************
llama1

llama2

llama3

llama4

enciendo el led de los pulsadores de llamada

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

;ahora enciendo el led

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

;ahora enciendo el led

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

;ahora enciendo el led

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

;ahora enciendo el led

**************

esta pulsado me salto la siguiente linea


a llama2
banco 1
llama 1 como salida - enciende el led
banco 0

esta pulsado me salto la siguiente linea


a llama3
banco 1
llama 2 como salida - enciende el led
banco 0

esta pulsado me salto la siguiente linea


a llama4
banco 1
llama 3 como salida - enciende el led
banco 0

esta pulsado me salto la siguiente linea


a llama5
banco 1
llama 4 como salida - enciende el led
banco 0

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

esta pulsado me salto la siguiente linea


a llamafin
banco 1
llama 5 como salida - enciende el led
banco 0

bcf porta,3

;ahora enciendo el led

llamafin nop
call condensador ;hago tiempo para estabilizar los condensadores
return

;vuelvo donde se hizo la llamada

;******************************************************************************
;************************** 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

;si llamada1 esta pulsada salto la siguiente linea


;si no voy a llamada2

btfsc portb,4
goto llamada2

;si la cabina esta el la 1 planta salto una linea


;si no salta a 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

;desconecta el motor en sentido descendente


;desconecta el motor en sentido ascendente
;espera 5 seg comprobando los pulsadores

llamada2 btfsc portb,1


goto llamada3

;si llamada2 esta pulsada salto la siguiente linea


;si no voy a llamada3

btfsc portb,5
goto llamada3

;si la cabina esta el la 2 planta salto una linea


;si no salta a 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

;desconecta el motor en sentido descendente


;desconecta el motor en sentido ascendente
;espera 5 seg comprobando los pulsadores

llamada3 btfsc portb,0

;si llamada3 esta pulsada salto la siguiente linea

goto llamada4

;si no voy a llamada4

btfsc portb,6
goto llamada4

;si la cabina esta el la 3 planta salto una linea


;si no salta a 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

;desconecta el motor en sentido descendente


;desconecta el motor en sentido ascendente
;espera 5 seg comprobando los pulsadores

llamada4 btfsc porta,4


goto llamada5

;si llamada4 esta pulsada salto la siguiente linea


;si no voy a llamada5

btfsc portb,7
goto llamada5

;si la cabina esta el la 4 planta salto una linea


;si no salta a 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

;desconecta el motor en sentido descendente


;desconecta el motor en sentido ascendente
;espera 5 seg comprobando los pulsadores

llamada5 btfsc porta,3


goto llamadafin

;si llamada5 esta pulsada salto la siguiente linea


;si no voy a llamadafin

btfsc porta,0
goto llamadafin

;si la cabina esta el la 5 planta salto una linea


;si no salta a 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

;desconecta el motor en sentido descendente


;desconecta el motor en sentido ascendente
;espera 5 seg comprobando los pulsadores

llamadafin nop
return

; vuelvo donde se hizo la llamada

;******************************************************************************
;************************** 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

;para conseguir un tiempo aproximado de 5 seg


;tendre que ir a la rutina de los
;pulsadores 50 veces
bucle5 movlw
movwf

50
reg1

; (decimal) numero de veces que voy a pulsadores.

ciclo3 call pulsadores


movlw 30
movwf reg2

; continuamente voy a la rutina de pulsadores


; t=766(30+90+1)= 92686 microsegundos

ciclo2 movlw
movwf

;ff equivale a 255, t=(255x3)+1 = 766 microsegundos

ciclo

0xff
reg3

decfsz reg3,1
goto
ciclo

; comienza a restar. cuando sea 0 salta 1 linea


; sigue restando hasta que llege a 0

decfsz reg2,1
goto
ciclo2

; resta 1 a reg2.cuando sea 0 se saltara una linea

decfsz reg1,1
goto
ciclo3

; idem

return

; vuelvo donde se hizo la llamada

;******************************************************************************
;************************ 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

; comienza a restar. cuando sea 0 salta 1 linea


; sigue restando hasta que llege a 0

return

; vuelvo donde se hizo la llamada

Vous aimerez peut-être aussi