Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

30/07/2014 #1

Avatar de Meta

Descifrar PIC12F629 para saber su código y entenderlo
Hola:

Tengo un archivo hex del PIC12F629.

:020000040000FA
:10000000000000000000831207309900831638308A
:100010008500C03081009B011C141A0883128500E2
:10002000B0018C01851D12284B20851D182815282C
:100030004B20851915284B20851915284B2085192B
:1000400015284B20851915282528051C28282B281C
:10005000051D2E283328051D38283D280630B00000
:1000600085003E2012280130B00085003E20122875
:100070000530B00085003E20122812283008831673
:100080009A001C1555309D00AA309D009C141C112F
:1000900083128C0108000330B1001830B200023026
:1000A000B300B10B5428B20B5628B30B5128582873
:0200B000080046
:0400B20000340034E2
:02400E00543F1D
:024200000200BA
:00000001FF
Con el MPLAB X 2.15 he importado el archivo hex. He copiado las instrucciones a .txt y es este de abajo.

Código:
                     Line         Address         Opcode         Label         DisAssy    
               1              000            0000                          NOP            
               2              001            0000                          NOP            
               3              002            0000                          NOP            
               4              003            1283                          BCF STATUS, 0x5
               5              004            3007                          MOVLW 0x7      
               6              005            0099                          MOVWF CMCON    
               7              006            1683                          BSF STATUS, 0x5
               8              007            3038                          MOVLW 0x38     
               9              008            0085                          MOVWF GPIO     
               10             009            30C0                          MOVLW 0xC0     
               11             00A            0081                          MOVWF TMR0     
               12             00B            019B                          CLRF 0x1B      
               13             00C            141C                          BSF 0x1C, 0x0  
               14             00D            081A                          MOVF 0x1A, W   
               15             00E            1283                          BCF STATUS, 0x5
               16             00F            0085                          MOVWF GPIO     
               17             010            01B0                          CLRF 0x30      
               18             011            018C                          CLRF PIR1      
               19             012            1D85                          BTFSS GPIO, 0x3
               20             013            2812                          GOTO 0x12      
               21             014            204B                          CALL 0x4B      
               22             015            1D85                          BTFSS GPIO, 0x3
               23             016            2818                          GOTO 0x18      
               24             017            2815                          GOTO 0x15      
               25             018            204B                          CALL 0x4B      
               26             019            1985                          BTFSC GPIO, 0x3
               27             01A            2815                          GOTO 0x15      
               28             01B            204B                          CALL 0x4B      
               29             01C            1985                          BTFSC GPIO, 0x3
               30             01D            2815                          GOTO 0x15      
               31             01E            204B                          CALL 0x4B      
               32             01F            1985                          BTFSC GPIO, 0x3
               33             020            2815                          GOTO 0x15      
               34             021            204B                          CALL 0x4B      
               35             022            1985                          BTFSC GPIO, 0x3
               36             023            2815                          GOTO 0x15      
               37             024            2825                          GOTO 0x25      
               38             025            1C05                          BTFSS GPIO, 0x0
               39             026            2828                          GOTO 0x28      
               40             027            282B                          GOTO 0x2B      
               41             028            1D05                          BTFSS GPIO, 0x2
               42             029            282E                          GOTO 0x2E      
               43             02A            2833                          GOTO 0x33      
               44             02B            1D05                          BTFSS GPIO, 0x2
               45             02C            2838                          GOTO 0x38      
               46             02D            283D                          GOTO 0x3D      
               47             02E            3006                          MOVLW 0x6      
               48             02F            00B0                          MOVWF 0x30     
               49             030            0085                          MOVWF GPIO     
               50             031            203E                          CALL 0x3E      
               51             032            2812                          GOTO 0x12      
               52             033            3001                          MOVLW 0x1      
               53             034            00B0                          MOVWF 0x30     
               54             035            0085                          MOVWF GPIO     
               55             036            203E                          CALL 0x3E      
               56             037            2812                          GOTO 0x12      
               57             038            3005                          MOVLW 0x5      
               58             039            00B0                          MOVWF 0x30     
               59             03A            0085                          MOVWF GPIO     
               60             03B            203E                          CALL 0x3E      
               61             03C            2812                          GOTO 0x12      
               62             03D            2812                          GOTO 0x12      
               63             03E            0830                          MOVF 0x30, W   
               64             03F            1683                          BSF STATUS, 0x5
               65             040            009A                          MOVWF 0x1A     
               66             041            151C                          BSF 0x1C, 0x2  
               67             042            3055                          MOVLW 0x55     
               68             043            009D                          MOVWF 0x1D     
               69             044            30AA                          MOVLW 0xAA     
               70             045            009D                          MOVWF 0x1D     
               71             046            149C                          BSF 0x1C, 0x1  
               72             047            111C                          BCF 0x1C, 0x2  
               73             048            1283                          BCF STATUS, 0x5
               74             049            018C                          CLRF PIR1      
               75             04A            0008                          RETURN         
               76             04B            3003                          MOVLW 0x3      
               77             04C            00B1                          MOVWF 0x31     
               78             04D            3018                          MOVLW 0x18     
               79             04E            00B2                          MOVWF 0x32     
               80             04F            3002                          MOVLW 0x2      
               81             050            00B3                          MOVWF 0x33     
               82             051            0BB1                          DECFSZ 0x31, F 
               83             052            2854                          GOTO 0x54      
               84             053            0BB2                          DECFSZ 0x32, F 
               85             054            2856                          GOTO 0x56      
               86             055            0BB3                          DECFSZ 0x33, F 
               87             056            2851                          GOTO 0x51      
               88             057            2858                          GOTO 0x58      
               89             058            0008                          RETURN         
               90             059            3400                          RETLW 0x0      
               91             05A            3400                          RETLW 0x0
