Newsgroup: it.hobby.elettronica.digitale
Titolo: [help] Errori nella compilazione; dove sbaglio?

salve a tutti;
mi sto cimentando con il pic 16f84A; parto piu o meno da zero quindi
magari è una domanda super banale ma non riesco a capire dove sbaglio:
voglio compilare il programma in questa pagina:
http://dev.emcelettronica.com/UP/seq.asm
che in pratica mi dovrebbe far accendere dei led in sequenza.
Il compilatore che uso è MPASM 3,90 della microchip; il problema è che
dandogli in pasto il sorgente non mi da il file XEH. Il file di errore non
riporta nulla ma se vado ad aprire il file .LST vedo che ad alcuni comandi
il compilatore associa dei punti interrogativi:
ESEMPIO:
000A   1003           00051         bcf     STATUS,C
000B   0D??           00052         rlf     Shift,F
                      00053 
000C   1A00           00054         btfsc   Shift,4
000D   0E??           00055         swapf   Shift,F
                      00056 
000E   2???           00057         call    Delay
                      00058 
000F   2???           00059         goto    MainLoop
......
il compilatore mi segna 0 errori e 2 messaggi (soppressi)
secondo voi dov'è l'intoppo? avete qualche consiglio da darmi?
grazie mille a tutti.
-- 
Davide C.
www.ingegnerando.it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 il compilatore mi segna 0 errori e 2 messaggi (soppressi)
Non conosco l'assemblatore in oggetto, però direi che nelle istruzioni dove
ci sono i punti interrogativi l'assemblatore non ha potuto completare
l'istruzione. Ha inserito solo l'opcode, manca la parte relativa
all'argomento.
Ad esempio per "call Delay" ha inserito l'opcode dell'istruzione "call" nei
primi 4 bit, poi nei successivi 12 bit deve inserire l'indirizzo a cui
saltare secondo il metodo di indirizzamento previsto, ossia l'indirizzo
della label "Delay" che non è definita da nessuna parte (almeno nel pezzo
che hai postato). Stessa cosa per "MainLoop" e "F".
C'è da dire che questi indirizzi/simboli (Delay, MainLoop, ...) possono
venir risolti nella fase successiva di link se il programma è costituto dai
più file sorgenti (in questo caso all'inizio di questo modulo bisognerebbe
indicare come globali/esterni questi indirizzi/simboli con una qualche
direttiva del tipo .global, .extern, ...).
L'assemblatore assemblando questo file non ha modo di completare alcune
istruzioni e quindi nel file di listing indica questa cosa con quei punti
interrogativi.
Il file di listing è generato in output dall'assemblatore, non dal linker.
A questo punto mi viene da chiedere se hai solo assemblato senza linkare. E'
il linker che genera il file HEX finale.
Se lanci anche il linker e i simboli MainLoop, Delay, ... non sono definiti
da nessuna parte nei file che vai a linkare, allora il linker ti genera
errori perchè non sa come risolverli.

 errori perchè non sa come risolverli.
nel listato completo (al link del post iniziale) quei simboli sono
definiti.
Non ho i tool Microchip a portata di mano, ma direi che se fai un
Build o qualcosa del genere dovresti arrivare ad avere l'hex.
--
bikerfab
Viaggi in bicicletta, report foto e informazioni
Travelling by bicycle, report, pics and information
http://bikerfab.altervista.org/

Anche io sto partendo adesso in questa avventura, non ti posso dare
una grande mano, ma l'esempio di Tanzilli per l'accensione del led,
che ho io è quello riportato in calce, e MPLAB IDE con MPASM  5.11 lo
assembla senza errori, ho copiato quello segnalato da te (ha qualche
differenza) ma viene assemblato correttamente anche lui.
(...per comodità è stato rinominato LED1.asm).
Ciao  Cesare
Make: The target "F:\ELETTRONICA\PIC\Progetti\secondo\led1.o" is out
of date.
Executing: "C:\Programmi\Microchip\MPASM Suite\MPAsmWin.exe" /q
/p16F84A "led1.asm" /l"led1.lst" /e"led1.err"
Loaded F:\ELETTRONICA\PIC\Progetti\secondo\led1.cod.
BUILD SUCCEEDED: Tue Jun 12 19:21:00 2007
;**************************************************
; Pic by example
; LED.ASM
;
; (c) 2004, Sergio Tanzilli 
; 
http://www.tanzilli.com
;**************************************************
        PROCESSOR       16F84A
        RADIX           DEC
        INCLUDE         "P16F84A.INC"
        ERRORLEVEL      -302
        ;Setup of PIC configuration flags
        ;XT oscillator
        ;Disable watch dog timer
        ;Enable power up timer
        ;Disable code protect
        __CONFIG        0x3FF1
