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