Está en la página 1de 3

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 <H16f84a.inc> ; 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

También podría gustarte