Hola, disculpa las molestia pero quería ver si alguien me podría traducir este programa en archivo hex para pasarlo al pic. Yo la verdad no tengo mucha idea de como se hace o bien si me pueden explicar, Como veran es el programa de una controladora bipolar para motores paso a paso. Espero que no le sea molestia .desde ya muchas gracias.
;*******************************************************************
;
;
; ---- ----
; | 0 |
; | |
; | 7| pSent
; | 6| pEnab
; Vss | | Vdd
; MnegH2 |0 7| MnegH0
; MposH2 |1 6| MposH0
; MposH3 |2 5| MnegH1
; MnegH3 |3 4| MposH1
; ---------
;
;-------------------------------------------------------------------------------------------
;
;Estado de las Bobinas Segun Posicion
;
; Bridge 00 Bridge 01 Bridge 10 Bridge 11
; OFF OFF OFF OFF OFF
; BRK_N N N N N
;
; P0 P N OFF OFF
; P1 OFF OFF P N
; P2 N P OFF OFF
; P3 OFF OFF N P
;
; P01 P N P N
; P12 N P P N
; P23 N P N P
; P30 P N N P
;
;
; Bridge 00 Bridge 01 Bridge 10 Bridge 11
; Mosf N Mosf P Mosf N Mosf P Mosf N Mosf P Mosf N Mosf P
; OFF 0 1 0 1 0 1 0 1
; BRK_N 1 1 1 1 1 1 1 1
;
; P0 0 0 1 1 0 1 0 1
; P1 0 1 0 1 0 0 1 1
; P2 1 1 0 0 0 1 0 1
; P3 0 1 0 1 1 1 0 0
;
; P01 0 0 1 1 0 0 1 1
; P12 1 1 0 0 0 0 1 1
; P23 1 1 0 0 1 1 0 0
; P30 0 0 1 1 1 1 0 0
;
;
; PortB 0 1 2 3 4 5 6 7
; Mosf 4 5 7 6 3 2 1 0
;
; OFF 0 1 1 0 1 0 1 0
; BRK_N 1 1 1 1 1 1 1 1
;
; P0 0 1 1 0 1 1 0 0
; P1 0 0 1 1 1 0 1 0
; P2 0 1 1 0 0 0 1 1
; P3 1 1 0 0 1 0 1 0
;
; P01 0 0 1 1 1 1 0 0
; P12 0 0 1 1 0 0 1 1
; P23 1 1 0 0 0 0 1 1
; P30 1 1 0 0 1 1 0 0
;
; Invertido por ULN
; OFF 1 0 0 1 0 1 0 1
; BRK_N 0 0 0 0 0 0 0 0
;
; P0 1 0 0 1 0 0 1 1
; P1 1 1 0 0 0 1 0 1
; P2 1 0 0 1 1 1 0 0
; P3 0 0 1 1 0 1 0 1
;
; P01 1 1 0 0 0 0 1 1
; P12 1 1 0 0 1 1 0 0
; P23 0 0 1 1 1 1 0 0
; P30 0 0 1 1 0 0 1 1
;
;
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
LIST P=16F628, R=DEC ; Use the PIC16F628 and decimal system
#include "P16F628.INC" ; Include header file
__config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF &_MCLRE_OFF
;
; --------------------------------
; Definicion de DEFINES
; --------------------------------
;
#define piEnab PORTA,6
#define piSent PORTA,7
#define poOFF b'10101001'
#define poPos0 b'11001001'
#define poPos1 b'10100011'
#define poPos2 b'00111001'
#define poPos3 b'10101100'
#define poPos01 b'11000011'
#define poPos12 b'00110011'
#define poPos23 b'00111100'
#define poPos30 b'11001100'
#define poBrkN b'00000000'
;#define isPinHj btfss
#define isPinLj btfss ;invertido ya que el buffer de entrada invierte las señales
#define isPinHj btfsc ;invertido ya que el buffer de entrada invierte las señales
;
; --------------------------------
; Declaracion de variables
; --------------------------------
;
CBLOCK 0x20 ; Declare variable addresses starting at 0x20
dStepPos
dpoPosMed
dpoPosAct
dataL
PDel0
PDel1
ENDC
;
; --------------------------------
; Empieza el pograma...
; --------------------------------
;
ORG 0x000 ; Program starts at 0x000
bcf STATUS,RP1 ; RAM PAGE 0
bcf STATUS,RP0 ; RAM PAGE 0
;
; --------------------------------
; SET ANALOG/DIGITAL INPUTS PORT A
; --------------------------------
;
movlw 7
movwf CMCON ; CMCON=7 set comperators off
;
; ----------------------
; INITIALIZE PORTS
; ----------------------
;
movlw b'00000000' ; set up portA
movwf PORTA
movlw b'00000000' ; set up portB
movwf PORTB
bcf STATUS,RP1 ; RAM PAGE 1
bsf STATUS,RP0 ; RAM PAGE 1
movlw b'11111111' ; portA all pins input
movwf TRISA
movlw b'00000000'
movwf TRISB ; portB all pins output
bcf STATUS,RP1 ; RAM PAGE 0
bcf STATUS,RP0 ; RAM PAGE 0
;
; ----------------------
; INITIALIZE VARIABLES
; ----------------------
;
movlw 0x00 ;Inicializo a 1 la Posicion Actual del Rotor
movwf dStepPos
movlw poPos0 ;Inicializo el estado Medio de las Bobinas a Pos1
movwf dpoPosMed
;
; ----------------------
; INITIALIZE PROGRAMA
; ----------------------
;
gInicio
movlw poOFF ;Activo Freno
movwf PORTB
movlw poBrkN
movwf PORTB
gWaitP isPinHj piEnab
goto gWaitP
movlw poOFF
movwf PORTB
movf dpoPosAct,W ;Activo las bobinas en Paso Actual antes de dar el paso
movwf PORTB
isPinHj piSent
goto gDoStepDown
goto gDoStepUp
gDoStep
movlw .50
call DEMORA ;0.25ms en Activacion Previa
movlw poOFF ;Doy Paso Medio -> Hasta Aqui han pasado 22us.
movwf PORTB
movf dpoPosMed,W
movwf PORTB
movlw .150
call DEMORA ;0.75ms en Doble Activacion
movlw poOFF ;Doy Paso Actual
movwf PORTB
movf dpoPosAct,W
movwf PORTB
movlw .8 ;8x0.25ms=2ms
call DEMORA1 ;2ms como Maximo en Simple Activacion
gD1RetH
movlw poOFF ;Activo Freno
movwf PORTB
movlw poBrkN
movwf PORTB
gWaitEL isPinLj piEnab
goto gWaitEL
goto gWaitP
gD1RetL
movlw poOFF ;Activo Freno
movwf PORTB
movlw poBrkN
movwf PORTB
goto gWaitP
;
; ----------------------
; Funciones de DarPaso
; ----------------------
;
gDoStepUp
movf dStepPos,W
ADDWF PCL, F
goto gStep01
goto gStep12
goto gStep23
goto gStep30
gStep01 movlw 0x01
movwf dStepPos
movlw poPos01
movwf dpoPosMed
movlw poPos1
movwf dpoPosAct
goto gDoStep
gStep12 movlw 0x02
movwf dStepPos
movlw poPos12
movwf dpoPosMed
movlw poPos2
movwf dpoPosAct
goto gDoStep
gStep23 movlw 0x03
movwf dStepPos
movlw poPos23
movwf dpoPosMed
movlw poPos3
movwf dpoPosAct
goto gDoStep
gStep30 movlw 0x00
movwf dStepPos
movlw poPos30
movwf dpoPosMed
movlw poPos0
movwf dpoPosAct
goto gDoStep
; ----------------------
gDoStepDown
movf dStepPos,W
ADDWF PCL, F
goto gStep03
goto gStep10
goto gStep21
goto gStep32
gStep03 movlw 0x03
movwf dStepPos
movlw poPos30
movwf dpoPosMed
movlw poPos3
movwf dpoPosAct
goto gDoStep
gStep10 movlw 0x00
movwf dStepPos
movlw poPos01
movwf dpoPosMed
movlw poPos0
movwf dpoPosAct
goto gDoStep
gStep21 movlw 0x01
movwf dStepPos
movlw poPos12
movwf dpoPosMed
movlw poPos1
movwf dpoPosAct
goto gDoStep
gStep32 movlw 0x02
movwf dStepPos
movlw poPos23
movwf dpoPosMed
movlw poPos2
movwf dpoPosAct
goto gDoStep
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEMORA movwf PDel0
PLoop0 nop ; este bucle dura 5us
nop
decfsz PDel0, F
goto PLoop0 ; 2 no, loop
return ;
DEMORA1 movwf PDel1
DEMRA11 movlw .50
movwf PDel0
PLoop2 isPinHj piEnab ; Bucle de 5 us. Compruebo que piEnab este en HIGH
goto PLoop3
decfsz PDel0, F
goto PLoop2 ; 2 no, loop
decfsz PDel1, F
goto DEMRA11 ; 2 no, loop
goto gD1RetH
DEMRA12 movlw .50
movwf PDel0
PLoop3 isPinLj piEnab ; Bucle de 5 us. Compruebo que piEnab este en LOW
goto gWaitP
decfsz PDel0, F
goto PLoop3 ; 2 no, loop
decfsz PDel1, F
goto DEMRA12 ; 2 no, loop
goto gD1RetL
END