Está en la página 1de 6

;******************************************************************************* ********************* ; ; PROGRAMA : ROBOT4.

ASM AUTOR:JORGE LEZANA FECHA: 30/7/2004 ; ;PROGRAMA PARA MOVER UNA ARAA SEGUN 3 POSICIONES DE LUZ, CON ESTO SE PUEDE HACER QUE CON ALGUNA ;COMBINACION ABANCE, SE DETENGA, GIRE ALA IZQUIERDA, GIRE ALA DERECHA, CADA SERV O ES CONTROLADO ;INDEPENDIENTEMENTE CON PULSOS QUE LIMITAN SU RECORRIDO A UN ANGULO ESPECIFICO, POR EJEMPLO ;PARA 90 SE LE ENVIA UN PULSO DE 1.5 MILISEGUNDOS, PARA 67 UN PULSO DE 1.2 MILISEG UNDOS ;PARA 112 UN PULO DE 1.8 MILISEGUNDOS, TODOS EN UNA FRECUENCIA DE 50 HZ ;PARA ESTO SE CALCULAN 4 NUMEROS AUXILIARES PARA LLEGAR A DICHOS TIEMPOS (2 PULS OS ALTOS Y ;2 PULSOS BAJOS) Y SE EMPLEAN RUTINAS. ; ; Revision : 1.0 Programa para : PIC16F84A ; Velocidad del reloj : 4 MHz Reloj instruccin: 1 MHz = 1 us, T= 4 us ; Perro Guardian : Deshabilitado Tipo de reloj : XT ; Proteccion del codigo : OFF ; ; ;******************************************************************************* ********************* LIST P=16F84A ;EL PIC QUE VAMOS A UTILIZAR.

;****************************** IGUALIDADES ************************************ ********************* w f ESTADO RP0 PCL PUERTAA PUERTAB ALTO_1 ALTO_2 BAJO_1 BAJO_2 HZ MAR 50HZ) EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0X00 0X01 0X03 0X05 0x02 0X05 0X06 0x0c 0x0d 0X0e 0x0f 0x1c ;DESTINO w (REGISTRO DE TRABAJO) ;DESTINO f (REGISTRO A USADO) ;ESTADO, ESTA EN LA DIRECCION 3 ;RP0 EQUIVALE A 5. ;DIRECCION DEL PCL (CONTADOR DEL PC) ;PUERTAA SE ENCUENTRA EN LA DIRECCION 5. ;PUERTAB SE ENCUENTRA EN LA DIRECCION 6. ;DIRECCION DEL REGISTRO DEL PULSO ALTO ;DIRECCION DEL REGISTRO DEL PULSO ALTO ;DIRECCION DEL REGISTRO DEL PULSO BAJO ;DIRECCION DEL REGISTRO DEL PULSO ALTO ;DIRECCION DEL REGISTRO HZ (50 VECES, PARA FOR

;***************** AQUI EMPIEZA EL PROGRAMA. *********************************** ********************* ORG goto ORG INICIO bsf movlw movwf clrf bcf 0 INICIO 5 ESTADO,RP0 b'00000111' PUERTAA PUERTAB ESTADO,RP0 ;Cambio al banco 1 ;2 bit de puerto A como entrada ;Puerta B como salida ;Cambio al banco 0 ;ORIGEN DEL PROGRAMA, AQUI EMPIEZA. ;VA A INICIO PARA SOBREPASAR ;EL VECTOR DE INTERRUPCION.

clrf clrf

PUERTAA PUERTAB

;Borro puerta A ;Borro puerta B

;******************** Leer las entrada para desplazar servo ******************** ********************* LEE_ENTRADA movf ee entradas) addwf goto goto goto goto goto goto goto goto QUIETO call call call goto call call call call call call call call goto call call call call call call call call goto call call call call call call call call goto PUERTAA,0 PCL,1 QUIETO IZQUIERDA ABANZA IZQUIERDA DERECHA QUIETO DERECHA ABANZA SV_1_90 SV_0_90 SV_2_90 LEE_ENTRADA SV_1_67 SV_0_112 SV_1_112 SV_2_67 SV_1_112 SV_0_67 SV_1_67 SV_2_112 LEE_ENTRADA SV_1_112 SV_0_112 SV_1_112 SV_2_67 SV_1_112 SV_0_67 SV_1_112 SV_2_112 LEE_ENTRADA SV_1_67 SV_0_67 SV_1_67 SV_2_112 SV_1_67 SV_0_112 SV_1_67 SV_2_67 LEE_ENTRADA ;Mueve el valor de la entrada al registro w (L ;Sumo este ;Si es 000 ;Si es 001 ;Si es 010 ;Si es 011 ;Si es 100 ;Si es 101 ;Si es 110 ;Si es 111 valor al PCL ejecuta QUIETO ejecuta IZQUIERDA ejecuta ABANZA ejecuta IZQUIERDA ejecuta DERECHA ejecuta QUIETO ejecuta DERECHA ejecuta ABANZA

ABANZA

IZQUIERDA

DERECHA

;************ Rutina para posicionar el servo en los 90 ************************* ******************* SV_0_90 movlw d'13'

ALTO_90_0 BAJO_90_0

movwf bsf call bcf call decfsz goto return movlw movwf bsf call bcf call decfsz goto return movlw movwf bsf call bcf call decfsz goto return

HZ PUERTAB,0 AL90 PUERTAB,0 BA90 HZ,1 ALTO_90_0 d'13' HZ PUERTAB,1 AL90 PUERTAB,1 BA90 HZ,1 ALTO_90_1 d'13' HZ PUERTAB,2 AL90 PUERTAB,2 BA90 HZ,1 ALTO_90_2

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

SV_1_90 ALTO_90_1 BAJO_90_1

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

SV_2_90 ALTO_90_2 BAJO_90_2

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

;************ Rutina para posicionar el servo en los 112.5 ********************** ******************* SV_0_112 movlw movwf ALTO_112_0 bsf call BAJO_112_0 bcf call decfsz goto return SV_1_112 movlw movwf ALTO_112_1 bsf call BAJO_112_1 bcf call decfsz goto return SV_2_112 movlw movwf ALTO_112_2 bsf call BAJO_112_2 bcf call decfsz goto d'8' HZ PUERTAB,0 AL112 PUERTAB,0 BA112 HZ,1 ALTO_112_0 d'8' HZ PUERTAB,1 AL112 PUERTAB,1 BA112 HZ,1 ALTO_112_1 d'8' HZ PUERTAB,2 AL112 PUERTAB,2 BA112 HZ,1 ALTO_112_2

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

return ;************ Rutina para posicionar el servo en los 67.5 *********************** ******************* SV_0_67 ALTO_67_0 BAJO_67_0 movlw movwf bsf call bcf call decfsz goto return movlw movwf bsf call bcf call decfsz goto return movlw movwf bsf call bcf call decfsz goto return d'8' HZ PUERTAB,0 AL67 PUERTAB,0 BA67 HZ,1 ALTO_67_0 d'8' HZ PUERTAB,1 AL67 PUERTAB,1 BA67 HZ,1 ALTO_67_1 d'8' HZ PUERTAB,2 AL67 PUERTAB,2 BA67 HZ,1 ALTO_67_2

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

SV_1_67 ALTO_67_1 BAJO_67_1

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

SV_2_67 ALTO_67_2 BAJO_67_2

;Pone a 1 el bit 0 de la puerta A ;Pone a 0 el bit 0 de la puerta A

;*********** Pulso Alto a 90 1.568 miliseg. ************************************* ******************* AL90 A90 DC1 movlw movwf movlw movwf decfsz goto decfsz goto return d'49' ALTO_1 d'8' ALTO_2 ALTO_2,1 DC1 ALTO_1,1 A90

;*********** Pulso Bajo a 90 18.4 miliseg. ************************************** ******************* BA90 B90 DC2 movlw movwf movlw movwf decfsz goto d'50' BAJO_1 d'92' BAJO_2 BAJO_2,1 DC2

decfsz goto return

BAJO_1,1 B90

;*********** Pulso Alto a 67.5 1.232 miliseg. *********************************** ******************* AL67 A67 DC7 movlw movwf movlw movwf decfsz goto decfsz goto return d'44' ALTO_1 d'7' ALTO_2 ALTO_2,1 DC7 ALTO_1,1 A67

;*********** Pulso Bajo a 67.5 18.656 miliseg. ********************************** ******************* BA67 B67 DC8 movlw movwf movlw movwf decfsz goto decfsz goto return d'53' BAJO_1 d'88' BAJO_2 BAJO_2,1 DC8 BAJO_1,1 B67

;*********** Pulso Alto a 112.5 1.872 miliseg. ********************************** ******************* AL112 A112 DC9 movlw movwf movlw movwf decfsz goto decfsz goto return d'52' ALTO_1 d'9' ALTO_2 ALTO_2,1 DC9 ALTO_1,1 A112

;*********** Pulso Bajo a 112.5 18.02 miliseg. ********************************** ******************* BA112 B112 DC10 movlw movwf movlw movwf decfsz goto decfsz goto return d'53' BAJO_1 d'85' BAJO_2 BAJO_2,1 DC10 BAJO_1,1 B112

END

También podría gustarte