Vai al contenuto
PLC Forum


Pic 16f84a - consiglio


kiki kaikai

Messaggi consigliati


Ci sono, ma nessuno funziona bene.

Il problema e' non si riesce a decodificare, se ci sono, le costanti

(ad esempio le "define table" o le "data").

Ciao.

Link al commento
Condividi su altri siti

Già, non si capisce un granché dal file risultante...

Ne ho provato uno adesso compreso di codice sorgente, e questo è quanto può fare:

Address OpCode  Value

A0000   BSF     0x03,5
A0001   MOVLW   0x1C
A0002   MOVWF   0x05
A0003   MOVLW   0x00
A0004   MOVWF   0x06
A0005   BCF     0x03,5
A0006   MOVWF   0x06
A0007   BTFSC   0x05,2
A0008   GOTO    A0007
A0009   MOVLW   0x01
A000A   MOVWF   0x06
A000B   GOTO    A0009
A000C   None

Link al commento
Condividi su altri siti

Sì, basta usare MPLAB di Microchip. E' gratuito, basta scaricarlo.

Con un poco di pazienza si riesce a farlo in modo indiretto.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

ciao grazie per le risposte, ho provato PicDisasm e proprio come dite voi non si capisce molto del file

Io già uso MPLAB IDE per scrivere i programmi ma non conosco la funzione disassembler, sono andato in Disassembly Listing si apre una pagina bianca ma niente di più, come si usa? vorrei tentare chissà che lavora meglio di PicDisasm

Link al commento
Condividi su altri siti

Ora mi spiego meglio, il mio problema è che vorrei modificare il codice per migliorare il mio lavoro , ho trovato in rete un timer che lavora con un 16f84a già programmato per incrementare il tempo a 10 secondi alla volta , io lo vorrei modificare a 1 secondo alla volta per i tempi che servono al mio lavoro .

questo è il codice che sono riuscito a leggere con PicDisasm:

processor 16F84A

#include <P16F84A.INC>

__config _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ; 0x3FF1

; RAM-Variable

LRAM_0x0C equ 0x0C

LRAM_0x0D equ 0x0D

LRAM_0x0E equ 0x0E

LRAM_0x0F equ 0x0F

LRAM_0x10 equ 0x10

LRAM_0x11 equ 0x11

LRAM_0x12 equ 0x12

LRAM_0x13 equ 0x13

LRAM_0x14 equ 0x14

; Program

Org 0x0000

; Reset-Vector

GOTO LADR_0x011F

Org 0x0004

; Interrupt-Vector

DECFSZ LRAM_0x0C,F

GOTO LADR_0x0030

MOVLW 0xFA

MOVWF LRAM_0x0C

BTFSS LRAM_0x13,0

GOTO LADR_0x0030

BSF LRAM_0x13,1

BSF LRAM_0x14,1

MOVF LRAM_0x0F,W

BTFSS STATUS,Z

GOTO LADR_0x001A

MOVF LRAM_0x10,W

BTFSS STATUS,Z

GOTO LADR_0x001A

MOVF LRAM_0x11,W

BTFSS STATUS,Z

GOTO LADR_0x001A

MOVF LRAM_0x12,W

BTFSS STATUS,Z

GOTO LADR_0x001A

BCF LRAM_0x13,0

GOTO LADR_0x0030

LADR_0x001A

MOVF LRAM_0x12,W

BTFSC STATUS,Z

GOTO LADR_0x001F

DECF LRAM_0x12,F

GOTO LADR_0x0030

LADR_0x001F

MOVLW 0x09

MOVWF LRAM_0x12

MOVF LRAM_0x11,W

BTFSC STATUS,Z

GOTO LADR_0x0026

DECF LRAM_0x11,F

GOTO LADR_0x0030

LADR_0x0026

MOVLW 0x09

MOVWF LRAM_0x11

MOVF LRAM_0x10,W

BTFSC STATUS,Z

GOTO LADR_0x002D

DECF LRAM_0x10,F

GOTO LADR_0x0030

LADR_0x002D

MOVLW 0x09

MOVWF LRAM_0x10

DECF LRAM_0x0F,F

LADR_0x0030

BTFSC LRAM_0x13,0

GOTO LADR_0x00BA

BTFSC LRAM_0x13,1

