; MOTOR PAP 7.5º 12 V UNIPOLAR
; SECUENCIA DE 1/2 PASO
list p=16f877a
#include <p16f877a.inc>
PUNTERO EQU 0X20
CONTADOR1 EQU 0X21
CONTADOR2 EQU 0X22
ORG 0
GOTO INICIO
INICIO
BANKSEL TRISB
CLRF TRISB
NUEVA_S CLRF PUNTERO
S_SECUENCIA MOVF PUNTERO,W
CALL SECUENCIA
BANKSEL PORTB
MOVWF PORTB
CALL RETARDO_30ms
INCF PUNTERO,F
MOVLW .8
SUBWF PUNTERO,W
BTFSS STATUS,Z
GOTO S_SECUENCIA
GOTO NUEVA_S
SECUENCIA ADDWF PCL,F
RETLW B'00001000'
RETLW B'00001100'
RETLW B'00000100'
RETLW B'00000110'
RETLW B'00000010'
RETLW B'00000011'
RETLW B'00000001'
RETLW B'00001001'
RETARDO_30ms MOVLW .196
MOVWF CONTADOR2
L1 MOVLW .255
MOVWF CONTADOR1
L0 DECFSZ CONTADOR1,F
GOTO L0
DECFSZ CONTADOR2,F
GOTO L1
RETURN
END
; CALCULO DEMORA:
; RECORDAR QUE GOTO TARDA 2 CICLOS DE MAQUINA
; -> QUE X CADA DECREMENTO DEMORAMOS 3 CICLOS DE MAQUINA
; EL 1/5 ES X QUE USO UN CRISTAL DE 20 MHZ.
; D(µs)= 1/5 X 3 X CONTADORES
; 30ms= 30000µs
; 30000=1/5 x 3 x CONTADORES
; CONTADORES= 50000
; CONTADORES= 255 X CONTADOR2
; CONTADOR2= 196,7 =196 (redondeo a 200)