;############################################################# ; Fichero : CONTROL MOTORES.asm ; Autor : modificado por Pedro Pablo Barroso cogido por de una pagina de internet. ; Fecha: Febrero 2003. ; Version:0.0 ; Sistema RAD-MICROS. ; Placa Microcontroladora: ; Placa de Aplicaciones: ; Placa de programacion: programador Superpro II/P (Xeltek ). ; Bus: bus-40. ; Codigo para: PIC16F84A ; Clock: RC. -> Ciclo = 1 uS. ; Reset: Power On Reset. ; Watch dog: Inhabilitado. ; Proteccion de codigo: Inhabilitado. ; Ficheros requeridos: ; Funcion : Controla un motor paso a paso ;############################################################# ;####################CABECERAS################################ LIST P=16F84 LIST C=132 ;####################DEFINICIONES############################# PB_TB EQU 0X06 ;PUERTA B y TRIS B PA_TA EQU 0X05 ;PUERTA A Y TRIS A ESTADO EQU 0X03 ;DIRECCION DE ESTADO TMR0_OPT EQU 0X01 ;REGISTRO DE OPTION INTCON EQU 0X0B ;REGISTRO DE INTERRUPCIONES DELAY1 EQU 0X0D ;VALOR DEL RETRASO1 DELAY2 EQU 0X0C ;VALOR DEL RETRASO2 DELAY3 EQU 0X1C ;VALOR DEL RETRASO3 DELAY4 EQU 0X2C ;VALOR DEL RETRASO3 ;####################COMIENZO DEL PROGRAMA#################### ORG 0X00 GOTO INICIO ORG 0X05 ;####################PROGRAMA PRINCIPAL####################### INICIO BSF ESTADO,5 ;VOY AL BANCO 1 MOVLW 0X07 ;OPTION = 00000111 MOVWF TMR0_OPT MOVLW 0X00 ;PONEMOS A 00000000 INTCON MOVWF INTCON ;SIN INTERRUPCION (ver notas de programa) MOVLW 0X00 ;CARGAMOS LA PUERTA B DE SALIDA MOVWF PB_TB ;PUERTA B = 00000000 MOVLW 0X1F ;PUERTA A = 00011111 MOVWF PA_TA ;CARGAMOS LA PUERTA A COMO ENTRADA BCF ESTADO,5 CLRF PA_TA ;LIMPIAMOS PUERTA A CLRF PB_TB ;LIMPIAMOS PUERTA PRINC CLRF PB_TB BTFSC PA_TA,0 ;INTERRUPTOR GOTO HORARIO BTFSC PA_TA,1 ;INTERRUPTOR GOTO AHORARIO GOTO PRINC ;VUELTA A RUTINA ;#######################FIN PROGRAMA PRINCIPAL############################### ;#######################RUTINAS############################################## ;************************************************************ ; RUTINA: PARADO ; Entrada: nada ; Salida: nada. ; Variables utilizadas: nada. ;************************************************************ PARADO MOVLW 0X00 MOVWF PB_TB CALL PAUSA GOTO PRINC ;************************************************************ ; FIN DE RUTINA: PARADO ;************************************************************ ;************************************************************ ; RUTINA: HORARIO ; Entrada: nada ; Salida: nada. ; Variables utilizadas: nada. ;************************************************************ HORARIO BTFSC PA_TA,1 ;CARGO RUTINA DE PARADO POR CONDICIÓN DE SEÑAL ALTO-ALTO GOTO PARADO MOVLW 0X0D ;NO CUMPLE ANTERIOR CONDICION, CARGO MOVIMIENTO HORARIO MOVWF PB_TB CALL PAUSA ;RETRASO MOVLW 0X0F MOVWF PB_TB CALL PAUSA ;RETRASO MOVLW 0X07 MOVWF PB_TB CALL PAUSA ;RETRASO MOVLW 0X05 MOVWF PB_TB CALL PAUSA ;RETRASO BTFSC PA_TA,1 ;REPITO VIGILANCIA DE INTERRUPTOR DE PARADO GOTO PARADO BTFSC PA_TA,0 ;COMPRUEBO SI INTERRUPTOR HORARIO CUMPLE GOTO HORARIO GOTO PRINC ;VUELVE A RUTINA PRINCIPAL ;************************************************************ ; FIN DE RUTINA: HORARIO ;************************************************************ ;************************************************************ ; RUTINA: AHORARIO ; Entrada: nada ; Salida: nada. ; Variables utilizadas: nada. ;************************************************************ AHORARIO BTFSC PA_TA,0 ;COMPRUEBO CONDICION DE PARADO POR ALTO-ALTO GOTO PARADO MOVLW 0X05 ;BINARIO 00001101 MOVWF PB_TB CALL PAUSA ;RETRASO MOVLW 0X07 ;BINARIO 00000101 MOVWF PB_TB CALL PAUSA ;RETRASO MOVLW 0X0F ;BINARIO 00000111 MOVWF PB_TB CALL PAUSA ;RETRASO MOVLW 0X0D ;BINARIO 00001111 MOVWF PB_TB CALL PAUSA ;RETRASO BTFSC PA_TA,0 ;COMPRUEBO INTERRUPTOR POR SI CUMPLE CONDICION ALTO-ALTO GOTO PARADO BTFSC PA_TA,1 ;COMPRUEBO SI INTERRUPTOR AHORARIO CUMPLE GOTO AHORARIO GOTO PRINC ;VUYELVE A RUTINA PRINCIPAL ;************************************************************ ; FIN DE RUTINA: AHORARIO ;************************************************************ ;************************************************************ ; RUTINA: PAUSA ; Entrada: nada ; Salida: nada. ; Variables utilizadas: nada. ;************************************************************ PAUSA MOVLW 0X06 ;SE PUEDE REDUCIR ESTABA 0X06 A 4 PERO AL RATO EMPIEZA A FALLAR MOVWF DELAY1 ;************************************************************ ; FIN DE RUTINA: PAUSA ;*********************************************************** ;************************************************************ ; RUTINA: PAUSA2 ; Entrada: nada ; Salida: nada. ; Variables utilizadas: nada. ;************************************************************ PAUSA2 MOVLW 0XFF MOVWF DELAY2 ;************************************************************ ; FIN DE RUTINA: PAUSA2 ;*********************************************************** ;************************************************************ ; RUTINA: PAUSA1 ; Entrada: nada ; Salida: nada. ; Variables utilizadas: nada. ;************************************************************ PAUSA1 DECFSZ DELAY2,1 GOTO PAUSA1 DECFSZ DELAY1,1 GOTO PAUSA2 RETURN ;************************************************************ ; FIN DE RUTINA: PAUSA1 ;*********************************************************** ;################## FIN DE RUTINAS ########################## ;################## FIN DE PROGRAMA ######################## END