Ayuda con un programa PIC 16f84a

Hola a todos! tengo un código de un programa, supuestamente lo que hace es que cuando dejas presionado un boton un motor paso a paso gira para un lado, cuando dejas pulsado otro boton gira para el sentido contrario. El problema es que estoy intentando traducir lo que hace y no lo consigo, mira que vienen indicaciones en ingles pero ni con esas. Alguien me pude ayudar?. Un saludo:

El código del programa es el siguiente:
LIST p=16F84 ;
#include "P16F84.INC" ; Include header file
CBLOCK 0x10 ; almacenamiento temporal
pos
dc1
dc2
ENDC
LIST p=16F84 ; PIC16F84A es el procesador designado
#include "P16F84.INC" ; Archivo de cabecera
CBLOCK 0x10 ; almacenamiento temporal
ENDC
ORG 0
entrypoint goto start
ORG 4
intvector goto intvector
start clrw ; Ponemos a cero w
movwf PORTB ; Ponemos PORTB a cero antes de habilitarlo
bsf STATUS,RP0 ; Seleccionamos Bank 1
movlw 0xF0 ; port B bits 0-3 como salidas
movwf TRISB ; Movemos datos de w a TRISTB
bcf STATUS,RP0 ; Seleccionamos Bank 0
movlw 3 ; Inicializamos la posición de motor
movwf pos
movwf PORTB
call delay
clrf PORTB ;Motor parado

;Main loop
loop btfss PORTA,0 ;Pruebe el botón en el sentido de las agujas del reloj
call stepcw
btfss PORTA,1 ; Prueba el boton en sentido antiorario
call stepccw
goto loop
;Rotate one step clockwise
stepcw bcf STATUS,C ; Clear the carry flag
btfsc pos,3 ; Set carry if this bit set
bsf STATUS,C
rlf pos,W ; Pick up and rotate the motor's current position
andlw 0x0F ; Mask to lower nibble
movwf pos
movwf PORTB ; Drive the outputs
call delay ; Wait
clrf PORTB ; Clear the output
return
;Rotate one step counter clockwise
stepccw bcf STATUS,C ; Clear the carry flag
btfsc pos,0
bsf pos,4
rrf pos,W ; Pick up and rotate the motor's current position
andlw 0x0F ; Mask to lower nibble
movwf pos
movwf PORTB ; Drive the outputs
call delay ; Wait
clrf PORTB ; Clear the output
return
; This routine implements the delay between steps,
; and thus controls the motor speed.
delay movlw 18 ; Outer loop iteration count
movwf dc1
dl1 clrf dc2 ; Initialize inner loop
dl2 nop
nop
decfsz dc2,F
goto dl2
decfsz dc1,F
goto dl1
return
END
 
Atrás
Arriba