El siguiente programa controla el carro Funcion : Controla el carro con 2 motores, 1 bumper y 1 sensor. ;############################################################# ;#################### CABEZERAS ############################## LIST p=PIC16F84A ; Directiva para definir micro. #include ; Fichero standard de cabezera. __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;#################### DEFINICIONES ########################### w_temp EQU 0x0C ; Variable para guardar W. status_temp EQU 0x0D ; Variable para guardar STATUS. con0 EQU 0x0E ; Variable de temporizacion. con1 EQU 0x0F ; Variable de temporizacion. con2 EQU 0x10 ; Variable de temporizacion. des EQU 0x11 ; Unidades. ;################ COMIENZO DEL PROGRAMA ##################### ORG 0x00 ; Vector de Reset. GOTO inicio ; Programa Principal. ;################ PROGRAMA PRINCIPAL ######################### inicio BSF STATUS,RP0 ; Banco 1 MOVLW B'11000000' MOVWF TRISB ;Configuramos I/O PORTB MOVLW B'00000000' MOVWF TRISA ; Configuramos I/O PORTA BCF STATUS,RP0 ; Banco 0 CLRF PORTB ini2 MOVLW 0xFF MOVWF des ini3 BTFSS PORTB,7 ;salta si es 1 no hay choque GOTO choque BTFSS PORTB,6 ;salta si el sensor pone a 1 GOTO ini4 GOTO choque ini4 INCF des,1 ;incrementa desplazamiento PAP MOVF des,W SUBLW 0x04 BTFSS STATUS,Z ; fin del desplazamiento PAP GOTO alante GOTO ini2 alante MOVF des,W CALL frente MOVWF PORTB ;mueve motor 1 MOVWF PORTA ;mueve motor 2 CALL delay ;para que no gire demasiado rápido GOTO ini3 choque CLRF PORTA MOVF des,W CALL frente MOVWF PORTB ;mueve motor 1 supuesto esta a derecha
CALL delay BTFSS PORTB,7 GOTO girad BTFSS PORTB,6 GOTO ini4 girad CLRF PORTB MOVF des,W CALL frente MOVWF PORTA ;mueve motor 2 de la izquierda INCF des,1 MOVF des,W SUBLW 0x04 BTFSS STATUS,Z ; fin del desplazamiento PAP GOTO cont CLRF des cont MOVF des,W CALL frente MOVWF PORTA ;vuelve a moverle par recuperar el giro a der. BTFSS PORTB,7 GOTO atrás BTFSS PORTB,6 GOTO ini4 atrás MOVF des,W CALL detrás MOVWF PORTB MOVWF PORTA MOVWF PORTB MOVWF PORTA ;realiza dos pasos atrás GOTO ini4 ;************************************************************ ; RUTINA: delay ; Función: Produce un retardo ; Entrada: nada ; Salida: nada ; Variables utilizadas: con1, con2 ;************************************************************ delay MOVLW 0x10 MOVWF con1 MOVLW 0x01 MOVWF con2 loop DECFSZ con1,F GOTO loop DECFSZ con2,F GOTO loop RETURN ;************************************************************ ; FIN DE RUTINA: delay ;************************************************************ ;************************************************************ ; RUTINA: frente ; Función: Tabla para mover motor PAP 1 ; Entrada: valor en W. ; Salida: RB0 a RB3 a activar --> W. ; Variables utilizadas: nada ;************************************************************ frente ADDWF PCL,F
RETLW B'00001010' ; --> paso 1 RETLW B'00001001' ; --> paso 2 RETLW B'00000101' ; --> paso 3 RETLW B'00000110' ; --> paso 4 ;************************************************************ ; FIN DE RUTINA: frente ;************************************************************ ;************************************************************ ; RUTINA: detrás ; Función: Tabla para girar a izq. motor PAP. ; Entrada: valor en W. ; Salida: salidas a --> W. ; Variables utilizadas: nada ;************************************************************ detrás ADDWF PCL,F RETLW B'00000110' ; --> paso 4 RETLW B'00000101' ; --> paso 3 RETLW B'00001001' ; --> paso 2 RETLW B'00001010' ; --> paso 1 ;******************************************************* ;################## FIN DE RUTINAS ########################## ;################## FIN DE PROGRAMA ######################## END ; Fin de programa.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4 NOS SIRVE PARA MANEJAR LOS MOTORES CONTINUOS ; ZONA DE DATOS # DEFINE ENTRADA DE MARCHA PORT A, O # DEFINE ENTRADA SENTIDO PORT A, 4 ; ZONA DE CODIGOS ORG 0 INICIO BSF STATUS, RP 0 BSF ENTRADA MARCHA BSF ENTRADA SENTIDO BSF PORT B BCF STATUS, RP 0 PRINCIPAL CLRW BTFSC ENTRADA MARCHA GOTO ACTIVA SALIDA MOVLW B'00010010' BTFSC ENTRADA SENTIDO MOVLW B'00010001' ACTIVA SALIDA MOVWF PORT B GOTO PRINCIPAL