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