je je je... bueno, se me calento la cabeza....
aqui esta, parte del codigo de Pocher, y parte mio
a ver que les parece...
; PaPunip4.asm
; AVANCE ES CUANTO GIRA, ES DECIR DE 0 A 15 , SON 16 VALORES POSIBLES
; PASOS, SON LA CANTIDAD DE PASOS A DAR EN CADA AVANCE, EJEMPLO 25, VER SEGUN MOTOR
; EJEMPLO 360/200=1,8 GRADOS POR PASO -> EMPLEANDO TABLA DE 1/2 PASO, NOS QUEDARIA
; UN 360/400=0.9 GRADOS POR PASO
; 400/16=25--->> SON LOS PASOS EN CADA AVANCE
; 25 PASOS * 16 AVANCES = 400 !!! OK?
;
; List p=16F876 ;Tipo de procesador
; include "P16F876.INC" ;Definiciones de registros internos
List p=16F84a
include "P16F84a.INC"
TEMP1 EQU 0x20 ;TEMP1 y TEMP2 --> temporizaci¢n de 50ms aprox.
TEMP2 EQU 0x21
TEMP3 EQU 0x22 ;Temporal para almacenar el valor anterior PORTA
CONTADOR EQU 0x23 ;CONTADOR3=PORTAanterior-PORTApresente
PASOS EQU 0X24 ;CANTIDAD DE PASOS POR AVANCE (15)
CONTADOR_TABLA EQU 25H ;POSICION EN LA TABLA DE SALIDA
AVANCE EQU 26H
org 00H ;Vector de Reset
goto INICIO
org 05H
;------------------------------------------------------------------------------------
INICIO bsf STATUS,RP0 ;Seleccionamos el banco 1
movlw 0x06
; movwf ADCON1
movlw B"000001111"
movwf TRISA ;PORTA entradas
clrf TRISB ;PORTB salidas
clrf CONTADOR
clrf TEMP3
movlw .1
movwf CONTADOR_TABLA ;FORZAR UN VALOR DE INICIO
bcf STATUS,RP0 ;Seleccionamos el banco 0
clrf PORTB
clrf INTCON
BUCLE1 movfw TEMP3
subwf PORTA,0 ;PORTApresente-TEMP3(PORTAanterior) --> W
btfsc STATUS,Z
goto BUCLE1 ;Paro
movwf CONTADOR ;N£mero de pasos hacia delante o atr s
movf PORTA,W ;Almacena PORTApresente en TEMP3
movwf TEMP3
btfss STATUS,C ;Si C=0 hay acarreo
goto ANTIHORARIO ;Como C=0 la resta es (-) --> antihorario
goto HORARIO ;Como C=1 la resta es (+) --> horario
;*************************************************************************
HORARIO
PASO1H
MOVLW .25
MOVWF AVANCE
OTRO1H
INCF CONTADOR_TABLA,F ;LECTURA DE LA TABLA DE ARRIBA HACIA ABAJO
MOVF CONTADOR_TABLA,W
CALL TABLA
movwf PORTB
call DELAY
DECFSZ AVANCE,F ;DAR 25 PASOS POR CADA INGRESO DE CONTADOR
GOTO OTRO1H
decfsz CONTADOR,F ;CANTIDAD DE AVANCES
goto PASO1H
goto BUCLE1
;*************************************************************************
ANTIHORARIO
comf CONTADOR,1 ;Complemento a 1
incf CONTADOR,1 ;m s 1 y tenemos el n£mero positivo
PASO1A
MOVLW .25
MOVWF AVANCE
OTRO1A
DECF CONTADOR_TABLA,F ;LECTURA DE TABLA DE ABAJO HACIA ARRIBA
MOVF CONTADOR_TABLA,W
CALL TABLA
movwf PORTB
call DELAY
DECFSZ AVANCE,F
GOTO OTRO1A
decfsz CONTADOR,F ;CANTIDAD DE AVANCES
goto PASO1A
goto BUCLE1
;*************************************************************************
DELAY movlw 0x50 ;Temporizaci¢n entre pasos de aprox.50ms
movwf TEMP1
clrf TEMP2
DELAY_1 ;RETURN solo para verificar en MPLAB
decfsz TEMP2,F
goto DELAY_1
decfsz TEMP1,F
goto DELAY_1
RETURN
;------------------------------- TABLA DE CONTROL BOBINAS MOTOR -------------
TABLA ;TABLA DE MEDIO PASO (400 POR VUELTA )
ADDWF PCL,F
GOTO MAXIMO ;0 SALTA A VALOR 8
PRIMERO RETLW b"00000001" ;1
RETLW b"00000011" ;2
RETLW b"00000010" ;3
RETLW b"00000110" ;4
RETLW b"00000100" ;5
RETLW b"00001100" ;6
RETLW b"00001000" ;7
ULTIMO RETLW b"00001001" ;8
; GOTO MINIMO ;9 SALTA A VALOR 1
MINIMO
MOVLW .1
MOVWF CONTADOR_TABLA ;COLOCO CONTADOR DE TABLA EN 1
GOTO PRIMERO
MAXIMO MOVLW .8
MOVWF CONTADOR_TABLA
GOTO ULTIMO ;DE ESTA MANERA, LA PROPIA TABLA
;ACTUALIZA LOS LIMITES MAXIMO Y MINIMO
;------------------------------------------------------------------------------
END
un gran abrazo

Norberto