Sunteți pe pagina 1din 13

;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 ;RB0 ;RB1 ;RB2 ;RB3 ;RB4 ;RB5 ;RB6 ;RB7 entrada y salida de salida de entrada y entrada y entrada entrada entrada entrada entrada entrada entrada entrada 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

y salida del pulsador de llamada de 3 planta y salida del pulsador de llamada de 2 planta y salida del pulsado r de llamada de 1 planta de puerta de cabina y salida de cabina de 1 planta y salida de cabina de 2 planta y salida de cabina de 3 planta y salida de cabina de 4 planta ZONA DE DATOS

;****************************** **************************** LIST RADIX P=16f84a hex

;Procesador utilizado. ;trabajo en numeracion hexadecimal

;***************************** ************ **************** status trisa porta trisb portb reg1 reg2 reg3 reg4 equ equ equ equ equ equ equ equ equ 0x03 0x05 0x05 0x06 0x06 0x0c 0x0d 0x0e 0x0f

MAPA DE MEMORIA

;******************************** ********************************** reset org 0x00

inicio

;El programa comienza en la direccin 0.

goto la int.

inicio

;pasa a la posicion de inicio para evitar ;que se encuentra en la posicion 4

inicio bsf Banco 1.

status,5

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

movlw movwf movlw movwf bcf

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. ;paro el motor hacia abajo ;paro el motor hacia arriba

bcf porta,1 bcf porta,2

principio nop call pulsadores posicion cs call coincide llamada y call subida activar el call pulsadores btfsc porta,2 instruccion goto cs cb call coincide call bajada activar el call pulsadores btfsc porta,1 instruccion goto cb goto principio ;si el motor esta subiendo, ejecuta la siguiente ;compueba si hay algun pulsador dado, asi como la ;de la cabina ;aqui para el motor si la cabina coincide con la ;espera 5 seg chequeando los pulsadores ;comprueba todas las combinaciones posibles para ;motor en direccion ascendente

;comprueba todas las combinaciones posibles para ;motor en direccion descendente ;si el motor esta bajando , ejecuta la siguiente

;********************************************************************* ********* ;************************** 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 siguiente linea goto sube3 btfss portb,4 la bsf porta,2 sube3 btfsc portb,0 siguiente linea goto sube4 btfss portb,4 la bsf porta,2 btfss portb,5 ejecuta la bsf porta,2 sube4 btfsc porta,4 siguiente linea goto sube5 btfss portb,4 la bsf porta,2 btfss portb,5 la bsf porta,2 btfss portb,6 la bsf porta,2 sube5 btfsc porta,3 siguiente linea goto subefin btfss portb,4 la bsf porta,2 btfss portb,5 la bsf porta,2 btfss portb,6 la bsf porta,2

;si esta activada la llamada2 salta la ;comprueba sube3 ;si la cabina esta en la ;siguiente linea ;activa la subida ;si esta activada la llamada3 salta la ;comprueba sube4 ;si la cabina esta en la ;siguiente linea ;activa la subida ;si la cabina esta en la ;siguiente linea ;activa la subida ;si esta activada la llamada4 salta la ;comprueba sube5 ;si la cabina esta en la ;siguiente linea ;activa la subida ;si la cabina esta en la ;siguiente linea ;activa la subida ;si la cabina esta en la ;siguiente linea ;activa la sub ida ;si esta activada la llamada5 salta la ;va al final de esta rutina ;si la cabina esta en la ;siguiente linea ;activa la subida ;si la cabina esta en la ;siguiente linea ;activa la subida ;si la cabina esta en la ;siguiente linea ;activa la subida 3 planta ejecuta 2 planta ejecuta 1 planta ejecuta 3 planta ejecuta 2 planta ejecuta 1 planta ejecuta 2 planta 1 planta ejecuta 1 planta ejecuta

btfss portb,7 la bsf porta,2 subefin nop return

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

planta ejecuta

; vuelvo donde se hizo la l lamada