El código de arriba es muy pequeño. Quiero hacer una descripción de lo que hace exactamente.

Parece que estaré mucho tiempo descifrando algo, por ejemplo, BCF STATUS, 0x5. Aquí debo saber que es el 0x5 del STATUS. Mirando la lista de abajo es RP0, para cambiar de banco de memoria, en este caso, en el banco 0. Sabiendo esto, ahora se que es:

BCF STATUS, 0x5 es igual aBCF STATUS, RP0

Así en cada instrucción.

Código:
        LIST

;==========================================================================
; Build date : May 28 2014
;  MPASM PIC12F629 processor include
; 
;  (c) Copyright 1999-2014 Microchip Technology, All rights reserved
;==========================================================================

        NOLIST

;==========================================================================
;  This header file defines configurations, registers, and other useful
;  bits of information for the PIC12F629 microcontroller.  These names
;  are taken to match the data sheets as closely as possible.
;
;  Note that the processor must be selected before this file is included.
;  The processor may be selected the following ways:
;
;       1. Command line switch:
;               C:\MPASM MYFILE.ASM /PIC12F629
;       2. LIST directive in the source file
;               LIST   P=PIC12F629
;       3. Processor Type entry in the MPASM full-screen interface
;       4. Setting the processor in the MPLAB Project Dialog
;==========================================================================

;==========================================================================
;
;       Verify Processor
;
;==========================================================================
        IFNDEF __12F629
           MESSG "Processor-header file mismatch.  Verify selected processor."
        ENDIF



;==========================================================================
;
;       Register Definitions
;
;==========================================================================

W                EQU  H'0000'
F                EQU  H'0001'

;----- Register Files -----------------------------------------------------

;-----Bank0------------------
INDF             EQU  H'0000'
TMR0             EQU  H'0001'
PCL              EQU  H'0002'
STATUS           EQU  H'0003'
FSR              EQU  H'0004'
GPIO             EQU  H'0005'
PCLATH           EQU  H'000A'
INTCON           EQU  H'000B'
PIR1             EQU  H'000C'
TMR1             EQU  H'000E'
TMR1L            EQU  H'000E'
TMR1H            EQU  H'000F'
T1CON            EQU  H'0010'
CMCON            EQU  H'0019'

