kiki kaikai Inserito: 7 aprile 2011 Segnala Share Inserito: 7 aprile 2011 Ciao a tuttiesiste un programma che converte i file HEX in ASM ? il mio pic è un 16F84Aciao Link al commento Condividi su altri siti More sharing options...
kappa47 Inserita: 8 aprile 2011 Segnala Share Inserita: 8 aprile 2011 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 More sharing options...
GiRock Inserita: 8 aprile 2011 Segnala Share Inserita: 8 aprile 2011 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 More sharing options...
Livio Orsini Inserita: 8 aprile 2011 Segnala Share Inserita: 8 aprile 2011 (modificato) Sì, basta usare MPLAB di Microchip. E' gratuito, basta scaricarlo.Con un poco di pazienza si riesce a farlo in modo indiretto. Modificato: 8 aprile 2011 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
kiki kaikai Inserita: 8 aprile 2011 Autore Segnala Share Inserita: 8 aprile 2011 ciao grazie per le risposte, ho provato PicDisasm e proprio come dite voi non si capisce molto del fileIo 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 More sharing options...
kiki kaikai Inserita: 8 aprile 2011 Autore Segnala Share Inserita: 8 aprile 2011 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-VariableLRAM_0x0C equ 0x0CLRAM_0x0D equ 0x0DLRAM_0x0E equ 0x0ELRAM_0x0F equ 0x0FLRAM_0x10 equ 0x10LRAM_0x11 equ 0x11LRAM_0x12 equ 0x12LRAM_0x13 equ 0x13LRAM_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_0x0030LADR_0x001A MOVF LRAM_0x12,W BTFSC STATUS,Z GOTO LADR_0x001F DECF LRAM_0x12,F GOTO LADR_0x0030LADR_0x001F MOVLW 0x09 MOVWF LRAM_0x12 MOVF LRAM_0x11,W BTFSC STATUS,Z GOTO LADR_0x0026 DECF LRAM_0x11,F GOTO LADR_0x0030LADR_0x0026 MOVLW 0x09 MOVWF LRAM_0x11 MOVF LRAM_0x10,W BTFSC STATUS,Z GOTO LADR_0x002D DECF LRAM_0x10,F GOTO LADR_0x0030LADR_0x002D MOVLW 0x09 MOVWF LRAM_0x10 DECF LRAM_0x0F,FLADR_0x0030 BTFSC LRAM_0x13,0 GOTO LADR_0x00BA BTFSC LRAM_0x13,1 GOTO LADR_0x00BA GOTO LADR_0x005ELADR_0x0035 BCF PORTA,1 ; !!Bank!! PORTA - TRISALADR_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_0x00D5LADR_0x0051 MOVLW 0x14LADR_0x0052 MOVWF EEDATA ; !!Bank!! EEDATA - EECON1LADR_0x0053 MOVLW 0xF8 CALL LADR_0x005A NOP DECFSZ EEDATA,F ; !!Bank!! EEDATA - EECON1 GOTO LADR_0x0053 RETURN MOVLW 0xF9LADR_0x005A ADDLW 0x55 BTFSS STATUS,Z GOTO LADR_0x005A RETURNLADR_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_0x0DLADR_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_0x00D0LADR_0x0079 DECFSZ LRAM_0x0D,F GOTO LADR_0x00D0 MOVLW 0x10 MOVWF LRAM_0x0D GOTO LADR_0x0066LADR_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_0x0DLADR_0x0086 MOVF LRAM_0x11,W BTFSC STATUS,Z GOTO LADR_0x008B DECF LRAM_0x11,F GOTO LADR_0x00D0LADR_0x008B MOVLW 0x09 MOVWF LRAM_0x11 MOVF LRAM_0x10,W BTFSC STATUS,Z GOTO LADR_0x0092 DECF LRAM_0x10,F GOTO LADR_0x00D0LADR_0x0092 MOVLW 0x09 MOVWF LRAM_0x10 MOVF LRAM_0x0F,W BTFSC STATUS,Z GOTO LADR_0x0099 DECF LRAM_0x0F,F GOTO LADR_0x00D0LADR_0x0099 MOVLW 0x09 MOVWF LRAM_0x0F GOTO LADR_0x00D0LADR_0x009C DECFSZ LRAM_0x0D,F GOTO LADR_0x00D0 MOVLW 0x10 MOVWF LRAM_0x0D GOTO LADR_0x0086LADR_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_0x00D0LADR_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_0x00D0LADR_0x00C6 BTFSS LRAM_0x13,0 GOTO LADR_0x00CA BCF LRAM_0x13,0 GOTO LADR_0x00D0LADR_0x00CA CALL LADR_0x0106 BCF LRAM_0x13,1 BCF PORTA,2 ; !!Bank!! PORTA - TRISA GOTO LADR_0x00D0LADR_0x00CE BCF LRAM_0x13,7 BCF PORTA,2 ; !!Bank!! PORTA - TRISALADR_0x00D0 BTFSS LRAM_0x13,0 GOTO LADR_0x0035 BSF PORTA,1 ; !!Bank!! PORTA - TRISA BCF PORTA,2 ; !!Bank!! PORTA - TRISA GOTO LADR_0x00D6LADR_0x00D5 BCF PORTA,1 ; !!Bank!! PORTA - TRISALADR_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_0x00F2LADR_0x00E3 BTFSS LRAM_0x0E,6 GOTO LADR_0x00E9 MOVF LRAM_0x10,W IORWF LRAM_0x0E,W MOVWF PORTB ; !!Bank!! PORTB - TRISB GOTO LADR_0x00F2LADR_0x00E9 BTFSS LRAM_0x0E,5 GOTO LADR_0x00EF MOVF LRAM_0x11,W IORWF LRAM_0x0E,W MOVWF PORTB ; !!Bank!! PORTB - TRISB GOTO LADR_0x00F2LADR_0x00EF MOVF LRAM_0x12,W IORWF LRAM_0x0E,W MOVWF PORTB ; !!Bank!! PORTB - TRISBLADR_0x00F2 MOVLW 0x06 MOVWF TMR0 ; !!Bank!! TMR0 - OPTION_REG BCF PORTA,2 ; !!Bank!! PORTA - TRISA CLRF LRAM_0x14 BCF INTCON,T0IF RETFIELADR_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 - EECON1LADR_0x0101 BTFSC EEDATA,1 ; !!Bank!! EEDATA - EECON1 GOTO LADR_0x0101 BSF INTCON,GIE BCF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select RETURNLADR_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 RETURNLADR_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_0x0ELADR_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_0x12LADR_0x013A MOVLW 0x06 MOVWF TMR0 ; !!Bank!! TMR0 - OPTION_REG MOVLW 0xFA MOVWF LRAM_0x0C BSF INTCON,T0IELADR_0x013F GOTO LADR_0x013F End Link al commento Condividi su altri siti More sharing options...
Nikiki Inserita: 22 aprile 2011 Segnala Share Inserita: 22 aprile 2011 Una volta mi ci divertivo un sacco con questi giochetti... 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... Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora