You are on page 1of 7

LIST P=16F877A

#INCLUDE

<P16F877A.INC>;

ERRORLEVEL 1;-302 ;
__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF &_XT_OSC & _WDT_OFF

#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE

SERVO1
SERVO2
SERVO3
SERVO4
SERVO5
SERVO6
SERVO7
SERVO8

PORTD,0
PORTD,1
PORTD,2
PORTD,3
PORTD,4
PORTD,5
PORTD,6
PORTD,7

;
;
;
;
;
;
;
;

SALIDA
SALIDA
SALIDA
SALIDA
SALIDA
SALIDA
SALIDA
SALIDA

SERVO
SERVO
SERVO
SERVO
SERVO
SERVO
SERVO
SERVO

1
2
3
4
5
6
7
8

#DEFINE PULSADOR1 PORTB,0


#DEFINE PULSADOR2 PORTB,1
;***** VARIABLES
CBLOCK 0X20
ACUM_A ; VARIABLE MOMENTNEA
POSIC ; POSICIN SERVO
POSIC1
POSIC2
POSIC3
POSIC4
POSIC5
POSIC6
POSIC7
UBICACIONA1
UBICACIONA2
UBICACIONA3
UBICACIONA4
UBICACIONA5
UBICACIONA6
UBICACIONA7
UBICACIONA8
ENDC
;*******************************************************************************
****
ORG 0X000
GOTO INICIO
;*******************************************************************************
****
; PRINCIPAL
;*******************************************************************************
****

INICIO
CLRF
CLRF
CLRF
CLRF

PORTA ; LIMPIAR PORTS


PORTB
PORTC
PORTD

BSF STATUS,RP0 ; APUNTA A BANCO 1


MOVLW
MOVWF
MOVLW
MOVWF

D'00000000' ; PORTA
TRISA ; SALIDAS
B'11111111' ; PORTB
TRISB ; ENTRADAS

MOVLW B'11111111' ; PORTD


MOVWF TRISD ; ENTRADAS
MOVLW B'00000010' ; CONFIGURACIN PARA TMR0
MOVWF OPTION_REG ; PREESCALER 2, 1:8 CON CLK INTERNO (QUE ES
; DE 1 MHZ SI EL OSCILADOR ES DE 4 MHZ).
; EL CONTADOR CUENTA CADA 8 USEG
BCF STATUS,RP0 ; APUNTA A BANCO 0
CLRF TMR0 ; INICIA REGISTRO DE TIMER EN 0
MOVLW
MOVWF
MOVWF
MOVWF
MOVWF
MOVWF
MOVWF

D'133' ; INICIA VALOR DE POSICIN DE SERVO (CENTRO)


POSIC
POSIC1
POSIC2
POSIC3
POSIC4
POSIC5

;*******************************************************************************
****
; PROGRAMA PRINCIPAL
;*******************************************************************************
****
PRINCIPAL
BSF SERVO1
BCF INTCON,T0IF
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO1 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO2 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER

MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS


MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC1,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO2 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO3 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC2,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO3 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO4 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC3,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO4 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO5 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC4,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO5 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER

;-----------------------------------------------------------------------------BSF SERVO6 ; PONE LA SEAL DE SERVO EN 1


BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC5,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO6 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO7 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC6,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO7 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO8 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC7,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO8 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------RETAR
MOVLW D'6' ; CANTIDAD DE VECES: 9 X 2 MS = 18 MS + 2 MS
MOVWF ACUM_A
RETARDO

BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER


MOVLW D'127' ; (256-127 = 129) 129 * 8 US = 1 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
DECFSZ ACUM_A ; DECREMENTA CANTIDAD DE VECES
GOTO RETARDO
PULSADORES ; LEE RDENES A TRAVS DE PULSADORES
GOTO INICIAPOS
BTFSS PULSADOR1
GOTO INCPOS
BTFSS PULSADOR2
GOTO DECPOS
GOTO SAVEUBICACIONE
GOTO PRINCIPAL
;---------------------------------------------------------------------------INICIAPOS
MOVLW D'133' ; 256-133 = 123, 123 * 8 US = 984 US + 512 US
MOVWF POSIC ; POSICIN CENTRAL EN ESTA DISPOSICIN
MOVWF POSIC1 ; POSICIN CENTRAL EN ESTA DISPOSICIN
MOVWF POSIC2 ; POSICIN CENTRAL EN ESTA DISPOSICIN
MOVWF POSIC3 ; POSICIN CENTRAL EN ESTA DISPOSICIN
MOVWF POSIC4 ; POSICIN CENTRAL EN ESTA DISPOSICIN
MOVWF POSIC5 ; POSICIN CENTRAL EN ESTA DISPOSICIN
GOTO PRINCIPAL ; Y SALE
RUTINA
BSF SERVO1 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO1 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO2 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC1,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO2 ; PONE LA SEAL DE SERVO EN 0

BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER


;-----------------------------------------------------------------------------BSF SERVO3 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC2,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO3 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO4 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC3,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO4 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO5 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC4,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO5 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------BSF SERVO6 ; PONE LA SEAL DE SERVO EN 1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'192' ; (256-192 = 64) 64 * 8 US = 0,512 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVF POSIC5,W ; 256-NN X 8 US = 1 MS, 1,5 MS, 2,5 MS

MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER


BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
BCF SERVO6 ; PONE LA SEAL DE SERVO EN 0
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
;-----------------------------------------------------------------------------RETAR1
MOVLW D'6' ; CANTIDAD DE VECES: 9 X 2 MS = 18 MS + 2 MS
MOVWF ACUM_A
RETARDO1
BCF INTCON,T0IF ; BORRA EL FLAG DE TIMER
MOVLW D'127' ; (256-6 = 250) 250 * 8 US = 2 MS
MOVWF TMR0 ; VALOR AL REGISTRO DE TIMER
BTFSS INTCON,T0IF ; ESPERA POR TIMER = FF -> 00
GOTO $-1
DECFSZ ACUM_A ; DECREMENTA CANTIDAD DE VECES
GOTO RETARDO1
RETURN
END

You might also like