;-----Bank1------------------
OPTION_REG       EQU  H'0081'
TRISIO           EQU  H'0085'
PIE1             EQU  H'008C'
PCON             EQU  H'008E'
OSCCAL           EQU  H'0090'
WPU              EQU  H'0095'
IOC              EQU  H'0096'
IOCB             EQU  H'0096'
VRCON            EQU  H'0099'
EEDAT            EQU  H'009A'
EEDATA           EQU  H'009A'
EEADR            EQU  H'009B'
EECON1           EQU  H'009C'
EECON2           EQU  H'009D'

;----- STATUS Bits -----------------------------------------------------
C                EQU  H'0000'
DC               EQU  H'0001'
Z                EQU  H'0002'
NOT_PD           EQU  H'0003'
NOT_TO           EQU  H'0004'
IRP              EQU  H'0007'

RP0              EQU  H'0005'
RP1              EQU  H'0006'


;----- GPIO Bits -----------------------------------------------------
GP0              EQU  H'0000'
GP1              EQU  H'0001'
GP2              EQU  H'0002'
GP3              EQU  H'0003'
GP4              EQU  H'0004'
GP5              EQU  H'0005'

GPIO0            EQU  H'0000'
GPIO1            EQU  H'0001'
GPIO2            EQU  H'0002'
GPIO3            EQU  H'0003'
GPIO4            EQU  H'0004'
GPIO5            EQU  H'0005'


;----- INTCON Bits -----------------------------------------------------
GPIF             EQU  H'0000'
INTF             EQU  H'0001'
T0IF             EQU  H'0002'
GPIE             EQU  H'0003'
INTE             EQU  H'0004'
T0IE             EQU  H'0005'
PEIE             EQU  H'0006'
GIE              EQU  H'0007'

TMR0IF           EQU  H'0002'
TMR0IE           EQU  H'0005'


;----- PIR1 Bits -----------------------------------------------------
TMR1IF           EQU  H'0000'
CMIF             EQU  H'0003'
ADIF             EQU  H'0006'
EEIF             EQU  H'0007'

T1IF             EQU  H'0000'


;----- T1CON Bits -----------------------------------------------------
TMR1ON           EQU  H'0000'
TMR1CS           EQU  H'0001'
NOT_T1SYNC       EQU  H'0002'
T1OSCEN          EQU  H'0003'
TMR1GE           EQU  H'0006'

T1CKPS0          EQU  H'0004'
T1CKPS1          EQU  H'0005'


;----- CMCON Bits -----------------------------------------------------
CIS              EQU  H'0003'
CINV             EQU  H'0004'
COUT             EQU  H'0006'

CM0              EQU  H'0000'
CM1              EQU  H'0001'
CM2              EQU  H'0002'


;----- OPTION_REG Bits -----------------------------------------------------
PSA              EQU  H'0003'
T0SE             EQU  H'0004'
T0CS             EQU  H'0005'
INTEDG           EQU  H'0006'
NOT_GPPU         EQU  H'0007'

PS0              EQU  H'0000'
PS1              EQU  H'0001'
PS2              EQU  H'0002'


;----- TRISIO Bits -----------------------------------------------------
TRISIO0          EQU  H'0000'
TRISIO1          EQU  H'0001'
TRISIO2          EQU  H'0002'
TRISIO3          EQU  H'0003'
TRISIO4          EQU  H'0004'
TRISIO5          EQU  H'0005'


;----- PIE1 Bits -----------------------------------------------------
TMR1IE           EQU  H'0000'
CMIE             EQU  H'0003'
ADIE             EQU  H'0006'
EEIE             EQU  H'0007'

T1IE             EQU  H'0000'


;----- PCON Bits -----------------------------------------------------
NOT_BOR          EQU  H'0000'
NOT_POR          EQU  H'0001'

NOT_BOD          EQU  H'0000'