;********************************************************************* ********* ;************************** 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 siguiente linea goto baja3 btfss porta,0 la bsf porta,1 baja3 btfsc portb,0 siguiente linea goto baja2 btfss portb,7 la bsf porta,1 btfss porta,0 la bsf porta,1 baja2 btfsc portb,1 siguiente linea goto baja1 btfss portb,6 la bsf porta,1 btfss portb,7 la ;siguiente linea ;siguiente linea ;activa la bajada ;si la cabina esta en la 4 planta ejecuta ;siguiente linea ;activa la bajada ;si esta activada la llamada2 salta la ;comprueba baja1 ;si la cabina esta en la 3 planta ejecuta ;siguiente linea ;activa la bajada ;si la cabina esta en la 5 planta ejecuta ;siguiente linea ;activa la bajada ;si esta activada la llamada3 salta la ;comprueba baja2 ;si la cabina esta en la 4 planta ejecuta ;si esta activada la llamada4 salta la ;comprueba baja3 ;si la cabina esta en la 5 planta ejecuta

bsf porta,1 btfss porta,0 la bsf porta,1 baja1 btfsc portb,2 siguiente linea goto bajafin btfss portb,5 la bsf porta,1 btfss port b,6 la bsf porta,1 btfss portb,7 la bsf porta,1 btfss porta,0 la bsf porta,1 bajafin nop return

;activa la bajada ;si la cabina esta en la ;siguiente linea ;activa la bajada ;si esta activada la llamada4 salta la ;va al final de esta rutina ;si la cabina esta en la ;siguiente linea ;activa la bajada ;si la cabina esta en la ;siguiente linea ;activa la bajada ;si la cabina esta en la ;siguiente linea ;activa la bajada ;si la cabina esta en la ;siguiente linea ;activa la bajada 5 planta ejecuta 4 planta ejecuta 3 planta ejecuta 2 planta ejecuta 5 planta ejecuta

; 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 siguiente linea goto cabina2 bsf status,5 bcf trisb,4 el led bsf trisb,5 bcf status,5 bcf portb,4 call condensador condensadores cabina2 btfsc portb,5 siguiente linea goto cabina3 bsf status,5 bcf trisb,5 el led bsf trisb,4 bsf trisb,6 bcf status,5 bcf portb,5 call condensador condensadores cabina3 btfsc portb,6 siguiente linea goto cabina4 bsf status,5 bcf trisb,6 el led bsf trisb,5 bsf trisb,7 bcf status,5 bcf portb,6 call condensador condensadores cabina4 btfsc portb,7 siguiente linea goto cabina5 bsf status,5 bcf trisb,7 el led bsf trisb,6 bsf trisa,0 bcf status,5 bcf portb,7 call condensador condensadores cabina5 btfsc porta,0 siguiente linea goto cabinafin bsf status,5 bcf trisa,0 el led bsf trisb,7

;si la cabina esta en el 1 salto la ;si no voy a cabina2 ;acceso al banco 1 ;configuro cabina 1 como salida ;configuro cabina 2 como entrada ;acceso al banco 0 ;ahora enciendo el led ;hago tiempo para estabilizar los ;si la cabina esta en el 2 salto la ;si no voy a cabina3 ;acceso al banco 1 ;configuro cabina 1 como salida - enciende ;configuro cabina 1 como entrada ;configuro cabina 3 como entrada ;acceso al banco 0 ;ahora enciendo el l ed ;hago tiempo para estabilizar los ;si la cabina esta en el 3 salto la ;si no voy a cabina4 ;acceso al banco 1 ;configuro cabina 3 como salida ;configuro cabina 2 como entrada ;configuro cabina 4 como entrada ;acceso al banco 0 ;ahora enciendo el led ;hago tiempo para estabilizar los ;si la cabina esta en el 4 salto la ;si no voy a cabina5 ;acceso al banco 1 ;configuro cabina 4 como salida ;configuro cabina 3 como entrada ;configuro cabina 5 como entrada ;acceso al banco 0 ;ahora enciendo el led ;hago tiempo para estabilizar los

- enciende

- enciende

- enciende

;si la cabina esta en el 5 salto la ;si no voy a cabinafin ;acceso al banco 1 ;configuro cabina 5 como salida ;configuro cabina 4 como entrada

- enciende

bcf status,5 bcf porta,0 call condensador condensadores cabinafin nop ;************** **************

;acceso al banco 0 ;ahora enciendo el led ;hago tiempo para estabilizar los

enciendo el led de los pulsadores de llamada ;si llama1 esta pulsado me salto la ;si no voy a llama2 ;acceso al banco 1 ;configuro llama 1 como salida ;a cceso al banco 0 ;ahora enciendo el led ;si llama2 esta pulsado me salto la ;si no voy a llama3 ;acceso al banco 1 ;configuro llama 2 como salida ;acceso al banco 0 ;ahora enciendo el led ;si llama3 esta pulsado me salto la ;si no voy a llama4 ;acceso al banco 1 ;configuro llama 3 como salida ;acceso al banco 0 ; ahora enciendo el led ;si llama4 esta pulsado me salto la ;si no voy a llama5 ;acceso al banco 1 ;configuro llama 4 como salida ;acceso al banco 0 ;ahora enciendo el led ;si llama5 esta pulsado me salto la ;si no voy a llamafin ;acceso al banco 1 ;configuro llama 5 como salida ;acceso al banco 0 ;ahora enciendo el led

llama1 btfsc portb,2 siguiente linea goto llama2 bsf status,5 bcf trisb,2 el led bcf status,5 bcf portb,2 llama2 btfsc portb,1 siguiente linea goto llama3 bsf status,5 bcf trisb,1 el led bcf status,5 bcf portb,1 llama3 btfsc portb,0 siguiente line a goto llama4 bsf status,5 bcf trisb,0 el led bcf status,5 bcf portb,0 llama4 btfsc porta,4 siguiente linea goto llama5 bsf status,5 bcf trisa,4 el led bcf status,5 bcf porta,4 llama5 btfsc porta,3 siguiente linea goto llamafin bsf status,5 bcf trisa,3 el led bcf status,5 bcf porta,3

- enciende

- enciende

- enciende

- enciende

- enciende

llamafin nop call condensador condensadores return ;hago tiempo para estabilizar los ;vuelvo donde se hizo la llamada

;********************************************************************* ********* ;************************** RUTINA DE COINCIDE *************************** ;********************************************************************* ********* ;si la cabina e sta 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 linea goto llamada2 btfsc portb,4 linea goto llamada2 bsf status,5 bsf trisb,2 bcf status,5 bcf porta,1 bcf porta,2 call bucle5 ;si no salta a llamada2 ;acceso al banco 1 ;pulsador de 1 planta como entrada ;acceso al banco 0 ;desconecta el motor en sentido descendente ;desconecta e l motor en sentido ascendente ;espera 5 seg comprobando los pulsadores ;si llamada1 esta pulsada salto la siguiente ;si no voy a llamada2 ;si la cabina esta el la 1 planta salto una

llamada2 btfsc portb,1 linea goto llamada3 btfsc portb,5 linea goto llamada3 bsf status,5 bsf trisb,1 bcf status,5 bcf porta,1 bcf porta,2 call bucle5

;si llamada2 esta pulsada salto la siguiente ;si no voy a llamada3 ;si la cabina esta el la 2 planta salto una ;si no salta a llamada3 ;acceso al banco 1 ;pulsador de 2 planta como entrada ;acc eso al banco 0 ;desconecta el motor en sentido descendente ;desconecta el motor en sentido ascendente ;espera 5 seg comprobando los pulsadores

llamada3 btfsc portb,0 siguiente linea

;si llamada3 esta pulsada salto la

goto llamada4 btfsc portb,6 una linea goto llamada4 bsf status,5 bsf trisb,0 bcf status,5 bcf porta,1 bcf porta,2 call bucle5 llamada4 btfsc porta,4 siguiente linea goto llamada5 btfsc portb,7 una linea goto llamada5 bsf status,5 bsf trisa,4 bcf status,5 bcf porta,1 bcf porta,2 call bucle5 llamada5 btfsc porta,3 siguiente linea goto llamadafin btfsc porta,0 una linea goto llamadafin bsf status,5 bsf trisa,3 bcf status,5 bcf porta,1 bcf porta,2 call bucle5 llamadafin nop return

