Si nos podes decir cual es el problema que se presenta seria mas facil ayudarte.. mire el codigo y hay un par de incosistencias, de paso te pongo tu mismo codigo con algunos cambios. Asi te acostumbras a usar el nombre de los bits y registros. Asi como tambien algunas otras funciones.
Ejemplo, estas poniendo estado, 2
Cuando al agregar el .inc que ofrece Microchip podes referirte al registro como STATUS que es el nombre que aparece en el datasheet, y en ves del bit 2, usas Z que da mas informacion. Al igual que W y F para los destinos del SUBWF por ejemplo.
LIST P=16F84A,
#include <p16f84A.inc>
CBLOCK 0x10
R10 ;0x10
R11 ;0x11
R ;0x12
cont ;0x13
conta1 ;0x14
conta2 ;0x15
conta3 ;0x16
ENDC
tiempo equ .0
ent equ .0
vel equ .0
org 0x00
goto Inicio
org 0x04
RETURN
Inicio:
clrf PORTA
clrf PORTB
BANKSEL TRISA ; Banco 1
movlw b'11111111' ; portb todo como entrada.-
movwf TRISB
movlw b'000000' ; Ra0-Ra3 como salida.-
movwf TRISA
BANKSEL PORTA ; Banco 0
arranque:
clrf PORTA ; asegurando que las salidad de porta este limpias para no mover el motor
btfsc PORTB,7 ; esperando p1 para iniciar
goto arranque
menu:
movf portb, W
andlw B'01100000'
movwf ent ; enmascaro rb6 y rb5 para comparar guardando en entrada, el MOVWF actualiza Z
btfsc STATUS, Z ; si es 00 es paso ret sino voy para opc2 esperando un 11
goto pasoretcom
opc2:
movlw B'01100000'
subwf ent, W ; comparando
btfss STATUS, Z ; si es 10 paso completo hacia adelante y sino vuelvo a leer sw
goto menu
goto pasoadcom
pasoadcom:
call pasoad ;mando un paso al motor y vuelvo a leer el sw que controla sentido y respectivamente el sw2 que controla la velocidad
goto menu ;esto me permite poder cambiar el sentido y la velocidad entre paso
pasoretcom:
call pasoret ;mando un paso al motor y vuelvo a leer el sw1 que controla sentido y respectivamente el sw2 que controla la velocidad
goto menu ;esto me permite poder cambiar el sentido y la velocidad entre paso
pasoad:
call velocidad ; rutina para un paso hacia adelante
movwf tiempo ;registro aux para controlar el retardo
bcf STATUS, C
rrf R10, F
btfsc STATUS, C
bsf R10,3
movf R10, W
movwf porta
call retardo
clrf porta
retlw 0
pasoret:
call velocidad ; rutina para un paso hacia adelante
movwf tiempo ;registro aux para controlar el retardo
bcf STATUS, C
rlf R10,R
btfsc STATUS, 4 ; bit 4 ??? wtf
bsf R10, 0
movf R10, W
movwf porta
call retardo
clrf porta
retlw 0
velocidad:
movf portb, W
andlw B'00001100' ; enmascaro rb2 y rb3 para comparar
movwf vel ; guardando entrada
movlw B'00001100'
subwf vel, W ; comparando
btfsc STATUS, Z ; si en el sw2 es 11 retorno a w con .18 para un retardo rapido , sino voy a la otra opc
retlw .14
vel1:
movlw B'00000000'
subwf ent,10 ; comparando , 10 ???
btfsc STATUS, Z ; si en el sw2 es 00 retorno a w con .28 para un retardo mas lento , sino voy a la otra opc
retlw .18
retlw .20
retardo:
movlw tiempo ;rutina de retardo
movwf conta1
loop1:
movlw .256
movwf conta2
loop2:
movlw .256
movwf conta3
loop3:
decfsz conta3
goto loop3
decfsz conta2
goto loop2
decfsz conta1
goto loop1
return
end
Otra cosa hay 2 lineas que no tienen sentido para mi:
1 esta en pasoret, la cual dice en tu original:
Que seguro es un error, por que el bit ese no es de ninguna operacion artimetica. Lo cual supongo que quisiste poner:
---------------------------
La otra es vel1, y aca van 2 cosas:
vel1:
movlw B'00000000'
subwf ent,10 ; comparando , 10 ???
el segundo lugar es para indicar si va a W o al registro, es decir es lugar para un 0 o un 1, o mejor si usas las letras W y F respectivamente. Asi que ahi hay un error.
Ahora una pequeña leccion para comparar por 0 no es necesario RESTARLE 0, si vas a la tabla de instrucciones vas a notar que algunas instrucciones modifican algunas banderas del registro status, por ejemplo el MOVF modifica unicamente la bandera Z, Entonces lo de arriba se podria haber resumido en:
vel1:
MOVF ent, W ; actualizando la bandera Z
Y luego si usas el BTFSS o BTFSC.
---------------------------------------------------
Jugando con las condiciones. Veamos este pedazo de codigo:
btfss estado,2 ; si es 00 es paso ret sino voy para opc2 esperando un 11
goto opc2
goto pasoretcom
opc2
bcf estado,2
Lo interesante es que si yo cambio el BTFSS por un BTFSC podria quitar un GOTO quedando:
btfsc STATUS, Z ; si es 00 es paso ret sino voy para opc2 esperando un 11
goto pasoretcom
opc2:
----------------------------
En fin, si podes decir que es lo que falla como te decia seria mejor, primero trata de hacer un programa que lo mueva para adelante, luego uno que lo mueva para atras, ya con eso podemos ir agregando pulsadores.