;----- OSCCAL Bits -----------------------------------------------------
CAL0             EQU  H'0002'
CAL1             EQU  H'0003'
CAL2             EQU  H'0004'
CAL3             EQU  H'0005'
CAL4             EQU  H'0006'
CAL5             EQU  H'0007'


;----- WPU Bits -----------------------------------------------------
WPU0             EQU  H'0000'
WPU1             EQU  H'0001'
WPU2             EQU  H'0002'
WPU4             EQU  H'0004'
WPU5             EQU  H'0005'


;----- IOC Bits -----------------------------------------------------
IOC0             EQU  H'0000'
IOC1             EQU  H'0001'
IOC2             EQU  H'0002'
IOC3             EQU  H'0003'
IOC4             EQU  H'0004'
IOC5             EQU  H'0005'

IOCB0            EQU  H'0000'
IOCB1            EQU  H'0001'
IOCB2            EQU  H'0002'
IOCB3            EQU  H'0003'
IOCB4            EQU  H'0004'
IOCB5            EQU  H'0005'


;----- IOCB Bits -----------------------------------------------------
IOC0             EQU  H'0000'
IOC1             EQU  H'0001'
IOC2             EQU  H'0002'
IOC3             EQU  H'0003'
IOC4             EQU  H'0004'
IOC5             EQU  H'0005'

IOCB0            EQU  H'0000'
IOCB1            EQU  H'0001'
IOCB2            EQU  H'0002'
IOCB3            EQU  H'0003'
IOCB4            EQU  H'0004'
IOCB5            EQU  H'0005'


;----- VRCON Bits -----------------------------------------------------
VRR              EQU  H'0005'
VREN             EQU  H'0007'

VR0              EQU  H'0000'
VR1              EQU  H'0001'
VR2              EQU  H'0002'
VR3              EQU  H'0003'


;----- EECON1 Bits -----------------------------------------------------
RD               EQU  H'0000'
WR               EQU  H'0001'
WREN             EQU  H'0002'
WRERR            EQU  H'0003'




;==========================================================================
;
;       RAM Definitions
;
;==========================================================================
       __MAXRAM  H'00DF'
       __BADRAM  H'0006'-H'0009'
       __BADRAM  H'000D'
       __BADRAM  H'0011'-H'0018'
       __BADRAM  H'001A'-H'001F'
       __BADRAM  H'0060'-H'007F'
       __BADRAM  H'0086'-H'0089'
       __BADRAM  H'008D'
       __BADRAM  H'008F'
       __BADRAM  H'0091'-H'0094'
       __BADRAM  H'0097'-H'0098'
       __BADRAM  H'009E'-H'009F'

;==========================================================================
;
;       Configuration Bits
;
;   NAME            Address
;   CONFIG            2007h
;
;==========================================================================

; The following is an assignment of address values for all of the
; configuration registers for the purpose of table reads
_CONFIG          EQU  H'2007'

;----- CONFIG Options --------------------------------------------------
_FOSC_LP             EQU  H'3FF8'    ; LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_LP_OSC              EQU  H'3FF8'    ; LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_FOSC_XT             EQU  H'3FF9'    ; XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_XT_OSC              EQU  H'3FF9'    ; XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_FOSC_HS             EQU  H'3FFA'    ; HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_HS_OSC              EQU  H'3FFA'    ; HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_FOSC_EC             EQU  H'3FFB'    ; EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN
_EC_OSC              EQU  H'3FFB'    ; EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN
_FOSC_INTRCIO        EQU  H'3FFC'    ; INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_INTRC_OSC_NOCLKOUT  EQU  H'3FFC'    ; INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_FOSC_INTRCCLK       EQU  H'3FFD'    ; INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_INTRC_OSC_CLKOUT    EQU  H'3FFD'    ; INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_FOSC_EXTRCIO        EQU  H'3FFE'    ; RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
_EXTRC_OSC_NOCLKOUT  EQU  H'3FFE'    ; RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
_FOSC_EXTRCCLK       EQU  H'3FFF'    ; RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
_EXTRC_OSC_CLKOUT    EQU  H'3FFF'    ; RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN

_WDTE_OFF            EQU  H'3FF7'    ; WDT disabled
_WDT_OFF             EQU  H'3FF7'    ; WDT disabled
_WDTE_ON             EQU  H'3FFF'    ; WDT enabled
_WDT_ON              EQU  H'3FFF'    ; WDT enabled

_PWRTE_ON            EQU  H'3FEF'    ; PWRT enabled
_PWRTE_OFF           EQU  H'3FFF'    ; PWRT disabled

_MCLRE_OFF           EQU  H'3FDF'    ; GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD
_MCLRE_ON            EQU  H'3FFF'    ; GP3/MCLR pin function is MCLR

_BOREN_OFF           EQU  H'3FBF'    ; BOD disabled
_BODEN_OFF           EQU  H'3FBF'    ; BOD disabled
_BOREN_ON            EQU  H'3FFF'    ; BOD enabled
_BODEN_ON            EQU  H'3FFF'    ; BOD enabled

_CP_ON               EQU  H'3F7F'    ; Program Memory code protection is enabled
_CP_OFF              EQU  H'3FFF'    ; Program Memory code protection is disabled

_CPD_ON              EQU  H'3EFF'    ; Data memory code protection is enabled
_CPD_OFF             EQU  H'3FFF'    ; Data memory code protection is disabled

;----- DEVID Equates --------------------------------------------------
_DEVID1          EQU  H'2006'

;----- IDLOC Equates --------------------------------------------------
_IDLOC0          EQU  H'2000'
_IDLOC1          EQU  H'2001'
_IDLOC2          EQU  H'2002'
_IDLOC3          EQU  H'2003'

        LIST
Parece muy complejo.

La pregunta es:
¿Hay un método que te lo haga automático?

Si lo hago manual en cada instrucción, me pego media vida.

Un saludo.
30/07/2014 #2

Avatar de Daniel Meza

Creo que no hay forma sencilla de hacerlo, abrí por las dudas un .HEX en MPLAB y luego le dí en View/Program memory; aquí aparecen 3 pestañas: Opcode, machine y symbolic, en esta última deberían de aparecer los nombres "simbólicos" pero no es así salvo los registros predetermiandos del PIC.
Igual el programa no es muy largo, a mano tendrá que ser

¿Has intentado verlo en IcProg?
30/07/2014 #3

Avatar de JoaquinFerrero

Los editores de texto tienen la opción de "Buscar y reemplazar", que puedes aplicar de forma repetida

Creo que... con el MPLAB X, en el modo depuración, en la ventana de Dissassembly del Program, sí que salen los símbolos, pero... estoy hablando de memoria.

En cuanto a lo que hace la instrucción BCF STATUS, RP0, es hacer que el procesador trabaje con el bank 0 de los registros principales (SFR) del micro.
31/07/2014 #4

Avatar de Meta

Hola:

Lo descompilé con el www.ic-prog.com como dices y lo traduce mejor.

Código:
; Generated by WinDis84, (c) Nigel Goodwin 1998.

            LIST      P=16F84, F=INHX8M
            include "P16FXX.inc"
            ORG     0x0000

            NOP
            NOP
            NOP
            BCF     STATUS    , RP0
            MOVLW   0x07
            MOVWF   0x19
            BSF     STATUS    , RP0
            MOVLW   0x38
            MOVWF   TRISA
            MOVLW   0xC0
            MOVWF   OPTION_REG
            CLRF    0x1B
            BSF     0x1C      , 00
            MOVF    0x1A      , W
            BCF     STATUS    , RP0
            MOVWF   PORTA
            CLRF    0x30
            CLRF    0x0C
Label_0001  BTFSS   PORTA     , 03
            GOTO    Label_0001
            CALL    Label_0002
Label_0004  BTFSS   PORTA     , 03
            GOTO    Label_0003
            GOTO    Label_0004
Label_0003  CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            GOTO    Label_0005
Label_0005  BTFSS   PORTA     , 00
            GOTO    Label_0006
            GOTO    Label_0007
Label_0006  BTFSS   PORTA     , 02
            GOTO    Label_0008
            GOTO    Label_0009
Label_0007  BTFSS   PORTA     , 02
            GOTO    Label_000A
            GOTO    Label_000B
Label_0008  MOVLW   0x06
            MOVWF   0x30
            MOVWF   PORTA
            CALL    Label_000C
            GOTO    Label_0001
Label_0009  MOVLW   0x01
            MOVWF   0x30
            MOVWF   PORTA
            CALL    Label_000C
            GOTO    Label_0001
Label_000A  MOVLW   0x05
            MOVWF   0x30
            MOVWF   PORTA
            CALL    Label_000C
            GOTO    Label_0001
Label_000B  GOTO    Label_0001
Label_000C  MOVF    0x30      , W
            BSF     STATUS    , RP0
            MOVWF   0x1A
            BSF     0x1C      , 02
            MOVLW   0x55
            MOVWF   0x1D
            MOVLW   0xAA
            MOVWF   0x1D
            BSF     0x1C      , 01
            BCF     0x1C      , 02
            BCF     STATUS    , RP0
            CLRF    0x0C
            RETURN
Label_0002  MOVLW   0x03
            MOVWF   0x31
            MOVLW   0x18
            MOVWF   0x32
            MOVLW   0x02
            MOVWF   0x33
Label_000F  DECFSZ  0x31      , f
            GOTO    Label_000D
            DECFSZ  0x32      , f
Label_000D  GOTO    Label_000E
            DECFSZ  0x33      , f
Label_000E  GOTO    Label_000F
            GOTO    Label_0010
Label_0010  RETURN
            RETLW   0x00
            RETLW   0x00
 
            ORG     0x2000
            DATA    0x0F
            DATA    0x0F
            DATA    0x0F
            DATA    0x0F
 
            ORG     0x2007
            DATA    0x14
 
            ORG     0x2100
            DATA    0x02


            END
Si te fijas, hasta las estiquetas de los gotos aparecen. Este está mejor traducido.

No me puedo creer que el MPLAB v8.92 aún tiene muchos detalles pulidos que el MPLAB X.

El que dice nuestro amigo arriba es de esta versión, la 8.xx. Haber si espabilan con el MPLAB X que tiene que pulir muchas cosas.

Saludo.
31/07/2014 #5

Avatar de MikeLunatiko

Meta dijo: Ver Mensaje
Si te fijas, hasta las estiquetas de los gotos aparecen. Este está mejor traducido.
Tanto como decir que aparecen... ha cogido y les ha dado un nombre con una numeración: label1, label2, label3...

¿Dónde encontraste esta opción en MPLAB X? La busco pero no la encuentro.
31/07/2014 #6

Avatar de Daniel Meza

Pero revísalo bien porque allí reconoce el código como para un 16F84A y originalmente dices que es de un 12F629

Con respecto al MPLAB creo que si le falta depuración, lo descargué pero no me acomodé con él, está muy cambiado todo con respecto a versiones anteriores
31/07/2014 #7

Avatar de Meta

Hola:

He señalado en el 12F29, y al descompilar siempre aparece el 16Fxx, no te preocupes.

En cuanto a MPLAB v8 es el que se puede ver las etiquetas, te las generan, como label1, label2, label3... En MPLAB X no lo hace. MPLAB X tiene mucho que mejorar.

Buenas.
31/07/2014 #8

Avatar de JoaquinFerrero

Viendo que el MPLAB X no hace nada de eso, ni siquiera con la utilidad hexmate, he pedido ayuda al amigo Google, que me ha recomendado la utilidad unPIC.pl, y como yo soy programador de Perl, pues no he podido resistirme

Lo he ejecutado así:

perl unPIC.pl p12f629.inc misterio.hex

Y ha salido esto:
Código:
unPIC.pl  -- written by Tamas Rudnai

loading INC file "p12f629.inc"
 loaded from 338 lines of INC file
loading HEX file "misterio.hex"
186 bytes loaded from 17 lines of HEX file
PIC 14bit disassembled 91 instructions, 2 control datas and 30 labels
Código PHP:
;**********************************************************
;*  
misterio.hex
;**********************************************************
;*  
This file had been disassembled using unPIC.pl
;*  
;*  
unPIC.pl is written by Tamas Rudnai
;*   -> based on Timo Rossi's work on pic14dis.c
;**********************************************************
;*  Please advised that unPIC.pl is not foolproof.
;*  It could happen that the code was not correctly
;*  reversed as the chip is not defined corretly
;*  or because of a bug in the tool'
s code.
;**********************************************************


        list 
p=12f629

        
include "p12f629.inc"


Rst_Vector  org 0x000
        nop                         
00000000
        nop                         
00010000
        nop                         
00020000
        bcf             STATUS
RP0 00031283
        movlw           0x07        
00043007
        movwf           mem_19      
00050099
        bsf             STATUS
RP0 00061683
        movlw           0x38        
00073038
        movwf           mem_05      
00080085
        movlw           0xc0        
000930C0
        movwf           mem_01      
000A0081
        clrf            mem_1b
f   000B019B
        bsf             mem_1c
0   000C141C
        movf            mem_1a
W   000D081A
        bcf             STATUS
RP0 000E1283
        movwf           mem_05      
000F0085
        clrf            mem_30
f   001001B0
        clrf            mem_0c
f   0011018C

label_012
jump here from0032
jump here from0037
jump here from003C
jump here from003D
        btfss           mem_05
3   00121D85
        
goto            $-1         00132812

        call            sub_04b     
0014204B

loop_015
jump here from0017
jump here from001A
jump here from001D
jump here from0020
jump here from0023
        btfss           mem_05
3   00151D85
        
goto            loop_018    00162818
        
goto            loop_015    00172815
;
end of loop_015
;------------------------------------------------------------


loop_018
jump here from0016
        call            sub_04b     
0018204B

        btfsc           mem_05
3   00191985
        
goto            loop_015    001A2815

        call            sub_04b     
001B204B

        btfsc           mem_05
3   001C1985
        
goto            loop_015    001D2815

        call            sub_04b     
001E204B

        btfsc           mem_05
3   001F1985
        
goto            loop_015    00202815

        call            sub_04b     
0021204B

        btfsc           mem_05
3   00221985
        
goto            loop_015    00232815
        
goto            $+1         00242825
;
end of loop_018
;------------------------------------------------------------


label_025
        btfss           mem_05
0   00251C05
        
goto            loop_028    00262828
        
goto            label_02b   0027282B
;
end of label_025
;------------------------------------------------------------


loop_028
jump here from0026
        btfss           mem_05
2   00281D05
        
goto            loop_02e    0029282E
        
goto            label_033   002A2833
;
end of loop_028
;------------------------------------------------------------


label_02b
jump here from0027
        btfss           mem_05
2   002B1D05
        
goto            loop_038    002C2838
        
goto            label_03d   002D283D
;
end of label_02b
;------------------------------------------------------------


loop_02e
jump here from0029
        movlw           0x06        
002E3006
        movwf           mem_30      
002F00B0
        movwf           mem_05      
00300085
        call            sub_03e     
0031203E

        
goto            label_012   00322812

label_033
jump here from002A
        movlw           0x01        
00333001
        movwf           mem_30      
003400B0
        movwf           mem_05      
00350085
        call            sub_03e     
0036203E

        
goto            label_012   00372812

loop_038
jump here from002C
        movlw           0x05        
00383005
        movwf           mem_30      
003900B0
        movwf           mem_05      
003A0085
        call            sub_03e     
003B203E

        
goto            label_012   003C2812

label_03d
jump here from002D
        
goto            label_012   003D2812
;
end of label_03d
;------------------------------------------------------------


;------------------------------------------------------------
Subroutinesub_03e
;
called from0031
called from0036
called from003B