;si no voy a llamada4 ;si la cabina esta el la 3 planta salto ;si no salta a llamada4 ;acceso al banco 1 ;pulsador de 3 planta como entrada ;acceso al banco 0 ;desconecta el motor en sentido descendente ;desconecta el motor en sentido ascendente ;espera 5 seg comprobando los pulsadores ;si llamada4 esta pulsada salto la ;si no voy a llamada5 ;si la cabina esta el la 4 planta salto ;si no salta a llamada5 ;acceso al banco 1 ;pulsador de 4 planta como e ntrada ;acceso al banco 0 ;desconecta el motor en sentido descendente ;desconecta el motor en sentido ascendente ;espera 5 seg comprobando los puls adores ;si llamada5 esta pulsada salto la ;si no voy a llamadafin ;si la cabina esta el la 5 planta salto ;si no salta a llamadafin ;acceso al banco 1 ;pulsador de 5 planta como entrada ;acceso al banco 0 ;desconecta el motor en sentido d escendente ;desconecta el motor en sentido ascendente ;espera 5 seg comprobando los pulsadores

; 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 pulsadores. movwf

50 reg1

; (decimal) numero de veces que voy a

ciclo3 call pulsadores pulsadores movlw 30 movwf reg2 ciclo2 movlw microsegundos movwf ciclo linea decfsz goto decfsz linea goto decfsz goto return ciclo2 reg1,1 ciclo3 0xff reg3 reg3,1 ciclo reg2,1

; continuamente voy a la rutina de ; t=766(30+90+1)= 92686 microsegundos ;ff equivale a 255, t=(255x3)+1 = 766

; comienza a restar. cuando sea 0 salta 1 ; sigue restando hasta que llege a 0 ; resta 1 a reg2.cuando sea 0 se saltara una

; idem ; 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 microsegundos movwf espero decfsz salta 1 linea 0xff ;ff equivale a 255, reg4 reg4,1 ; c omienza a restar. cuando sea 0 t=(255x3)+1 = 766

goto return end

espero

; sigue restando hasta que llege a 0 ; vuelvo donde se hizo la llamada

:020000040000FA :100000000128831619308500FF3086008312851081 :10001000051100005420A2201620542005190B2899 :10002000A2203520542085181028092800008618A1 :100030001B28061E051506182128061E0515861EF6 :100040000515051A2928061E0515861E0515061F05 :10005000051585193328061E0515861E0515061F6C :100060000515861F0515000008000000051A3A282E :10007000051C851406184028861F8514051C851448 :1000800086184828061F8514861F8514051C8514AC :1000900006195228861E8514061F8514861F85148E :1000A000051C8514000008000000061A5D2 8831650 :1000B0000612861683120612E520861A6628831613 :1000C00086120616061783128612E520061B6F2875 :1000D000831606138616861783120613E520861BE1 :1000E0007828831686130617051483128613E520D5 :1000F0000518802883160510861783120510E52041 :100100000000061987288316061 183120611861827 :100110008D2883168610831286100618932883165E :10012000061083120610051A9928831605128312E9 :10013000051285199F2883168511831285110000E9 :10014000E520080000000619AD28061AAD28831620 :100150000615831285100511D7208618B728861A30 :10016000B7288316861 4831285100511D720061828 :10017000C128061BC1288316061483128510051199 :10018000D720051ACB28861BCB2883160516831289 :1001900085100511D7208519D5280518D52883166F :1001A0008515831285100511D720000008005030F6 :1001B0008C00542030308D00FF308E008E0BDE28F6 :1001C0008D0 BDC288C0BD9280800FF308F008F0B9B :0401D000E728080014 :02400E00F13F80 :00000001FF

S-ar putea să vă placă și