GOTO LADR_0x00BA

GOTO LADR_0x005E

LADR_0x0035

BCF PORTA,1 ; !!Bank!! PORTA - TRISA

LADR_0x0036

BTFSS LRAM_0x14,1

GOTO LADR_0x00D5

CLRF PORTB ; !!Bank!! PORTB - TRISB

BSF PORTA,2 ; !!Bank!! PORTA - TRISA

BSF PORTB,4 ; !!Bank!! PORTB - TRISB

BSF PORTB,5 ; !!Bank!! PORTB - TRISB

BSF PORTB,6 ; !!Bank!! PORTB - TRISB

BSF PORTB,7 ; !!Bank!! PORTB - TRISB

MOVLW 0xC8

CALL LADR_0x0052

BCF PORTA,2 ; !!Bank!! PORTA - TRISA

BCF PORTB,4 ; !!Bank!! PORTB - TRISB

BCF PORTB,5 ; !!Bank!! PORTB - TRISB

BCF PORTB,6 ; !!Bank!! PORTB - TRISB

BCF PORTB,7 ; !!Bank!! PORTB - TRISB

MOVLW 0xC8

CALL LADR_0x0052

BSF PORTB,0 ; !!Bank!! PORTB - TRISB

BTFSS PORTA,0 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x0036

CALL LADR_0x0051

BSF PORTB,0 ; !!Bank!! PORTB - TRISB

BTFSS PORTA,0 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x0036

BCF PORTA,2 ; !!Bank!! PORTA - TRISA

BCF LRAM_0x14,0

GOTO LADR_0x00D5

LADR_0x0051

MOVLW 0x14

LADR_0x0052

MOVWF EEDATA ; !!Bank!! EEDATA - EECON1

LADR_0x0053

MOVLW 0xF8

CALL LADR_0x005A

NOP

DECFSZ EEDATA,F ; !!Bank!! EEDATA - EECON1

GOTO LADR_0x0053

RETURN

MOVLW 0xF9

LADR_0x005A

ADDLW 0x55

BTFSS STATUS,Z

GOTO LADR_0x005A

RETURN

LADR_0x005E

MOVLW 0x04

MOVWF PORTB ; !!Bank!! PORTB - TRISB

BTFSS PORTA,0 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x007E

BTFSC LRAM_0x13,7

GOTO LADR_0x0079

BSF LRAM_0x13,7

CLRF LRAM_0x0D

LADR_0x0066

INCF LRAM_0x11,F

MOVF LRAM_0x11,W

XORLW 0x0A

BTFSS STATUS,Z

GOTO LADR_0x0079

CLRF LRAM_0x11

INCF LRAM_0x10,F

MOVF LRAM_0x10,W

XORLW 0x0A

BTFSS STATUS,Z

GOTO LADR_0x0079

CLRF LRAM_0x10

INCF LRAM_0x0F,F

MOVF LRAM_0x0F,W

XORLW 0x0A

BTFSS STATUS,Z

GOTO LADR_0x0079

CLRF LRAM_0x0F

GOTO LADR_0x00D0

LADR_0x0079

DECFSZ LRAM_0x0D,F

GOTO LADR_0x00D0

MOVLW 0x10

MOVWF LRAM_0x0D

GOTO LADR_0x0066

LADR_0x007E

MOVLW 0x08

MOVWF PORTB ; !!Bank!! PORTB - TRISB

BTFSS PORTA,0 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x00A1

BTFSC LRAM_0x13,7

GOTO LADR_0x009C

BSF LRAM_0x13,7

CLRF LRAM_0x0D

LADR_0x0086

MOVF LRAM_0x11,W

BTFSC STATUS,Z

GOTO LADR_0x008B

DECF LRAM_0x11,F

GOTO LADR_0x00D0

LADR_0x008B

MOVLW 0x09

MOVWF LRAM_0x11

MOVF LRAM_0x10,W

BTFSC STATUS,Z

GOTO LADR_0x0092

DECF LRAM_0x10,F

GOTO LADR_0x00D0

LADR_0x0092

MOVLW 0x09

MOVWF LRAM_0x10

MOVF LRAM_0x0F,W

BTFSC STATUS,Z

GOTO LADR_0x0099

DECF LRAM_0x0F,F

GOTO LADR_0x00D0