sub_03e
        movf            mem_30
W   003E0830
        bsf             STATUS
RP0 003F1683
        movwf           mem_1a      
0040009A
        bsf             mem_1c
2   0041151C
        movlw           0x55        
00423055
        movwf           mem_1d      
0043009D
        movlw           0xaa        
004430AA
        movwf           mem_1d      
0045009D
        bsf             mem_1c
1   0046149C
        bcf             mem_1c
2   0047111C
        bcf             STATUS
RP0 00481283
        clrf            mem_0c
f   0049018C
        
return                      ; 004A0008
;
end of sub_03e
;------------------------------------------------------------


;------------------------------------------------------------
Subroutinesub_04b
;
called from0014
called from0018
called from001B
called from001E
called from0021

sub_04b
        movlw           0x03        
004B3003
        movwf           mem_31      
004C00B1
        movlw           0x18        
004D3018
        movwf           mem_32      
004E00B2
        movlw           0x02        
004F3002
        movwf           mem_33      
005000B3

loop_051
jump here from0056
        decfsz          mem_31
f   00510BB1
        
goto            loop_054    00522854

        decfsz          mem_32
f   00530BB2

loop_054
jump here from0052
        
goto            loop_056    00542856

        decfsz          mem_33
f   00550BB3

loop_056
jump here from0054
        
goto            loop_051    00562851
        
goto            $+1         00572858
;
end of loop_056
;------------------------------------------------------------


label_058
        
return                      ; 00580008
;
end of sub_04b
;------------------------------------------------------------

        
retlw           0x00        00593400
        retlw           0x00        
005A3400
;
end of label_000
;------------------------------------------------------------

                                    ; 
005B0000
                                    
20073F54
                                    
21000002


;------------- symbol definitions ------------------

mem_00    equ   0x00
mem_01    equ   0x01
mem_05    equ   0x05
mem_0c    equ   0x0C
mem_19    equ   0x19
mem_1a    equ   0x1A
mem_1b    equ   0x1B
mem_1c    equ   0x1C
mem_1d    equ   0x1D
mem_30    equ   0x30
mem_31    equ   0x31
mem_32    equ   0x32
mem_33    equ   0x33


;---------------------------------------------------


        
end 
que... es "casi" perfecto... se ha comido algunas etiquetas. Pero bueno, queda muy bien.

Debería repasar el código, para ver dónde falla, pero ahora estoy algo liado con códigos del z80.

Edito: Arreglé el problema y pongo el nuevo código generado. Informé al autor del nuevo parche (enlace del mensaje #9)
31/07/2014 #9

Avatar de JoaquinFerrero

Bueno, al final me he picado, y he corregido el error que borraba las etiquetas como la que falta (la label_012).
31/07/2014 #10

Avatar de Meta

Hola:

Buenísimo. Voya probar.

Saludo.
02/08/2014 #11

Avatar de MikeLunatiko

Reitero mi pregunta que parece que ha pasado desapercibida.

¿Dónde está en MPLAB X la opción de pasar de un fichero .hex a un fichero .asm?

Gracias.
02/08/2014 #12

Avatar de JoaquinFerrero

En el MPLAB X, primero debes crear un proyecto que esté basado en el hex, y luego debes sacar la ventana con la vista de la zona de memoria de programa:

Window->PIC Memory Views->Program Memory

Vas a ella y en los desplegables (abajo) eliges Program y Code. Con eso ya estás viendo el código del programa.

Pulsas con el botón derecho del ratón en cualquier parte del código, y seleccionas Output to File... Grabas el archivo, y sale un código como el publicado en #1
02/08/2014 #13

Avatar de Meta

Hola:

Es importar de hex a ver algo parecido al asm, en MPLAB v8.92 se ve mejor las etiquetas. MPLAB X tiene que mejorar mucho.



Un saludo.
Imágenes Adjuntas
Tipo de Archivo: png Sin-título-2.png (201,1 KB (Kilobytes), 34 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.