LED     EQU     0
        ORG     0x0C
Count   RES     2
        ;Reset Vector
        ;Start point at CPU reset
        ORG     0x00
        bsf     STATUS,RP0
        movlw   B'00011111'
        movwf   TRISA 
        movlw   B'11111110'
        movwf   TRISB 
        bcf     STATUS,RP0
        bsf     PORTB,LED
MainLoop
        call    Delay
        btfsc   PORTB,LED
        goto    SetToZero
        bsf     PORTB,LED
        goto    MainLoop
SetToZero
        bcf     PORTB,LED
        goto    MainLoop
        ;Subroutines
        ;Software delay
Delay
        clrf    Count
        clrf    Count+1
DelayLoop
        decfsz  Count,1
        goto    DelayLoop
        decfsz  Count+1,1
        goto    DelayLoop
        return
        END

 il linker che genera il file HEX finale.
penso allora che effettivamente abbia solo assemblato ma leggendo la guida
che ho trovato online diceva testualmente "Per generare il file .HEX
bisogna disporre di un programma assemblatore.." indicando poi di
scaricare Mpasm dal sito della microchip... visto che probabilmente è
questo il problema quale software mi consigli per assemblare e linkare i
sorgenti?
grazie.


 sorgenti?
Va benissimo Mpasm della Microchip. Come lo usi?
Se lo lanci da MPLAB, hai alcuni tasti/menu a disposizione. A seconda di
cosa scegli č possibile solo assemblare il singolo file di codice sorgente
(forse č quello che hai fatto) o fare tutto (comando "build all" o qualcosa
di simile), ossia assemblare tutti i file sorgenti che appartengono al
progetto e poi linkarli assieme in modo da ottenere il file hex finale (sono
2 passaggi separati).

 Se lo lanci da MPLAB, hai alcuni tasti/menu a disposizione.
si, infatti dopo aver letto il messaggio di Cesare ho scaricato MPLAB e
con quello,  tramite "build all" sono riuscito ad ottenere il file .HEX 
ora sono bloccato alla fase successiva: ho un programmatore seriale di
quelli che si alimentano direttamente dalla seriale e come mi avevano
pronosticato fa le bizze.. sembrava funzionare ed infatti se leggo la
memoria pare andare a buon fine ma se provo a scrivere ad un certo punto
mi da un errore..
mi hanno consigliato di usare un programmatore parallelo tipo questo:
http://www.pablin.com.ar/electron/circuito/mc/ppp/
abbinato al programma winpic800
cosa ne pensi?
grazie mille dell'aiuto.


 abbinato al programma winpic800
IO ho realizzato ed uso da diversi anni un clone del Propic2
semplificato. Non riesco a trovare in rete lo schema esatto che ho
utilizzato, ma è qualcosa di molto simile al seguente:
http://spazioinwind.libero.it/nferrarese/elettronica/mpp2c/mpp2c.htm
Qui c'è una procedura utile per il test del programmatore:
http://www.enetsystems.com/~lorenzo/propic2/

 grazie mille a tutti.
Guarda chi si rivede.... non ti fare sentire mai eh.... gli esami come 
vanno?
...mi raccomando a luglio (16 o 17) voglio tutto il team di ingegnerando :) 
!!
...postami in email privata...ho diversi consigli da darti con i 
microcontrollori...
Ciao
-- 
____________________
      CG Engineering
 Lab. Ricerca & Sviluppo
********************
Skype : cg_ingegnering
MSN : 
cgaudiola...@interfree.it
ICQ UIN# : 104528066 

 microcontrollori...
ciao Cristiano! è un piacere risentirti.. hai posta! ;)


anche io ho un piccolo programmatore , ma anche a me hanno
sconsigliato "categoricamente" l'alimentazione via seriale,
causa.......te ne sei accorto da solo.
Ciao Cesare
