Ese programa para mi es imposible de entender, ahi es muy dificil saber lo que es cada cosa, no hay comentarios, no se definen los reg que podrian dar alguna pista y las etiquetas tampoco. Te voy a poner un programa sencillo hecho por mi, asi que no te fies
, es un programa para mover un PAP en un sentido de giro cada 200ms, 5 pasos por seg. esto lo puedes modificar facilmente a tu gusto, asi como ponerle los pulsadores, este se mueve a medios pasos, pero si quieres tambien se puede mover de paso a paso, haciendo los pares o impares segun quieras mas o menos torque y movimientos mas bruscos o mas suaves.
El prgrama en el MPLAB funciona bien. Espero que te sirva como base para el tuyo.
LIST P=16F84A, ; usar PIC 16F84A
#include <p16f84A.inc>
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
CBLOCK 0x0C
contador ; contador para mover el motor
PDel0 ; reg. para el retardo
PDel1
ENDC
org 0X00
goto INICIO
org 0x04
TABLA
addwf PCL,1 ; tabla de movimientos del motor
retlw 0x08
retlw 0x0C
retlw 0X04
retlw 0X06
retlw 0X02
retlw 0X03
retlw 0X01
retlw 0X09
clrf contador ; cuando desborda va aqui
goto MOVER
INICIO
bsf STATUS,5
movlw 0xF0 ; ponemos rb0 a rb3 salidas para puente H
movwf TRISB
movlw 0x1F ; PORTA todo entradas
movwf PORTA
bcf STATUS,5
clrf PORTB ; contador a 0 para empezar por primer movimiento
clrf contador
MOVER
movfw contador ; mover contador con primer mov. a W para llamar tabla
call TABLA ; llamamos tabla
movwf PORTB ; lo movemos PORTB
incf contador,1 ; incrementamos en 1 contador para siguiente movimiento
call DEMORA ; llamamos demora de 200 ms para mov. de 5HZ
goto MOVER ; empezamos ciclo para siguiente movimiento
DEMORA ; demora de 200ms hecho con el picdel
movlw .156 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .213 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL3 goto PDelL4 ; 2 ciclos delay
PDelL4 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END