LADR_0x0099

MOVLW 0x09

MOVWF LRAM_0x0F

GOTO LADR_0x00D0

LADR_0x009C

DECFSZ LRAM_0x0D,F

GOTO LADR_0x00D0

MOVLW 0x10

MOVWF LRAM_0x0D

GOTO LADR_0x0086

LADR_0x00A1

MOVLW 0x02

MOVWF PORTB ; !!Bank!! PORTB - TRISB

BTFSS PORTA,0 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x00BA

BTFSC LRAM_0x13,7

GOTO LADR_0x00D0

BSF LRAM_0x13,7

CLRW

MOVWF EEADR ; !!Bank!! EEADR - EECON2

MOVF LRAM_0x0F,W

MOVWF EEDATA ; !!Bank!! EEDATA - EECON1

CALL LADR_0x00F8

INCF EEADR,F ; !!Bank!! EEADR - EECON2

MOVF LRAM_0x10,W

MOVWF EEDATA ; !!Bank!! EEDATA - EECON1

CALL LADR_0x00F8

INCF EEADR,F ; !!Bank!! EEADR - EECON2

MOVF LRAM_0x11,W

MOVWF EEDATA ; !!Bank!! EEDATA - EECON1

CALL LADR_0x00F8

INCF EEADR,F ; !!Bank!! EEADR - EECON2

MOVF LRAM_0x12,W

MOVWF EEDATA ; !!Bank!! EEDATA - EECON1

CALL LADR_0x00F8

GOTO LADR_0x00D0

LADR_0x00BA

BCF PORTA,2 ; !!Bank!! PORTA - TRISA

MOVLW 0x01

MOVWF PORTB ; !!Bank!! PORTB - TRISB

BTFSS PORTA,0 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x00CE

BTFSC LRAM_0x13,7

GOTO LADR_0x00D0

BSF LRAM_0x13,7

BTFSC LRAM_0x13,1

GOTO LADR_0x00C6

BSF LRAM_0x13,0

GOTO LADR_0x00D0

LADR_0x00C6

BTFSS LRAM_0x13,0

GOTO LADR_0x00CA

BCF LRAM_0x13,0

GOTO LADR_0x00D0

LADR_0x00CA

CALL LADR_0x0106

BCF LRAM_0x13,1

BCF PORTA,2 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x00D0

LADR_0x00CE

BCF LRAM_0x13,7

BCF PORTA,2 ; !!Bank!! PORTA - TRISA

LADR_0x00D0

BTFSS LRAM_0x13,0

GOTO LADR_0x0035

BSF PORTA,1 ; !!Bank!! PORTA - TRISA

BCF PORTA,2 ; !!Bank!! PORTA - TRISA

GOTO LADR_0x00D6

LADR_0x00D5

BCF PORTA,1 ; !!Bank!! PORTA - TRISA

LADR_0x00D6

MOVF LRAM_0x0E,W

ANDLW 0xE0

BTFSC STATUS,Z

BSF STATUS,C

RRF LRAM_0x0E,F

MOVLW 0xF0

ANDWF LRAM_0x0E,F

BTFSS LRAM_0x0E,7

GOTO LADR_0x00E3

MOVF LRAM_0x0F,W

IORWF LRAM_0x0E,W

MOVWF PORTB ; !!Bank!! PORTB - TRISB

GOTO LADR_0x00F2

LADR_0x00E3

BTFSS LRAM_0x0E,6

GOTO LADR_0x00E9

MOVF LRAM_0x10,W

IORWF LRAM_0x0E,W

MOVWF PORTB ; !!Bank!! PORTB - TRISB

GOTO LADR_0x00F2

LADR_0x00E9

BTFSS LRAM_0x0E,5

GOTO LADR_0x00EF

MOVF LRAM_0x11,W

IORWF LRAM_0x0E,W

MOVWF PORTB ; !!Bank!! PORTB - TRISB

GOTO LADR_0x00F2

LADR_0x00EF

MOVF LRAM_0x12,W

IORWF LRAM_0x0E,W

MOVWF PORTB ; !!Bank!! PORTB - TRISB

LADR_0x00F2

MOVLW 0x06

MOVWF TMR0 ; !!Bank!! TMR0 - OPTION_REG

BCF PORTA,2 ; !!Bank!! PORTA - TRISA

CLRF LRAM_0x14

BCF INTCON,T0IF

RETFIE

LADR_0x00F8

BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

BCF INTCON,GIE

BSF EEDATA,2 ; !!Bank!! EEDATA - EECON1

MOVLW 0x55

MOVWF EEADR ; !!Bank!! EEADR - EECON2

MOVLW 0xAA

MOVWF EEADR ; !!Bank!! EEADR - EECON2

BSF EEDATA,1 ; !!Bank!! EEDATA - EECON1

BCF EEDATA,2 ; !!Bank!! EEDATA - EECON1

LADR_0x0101

BTFSC EEDATA,1 ; !!Bank!! EEDATA - EECON1

GOTO LADR_0x0101

BSF INTCON,GIE

BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

RETURN

LADR_0x0106

CLRF EEADR ; !!Bank!! EEADR - EECON2

BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

BSF EEDATA,0 ; !!Bank!! EEDATA - EECON1

BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

MOVF EEDATA,W ; !!Bank!! EEDATA - EECON1

MOVWF LRAM_0x0F

INCF EEADR,F ; !!Bank!! EEADR - EECON2

BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

BSF EEDATA,0 ; !!Bank!! EEDATA - EECON1

BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

MOVF EEDATA,W ; !!Bank!! EEDATA - EECON1

MOVWF LRAM_0x10

INCF EEADR,F ; !!Bank!! EEADR - EECON2

BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

BSF EEDATA,0 ; !!Bank!! EEDATA - EECON1

BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

MOVF EEDATA,W ; !!Bank!! EEDATA - EECON1

MOVWF LRAM_0x11

INCF EEADR,F ; !!Bank!! EEADR - EECON2

BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

BSF EEDATA,0 ; !!Bank!! EEDATA - EECON1

BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

MOVF EEDATA,W ; !!Bank!! EEDATA - EECON1

MOVWF LRAM_0x12

RETURN

LADR_0x011F

BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

MOVLW 0x19

MOVWF PORTA ; !!Bank!! PORTA - TRISA

MOVLW 0x00

MOVWF PORTB ; !!Bank!! PORTB - TRISB

MOVLW 0xC3

MOVWF TMR0 ; !!Bank!! TMR0 - OPTION_REG

MOVLW 0xA0

MOVWF INTCON

BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select

CLRF LRAM_0x0E

LADR_0x012A

NOP

DECFSZ LRAM_0x0E,F

GOTO LADR_0x012A

CLRF LRAM_0x0E

CLRF LRAM_0x13

CLRF LRAM_0x14

CALL LADR_0x0106

MOVF LRAM_0x0F,W

XORLW 0xFF

BTFSS STATUS,Z

GOTO LADR_0x013A

MOVLW 0x02

MOVWF LRAM_0x10

CLRF LRAM_0x0F

CLRF LRAM_0x11

CLRF LRAM_0x12

LADR_0x013A

MOVLW 0x06

MOVWF TMR0 ; !!Bank!! TMR0 - OPTION_REG

MOVLW 0xFA

MOVWF LRAM_0x0C

BSF INTCON,T0IE

LADR_0x013F

GOTO LADR_0x013F

End

Link al commento
Condividi su altri siti

  • 2 weeks later...

Una volta mi ci divertivo un sacco con questi giochetti... smile.gif

Per prima cosa devi isolare le varie funzioni (subroutine), le identifichi facilmente perchè terminano con l'istruzione "return", fatto questo risulterà già più leggibile e dovrai capire l'uso a cui è destinata ciascuna subroutine. Man mano che le individui sostituisci le varie "LADR_0x0051" con delle etichette dal senso logico per renderlo più leggibile, sia all'inizio della sub che nella "call".

Man mano che capisci cosa fa una parte di codice commenta, commenta e ancora commenta, alla fine ti ritrovi praticamente il sorgente.

Comunque o visto dei disassembler generare dei disassemblati migliori.

Il primo salto dopo il vettore di reset va dritto al main (LADR_0x011F) e dopo l'inizializzazione viene chiamata la SUB all'indirizzo LADR_0x0106, questa è evidente che gestisce la EEPROM (probabilmente legge qualche parametro di configurazione in eeprom)... continua tu... smile.gif

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...