; Control de lavarropas automático ; Rev. 01 // 04-OCT-2003 // cprog equ 0x02 ;contador de programa (parte baja) estado equ 0x03 ;Registro de estados del micro ptoa equ 0x05 ;Puertos de E/S ptob equ 0x06 ptoc equ 0x07 tiempo1 equ 0x20 ;Usados para temporizar tiempo2 equ 0x21 tiempo3 equ 0x22 veces equ 0x23 display equ 0x24 ;Resguarda el numero mostrado en el display general equ 0x25 #define RP0 estado, 5 ;Bits de selección de página de memoria #define SELECT ptoa, 0 ;Entrada de selección de programa #define START ptoa, 1 ;Entrada de inicio del proceso #define MEDIA ptoa, 2 ;Entrada de la llave de media carga #define NOCENT ptoa, 3 ;Entrada de la llave de exclusión de centrifugado #define PRES50 ptoa, 4 ;Entrada del presostato a media carga #define PRES100 ptoa, 5 ;Entrada del presostato a carga completa #define BUZZER ptob, 7 ;Control del parlante piezo #define MOTFAST ptob, 6 ;Motor a alta velocidad #define MOTSLOW ptob, 5 ;Motor a baja velocidad #define CALEF ptob, 4 ;Control del sistema de calentamiento del agua #define VALVULA ptob, 3 ;Entrada de agua (electroválvula) #define BOMBA ptob, 2 ;Salida de agua (desagote) #define SERVON ptob, 1 ;Alimentación del servo selector de producto #define SERVPUL ptob, 0 ;Pulsos de control del servo selector de producto #define PAUSA general, 0 ;Indica que entre programa y programa haga una pausa goto INICIO ;Saltea la tabla del display TABLA addwf cprog, 1 ;Genera los números y caracteres en el display retlw b'00111111' ; 0 retlw b'00000110' ; 1 retlw b'01011011' ; 2 retlw b'01001111' ; 3 retlw b'01100110' ; 4 retlw b'01101101' ; 5 retlw b'01111101' ; 6 retlw b'00000111' ; 7 retlw b'01111111' ; 8 retlw b'01101111' ; 9 retlw b'01000000' ; - (10) retlw b'01111001' ; E (11) retlw b'01110001' ; F (12) retlw b'01110011' ; P (13) INICIO clrf ptoa ;Arranca con todo apagado clrf ptob clrf ptoc clrf general ;Flags en cero bsf RP0 ;configura los pines de E/S movlw b'00000110' movwf 0x1F movlw b'00111111' movwf ptoa clrf ptob clrf ptoc bcf RP0 movlw d'10' ;Coloca el '-' en el display durante 5 segundos call TABLA movwf ptoc movlw d'10' movwf tiempo3 bsf ptoc, 7 ;Hace destellar el punto del display call DEL250 bcf ptoc, 7 ;Hace destellar el punto del display call DEL250 btfss START ;Entra en modo pausa al presionar cualquier pulsador durante el - goto SETPAP ;Acciona el mecanismo paso a paso btfss SELECT goto SETPAP ;Acciona el mecanismo paso a paso decfsz tiempo3, 1 goto $ -9 goto AUTOM ;Saltea la sección donde coloca la 'P' SETPAP movlw d'13' ;Coloca la P en el display call TABLA movwf ptoc bsf PAUSA ;Acciona el flag de Paso a Paso call BEEP call DEL250 btfss SELECT ;Espera que suelte ambos pulsadores goto $ -2 btfss START goto $ -4 AUTOM btfsc PRES50 ;Si hay agua en el tanque desagota totalmente goto SEL1C movlw d'11' ;Coloca el 'E' en el display call TABLA movwf ptoc call BEEP call DEL250 call BEEP call DEL250 call BEEP bsf BOMBA ;Enciende la bomba de desagote btfss PRES50 ;Espera que el presostato indique tanque vacío goto $ -1 call DIEZSEG call DIEZSEG bcf BOMBA ;Desconecta la bomba SEL1C movlw d'1' ;Arranca en programa corto 1 call TABLA movwf ptoc call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL2C btfss START ;Controla el pulsador para iniciar el programa goto START1C goto $ -4 SEL2C movlw d'2' ;Programa corto 2 call TABLA movwf ptoc call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL3C btfss START ;Controla el pulsador para iniciar el programa goto START2C goto $ -4 SEL3C movlw d'3' ;Programa corto 3 call TABLA movwf ptoc call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL4C btfss START ;Controla el pulsador para iniciar el programa goto START3C goto $ -4 SEL4C movlw d'4' ;Programa corto 4 call TABLA movwf ptoc call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL5C btfss START ;Controla el pulsador para iniciar el programa goto START4C goto $ -4 SEL5C movlw d'5' ;Programa corto 5 call TABLA movwf ptoc call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL6C btfss START ;Controla el pulsador para iniciar el programa goto START5C goto $ -4 SEL6C movlw d'6' ;Programa corto 6 call TABLA movwf ptoc call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL1L btfss START ;Controla el pulsador para iniciar el programa goto START6C goto $ -4 SEL1L movlw d'1' ;Programa largo 1 call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto decimal del display call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL2L btfss START ;Controla el pulsador para iniciar el programa goto START1L goto $ -4 SEL2L movlw d'2' ;Programa largo 2 call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto decimal del display call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL3L btfss START ;Controla el pulsador para iniciar el programa goto START2L goto $ -4 SEL3L movlw d'3' ;Programa largo 3 call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto decimal del display call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL4L btfss START ;Controla el pulsador para iniciar el programa goto START3L goto $ -4 SEL4L movlw d'4' ;Programa largo 4 call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto decimal del display call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL5L btfss START ;Controla el pulsador para iniciar el programa goto START4L goto $ -4 SEL5L movlw d'5' ;Programa largo 5 call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto decimal del display call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL6L btfss START ;Controla el pulsador para iniciar el programa goto START5L goto $ -4 SEL6L movlw d'6' ;Programa largo 6 call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto decimal del display call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL7L btfss START ;Controla el pulsador para iniciar el programa goto START6L goto $ -4 SEL7L movlw d'7' ;Programa largo 7 call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto decimal del display call BEEP call DEL250 ;Evita repeticiones por pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 btfss SELECT ;Controla el pulsador para cambiar de programa goto SEL1C btfss START ;Controla el pulsador para iniciar el programa goto START7L goto $ -4 START1C call BEEP call BOX1 ;Selecciona la carga de agua por el box 1 (prelavado) call CARGAR ;Carga agua en el tanque movlw d'6' ;Ejecuta un ciclo de lavado de 10 min. call LAVAR call VACIAR ;Desagota el tanque START2C call BEEP movlw d'2' ;Muestra el 2 en el display call TABLA movwf ptoc btfss PAUSA ;Si esta pausado... goto SIGUE2C btfsc START ;Espera que presione el pulsador goto $ -7 SIGUE2C call BOX2 ;Selecciona la carga de agua por el box 2 (jabón) call CARGAR ;Carga agua en el tanque movlw d'6' ;Ejecuta un ciclo de lavado de 10 min. call LAVAR call VACIAR ;Desagota el tanque START3C call BEEP movlw d'3' ;Muestra el 3 en el display call TABLA movwf ptoc btfss PAUSA ;Si esta pausado... goto SIGUE3C btfsc START ;Espera que presione el pulsador goto $ -7 SIGUE3C call BOX2 ;Selecciona la carga de agua por el box 2 (jabón) call CARGAR ;Carga agua en el tanque movlw d'6' ;Ejecuta un ciclo de lavado de 10 min. call LAVAR call VACIAR ;Desagota el tanque START4C call BEEP movlw d'4' ;Muestra el 4 en el display call TABLA movwf ptoc btfss PAUSA ;Si esta pausado... goto SIGUE4C btfsc START ;Espera que presione el pulsador goto $ -7 SIGUE4C call BOX2 ;Selecciona la carga de agua por el box 2 (jabón) call CARGAR ;Carga agua en el tanque movlw d'51' ;Ejecuta un ciclo de lavado de 25 min. call LAVAR call VACIAR ;Desagota el tanque START5C call BEEP movlw d'5' ;Muestra el 5 en el display call TABLA movwf ptoc btfss PAUSA ;Si esta pausado... goto SIGUE5C btfsc START ;Espera que presione el pulsador goto $ -7 SIGUE5C call BOX3 ;Selecciona la carga de agua por el box 3 (enjuague) call CARGAR ;Carga agua en el tanque movlw d'24' ;Ejecuta un ciclo de lavado de 16 min. call LAVAR call VACIAR ;Desagota el tanque START6C call BEEP movlw d'6' ;Muestra el 6 en el display call TABLA movwf ptoc btfss PAUSA ;Si esta pausado... goto SIGUE6C btfsc START ;Espera que presione el pulsador goto $ -7 SIGUE6C call CENTRIF ;Centrifugado movlw d'12' ;Coloca la 'F' en el display call TABLA movwf ptoc call BEEPFIN ;Hace tres beep's largos btfsc SELECT ;Espera que presione el pulsador goto $ -1 movlw d'10' ;Coloca el '-' en el display call TABLA movwf ptoc call DEL250 ;Previene rebotes en pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 goto SEL1C ;Vuelve al comienzo del programa 1 corto START1L call BEEP call BOX1 ;Selecciona la carga de agua por el box 1 (prelavado) call CARGAR ;Carga agua en el tanque movlw d'6' ;Ejecuta un ciclo de lavado de 10 min. call LAVAR call VACIAR ;Desagota el tanque START2L call BEEP movlw d'2' ;Muestra el 2 en el display call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto del display btfss PAUSA ;Si esta pausado... goto SIGUE2L btfsc START ;Espera que presione el pulsador goto $ -8 SIGUE2L call BOX2 ;Selecciona la carga de agua por el box 2 (jabón) call CARGAR ;Carga agua en el tanque movlw d'21' ;Ejecuta un ciclo de lavado de 15 min. call LAVAR call VACIAR ;Desagota el tanque START3L call BEEP movlw d'3' ;Muestra el 3 en el display call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto del display btfss PAUSA ;Si esta pausado... goto SIGUE3L btfsc START ;Espera que presione el pulsador goto $ -8 SIGUE3L call BOX2 ;Selecciona la carga de agua por el box 2 (jabón) call CARGAR ;Carga agua en el tanque movlw d'21' ;Ejecuta un ciclo de lavado de 15 min. call LAVAR call VACIAR ;Desagota el tanque START4L call BEEP movlw d'4' ;Muestra el 4 en el display call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto del display btfss PAUSA ;Si esta pausado... goto SIGUE4L btfsc START ;Espera que presione el pulsador goto $ -8 SIGUE4L call BOX2 ;Selecciona la carga de agua por el box 2 (jabón) call CARGAR ;Carga agua en el tanque movlw d'51' ;Ejecuta un ciclo de lavado de 25 min. call LAVAR call VACIAR ;Desagota el tanque START5L call BEEP movlw d'5' ;Muestra el 5 en el display call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto del display btfss PAUSA ;Si esta pausado... goto SIGUE5L btfsc START ;Espera que presione el pulsador goto $ -8 SIGUE5L call BOX2 ;Selecciona la carga de agua por el box 2 (jabón) call CARGAR ;Carga agua en el tanque movlw d'21' ;Ejecuta un ciclo de lavado de 15 min. call LAVAR call VACIAR ;Desagota el tanque START6L call BEEP movlw d'6' ;Muestra el 5 en el display call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto del display btfss PAUSA ;Si esta pausado... goto SIGUE6L btfsc START ;Espera que presione el pulsador goto $ -8 SIGUE6L call BOX3 ;Selecciona la carga de agua por el box 3 (enjuague) call CARGAR ;Carga agua en el tanque movlw d'90' ;Ejecuta un ciclo de lavado de 38 min. call LAVAR call VACIAR ;Desagota el tanque START7L call BEEP movlw d'7' ;Muestra el 7 en el display call TABLA movwf ptoc bsf ptoc, 7 ;Enciende el punto del display btfss PAUSA ;Si esta pausado... goto SIGUE7L btfsc START ;Espera que presione el pulsador goto $ -8 SIGUE7L call CENTRIF ;Centrifugado movlw d'12' ;Coloca la 'F' en el display call TABLA movwf ptoc call BEEPFIN ;Hace tres beep's largos btfsc SELECT ;Espera que presione el pulsador goto $ -1 movlw d'10' ;Coloca el '-' en el display call TABLA movwf ptoc call DEL250 ;Previene rebotes en pulsadores garcha btfss SELECT ;Espera que suelte el pulsador goto $ -2 goto SEL1L ;Vuelve al comienzo del programa 1 corto BOX1 BOX2 BOX3 BOX4 return CARGAR bsf VALVULA ;Conecta la electroválvula btfsc MEDIA ;Verifica si debe cargar a media o completo goto MITAD btfss PRES100 ;Mira el presostato a 100% goto LLENO ;Si se lleno termina la carga goto CARGAR ;Si no se lleno espera que termine la carga MITAD btfss PRES50 ;Mira el presostato al 50% goto LLENO ;Si alcanzó el nivel termina la carga goto CARGAR ;Si no alcanzó el nivel espera que llegue LLENO bcf VALVULA ;Desconecta la electroválvula return ;//////////////////////////////////////////////////////////////////////////////////////// ;PROCESO DE LAVADO ;Demora 6 minutos en cargar el agua y dos minutos mas en descargarla ;Por lo que el tiempo total del lavado es igual a 8 min + (W * 20 seg) ;Lavado de 10 min -> W = 6 ;Lavado de 15 min -> W = 21 ;Lavado de 16 min -> W = 24 ;Lavado de 25 min -> W = 51 ;Lavado de 38 min -> W = 90 ;//////////////////////////////////////////////////////////////////////////////////////// LAVAR movwf veces ;Utiliza W para condicionar la cant. de ciclos de lavado LAVAMAS bsf MOTSLOW ;Enciende el motor en baja velocidad durante 10 segundos movf ptoc, 0 ;Resguarda el numero mostrado en el display movwf display call DIEZANI bcf MOTSLOW ;Apaga el motor durante 10 segundos movf display, 0 ;restaura el display a su estado normal movwf ptoc call DIEZSEG decfsz veces, 1 goto LAVAMAS return VACIAR bsf BOMBA ;Acciona la bomba de desagote btfss PRES50 ;Espera que se vacíe completamente el tanque goto $ -1 call DIEZSEG ;Espera 20 segundos extra call DIEZSEG bcf BOMBA ;Desconecta la bomba return CENTRIF btfsc NOCENT ;Si esta en modo no-centrifugar return ;Evita hacerlo btfsc PRES50 ;Mira si hay agua en el tanque goto CENT2 ;Si no hay agua va directamente a centrifugar bsf BOMBA ;Enciende la bomba de desague btfss PRES50 goto $ -1 call DIEZSEG call DIEZSEG bcf BOMBA ;Una vez que se vacia el tanque apaga la bomba CENT2 bsf MOTFAST ;Enciende el motor a alta velocidad bsf BOMBA ;Activa el desagote (por si con suelte escurre algo) call DIEZSEG ;Un minuto con bomba a pleno call DIEZSEG call DIEZSEG call DIEZSEG call DIEZSEG call DIEZSEG movlw d'4' ;Espera 2 minutos y monedas con la bomba intermitente movwf veces bsf BOMBA ;Enciende la bomba de desagote call DIEZSEG bcf BOMBA ;Apaga la bomba call DIEZSEG call DIEZSEG call DIEZSEG decfsz veces, 1 goto $ -7 bcf MOTFAST ;Apaga el motor return DIEZANI movlw d'10' movwf tiempo3 call ANIM decfsz tiempo3, 1 goto $ -2 return ANIM movlw b'00100000' movwf ptoc call DEL250 movlw b'00000001' movwf ptoc call DEL250 movlw b'00000010' movwf ptoc call DEL250 movlw b'01000000' movwf ptoc call DEL250 return DIEZSEG movlw d'40' ;Demora de 10 segundos goto $ +2 UNSEG movlw d'4' ;Demora de 1 segundo movwf tiempo3 call DEL250 decfsz tiempo3, 1 goto $ -2 return DEL250 movlw d'250' ;Demora de 1/4 de segundo movwf tiempo2 TOP2 movlw d'110' movwf tiempo1 TOP1 nop nop nop nop nop nop decfsz tiempo1, 1 goto TOP1 decfsz tiempo2, 1 goto TOP2 return BEEPFIN movlw d'7' ;Hace tres beep's largos movwf veces call BEEP decfsz veces, 1 goto $ -2 call DEL250 movlw d'7' movwf veces call BEEP decfsz veces, 1 goto $ -2 call DEL250 movlw d'7' movwf veces call BEEP decfsz veces, 1 goto $ -2 return BEEP movlw d'75' movwf tiempo2 bsf BUZZER call DEL55 bcf BUZZER call DEL55 decfsz tiempo2, 1 goto $ -5 return DEL55 movlw d'55' ;Demora de medio milisegundo movwf tiempo1 T1 nop nop nop nop nop nop decfsz tiempo1, 1 goto T1 return end