Autor Tema: Traducir Programa  (Leído 1494 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sggtav

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 135
    • Canal Youtube
Traducir Programa
« en: 26 de Enero de 2008, 20:03:32 »
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
Saludos Sggtav

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Traducir Programa
« Respuesta #1 en: 26 de Enero de 2008, 20:20:47 »
Ya esta hecho, va en el archivo .zip todo el proyecto, hecho en MPLAB.
Para cargarle el archivo .hex deberas contar con un programador que soporte el PIC16F628, lo tienes ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado sggtav

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 135
    • Canal Youtube
Re: Traducir Programa
« Respuesta #2 en: 26 de Enero de 2008, 20:26:38 »
MGLSOFT muchas gracias, por supuesto, me fabrique el te-20 anda de 10, primero no me grabava pero leyendo vi que hay que sacarle la patita 10 y anda de 10. gracias.
Por cierto como traduciste el programa??
Saludos Sggtav

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Traducir Programa
« Respuesta #3 en: 26 de Enero de 2008, 20:31:33 »
Je..je..
No traduje nada, esta en assembler y asi lo deje...
Por eso te dije que lo compile en MPLAB. :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything