errori in MPLAB
Moderatore:
Paolino
41 messaggi
• Pagina 2 di 5 • 1, 2, 3, 4, 5
0
voti
[12] Re: errori in MPLAB
Il tuo progetto vieno assemblato bene, anche se escono alcuni message 302 in cui mi vene detto che l'operando usato non è nel banco 0 e alcuni warning 207 in cui mi viene detto che è stata trovata una label che non è nelle prima colonna......
L'importante è che sia riuscito ad assemblarlo
grazie mille per l'aiuto
L'importante è che sia riuscito ad assemblarlo
grazie mille per l'aiuto
1
voti
[13] Re: errori in MPLAB
andrew93 ha scritto:Il tuo progetto vieno assemblato bene...
Calma, calma, è il TUO progetto
andrew93 ha scritto:...anche se escono alcuni message 302 in cui mi vene detto che l'operando usato non è nel banco 0...
normale: verifica che ci siano i comandi di "banksel".
andrew93 ha scritto:...e alcuni warning 207 in cui mi viene detto che è stata trovata una label che non è nelle prima colonna......
controlla l'indentazione!
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
[14] Re: errori in MPLAB
Sarà anche mio ma senza il tuo aiuto non sarei andato da nessuna parte...
I comandi di banksel ci sono e l'indentazione è ok, ma fa niente tento viene assemblato ugualmente.
Mi è venuto solo un ultimo dubbio riguardo la simulazione in MPLAB: se io lancio la simulazione con anche gli stimolus, il programma mi si blocca nella label della folle, mentre se quella la salto mi va avanti da soloin automatico. Il fatto che non funzioni nella simulazione non vuol dire che non funzioni neanche nella realtà vero??
I comandi di banksel ci sono e l'indentazione è ok, ma fa niente tento viene assemblato ugualmente.
Mi è venuto solo un ultimo dubbio riguardo la simulazione in MPLAB: se io lancio la simulazione con anche gli stimolus, il programma mi si blocca nella label della folle, mentre se quella la salto mi va avanti da soloin automatico. Il fatto che non funzioni nella simulazione non vuol dire che non funzioni neanche nella realtà vero??
1
voti
[15] Re: errori in MPLAB
Ho indentato ancora le direttive ORG e CONFIG ma il warning [207] non ce l'ho.
Sul fatto che la simulazione si fermi, non sarei molto tranquillo...! Controlla bene che non ci siano altri errori di trascrizione. Il rischio è che poi, davvero, non funzioni nulla.
Ciao.
Paolo.
Sul fatto che la simulazione si fermi, non sarei molto tranquillo...! Controlla bene che non ci siano altri errori di trascrizione. Il rischio è che poi, davvero, non funzioni nulla.
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
[16] Re: errori in MPLAB
Avrei ancora un'ultima cosa da chiederti, che però non c'entra più con il problema precedente. Il problema è che trovandomi a scrivere un altro programma mi si presenta il problema di dover confrontare tre dati: uno è il risultato della conversione analogico digitale (10 bit) e gli altri sarebbero due soglie una superiore e una inferiore. Come si fa a fare questo confronto in assebler?
mi scuso della mia ignoranza in materia :)
grazie mille!!
andrew
mi scuso della mia ignoranza in materia :)
grazie mille!!
andrew
1
voti
[17] Re: errori in MPLAB
Ti lascio lo spunto, prova a vedere se riesci a stendere due righe autonomamente. Poi se ti trovi ancora nel pantano, vediamo che fare.
Dunque, lo spunto è il seguente.
In assembly non sono disponibili i comandi per un cofronto, pertanto è necessario eseguire una semplice operazione matematica: la sottrazione. Supponi di avere tre numeri: SogliaSup, SogliaInf, ValoreADC. La sottrazione:
![\[ris=SogliaSup-ValoreADC\] \[ris=SogliaSup-ValoreADC\]](/forum/latexrender/pictures/dfd268f766f108c393f0cee3dce58ffb.png)
è tale per cui potresti avere tre risultati utili:
![\[ris<0\] \[ris<0\]](/forum/latexrender/pictures/d3116aad409044fb26d30fe938e35b7b.png)
![\[ris=0\] \[ris=0\]](/forum/latexrender/pictures/5e06d1c95d0bf087af458b8d3b6c1ee0.png)
![\[ris>0\] \[ris>0\]](/forum/latexrender/pictures/7f0772e3ad139c5cef7fceb903d6092a.png)
Nel caso in cui
allora è vero che
e quindi siamo sotto la soglia superiore. Ma come implementare questa funzione e accorgersi che il risultato è quello desiderato? Tutti i microcontrollori e microprocessori dispongono di registri di STATUS nei quali vengono settati alcuni bit per indicare il risultato logico di talune operazioni. Tra i bit più significativi ti ricordo:
- C, bit di CARRY (riporto)
- Z, bit di ZERO
Se una sottrazione ha come risultato zero, il bit Z viene settato. Se una sottrazione ha come risultato un numero minore di zero, il bit C viene settato.
Pertanto il trucco è quello di andare a vedere il valore di questi bit e prendere decisioni in base al valore che si trova. Quindi, una bozza di routine "Confronto" potrebbe essere questa:
L'istruzione bc esegue un salto condizionato se c'è carry (Branch if Carry is set), a una label indicata.
Ovviamente dovrai completare questa routine e implementare quella del confronto con la soglia inferiore.
Se avessi fatto il confronto in C, sarebbe stato decisamente più semplice: bastava usare gli operatori <,= e >
Il "lavoro sporco" lo avrebbe fatto il compilatore
Ma sono convinto che, soprattutto per chi è all'inizio, un po' di assembly male non fa, anche perché così si capisce bene come lavora il micro e quale sia la logica che sta dietro.
Fammi sapere.
Ciao.
Paolo.
Dunque, lo spunto è il seguente.
In assembly non sono disponibili i comandi per un cofronto, pertanto è necessario eseguire una semplice operazione matematica: la sottrazione. Supponi di avere tre numeri: SogliaSup, SogliaInf, ValoreADC. La sottrazione:
![\[ris=SogliaSup-ValoreADC\] \[ris=SogliaSup-ValoreADC\]](/forum/latexrender/pictures/dfd268f766f108c393f0cee3dce58ffb.png)
è tale per cui potresti avere tre risultati utili:
![\[ris<0\] \[ris<0\]](/forum/latexrender/pictures/d3116aad409044fb26d30fe938e35b7b.png)
![\[ris=0\] \[ris=0\]](/forum/latexrender/pictures/5e06d1c95d0bf087af458b8d3b6c1ee0.png)
![\[ris>0\] \[ris>0\]](/forum/latexrender/pictures/7f0772e3ad139c5cef7fceb903d6092a.png)
Nel caso in cui
allora è vero che
e quindi siamo sotto la soglia superiore. Ma come implementare questa funzione e accorgersi che il risultato è quello desiderato? Tutti i microcontrollori e microprocessori dispongono di registri di STATUS nei quali vengono settati alcuni bit per indicare il risultato logico di talune operazioni. Tra i bit più significativi ti ricordo:- C, bit di CARRY (riporto)
- Z, bit di ZERO
Se una sottrazione ha come risultato zero, il bit Z viene settato. Se una sottrazione ha come risultato un numero minore di zero, il bit C viene settato.
Pertanto il trucco è quello di andare a vedere il valore di questi bit e prendere decisioni in base al valore che si trova. Quindi, una bozza di routine "Confronto" potrebbe essere questa:
- Codice: Seleziona tutto
Confronto
movfw ValoreADC
subwf SogliaSup
bc MinoreSogliaSup
OltreSup
; il valore acquisito ValoreADC è maggiore della soglia
...
...
...
goto FineConfronto
MinoreSogliaSup
; il valore acquisito è sotto la soglia
...
...
...
FineConfronto
RET
L'istruzione bc esegue un salto condizionato se c'è carry (Branch if Carry is set), a una label indicata.
Ovviamente dovrai completare questa routine e implementare quella del confronto con la soglia inferiore.
Se avessi fatto il confronto in C, sarebbe stato decisamente più semplice: bastava usare gli operatori <,= e >
Il "lavoro sporco" lo avrebbe fatto il compilatore
Ma sono convinto che, soprattutto per chi è all'inizio, un po' di assembly male non fa, anche perché così si capisce bene come lavora il micro e quale sia la logica che sta dietro.
Fammi sapere.
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
[18] Re: errori in MPLAB
se al posto dell'istruzione bc usassi btfss (test del bit del registro f salta l'istruzione successiva se il bit è settato)??
ed un'ultima cosa: si il risultato dell'ADC è diviso in due registri cambia tanto a livello software?? o sono solo un paio di righe in più di programma, nel sensoche prima faccio il confronto di una parte del risultato con la soglia superiore e poi se non corrisponde, con quella minore. lo stesso processo lo posso fare con l'altra parte di risultato.
andrew
ed un'ultima cosa: si il risultato dell'ADC è diviso in due registri cambia tanto a livello software?? o sono solo un paio di righe in più di programma, nel sensoche prima faccio il confronto di una parte del risultato con la soglia superiore e poi se non corrisponde, con quella minore. lo stesso processo lo posso fare con l'altra parte di risultato.
andrew
1
voti
[19] Re: errori in MPLAB
andrew93 ha scritto:se al posto dell'istruzione bc usassi btfss (test del bit del registro f salta l'istruzione successiva se il bit è settato)??
Certamente! In tal caso dovresti scrivere qualcosa del tipo:
- Codice: Seleziona tutto
btfss STATUS,C
andrew93 ha scritto:il risultato dell'ADC è diviso in due registri cambia tanto a livello software?? o sono solo un paio di righe in più di programma, nel sensoche prima faccio il confronto di una parte del risultato con la soglia superiore e poi se non corrisponde, con quella minore.
Le cose sono "leggermente" diverse, se il confronto lo fai su dati a 10 bit. Come hai giustamente notato, devi confrontare un dato su due byte. Un modo di procedere, in questo caso, potrebbe essere il seguente: se la parte alta di entrambi i dati (risultato e soglia) sono uguali, allora confronto la parte bassa come abbiamo indicato nel post [17].
Se invece i byte alti sono differenti, i casi possibili sono nove:
parte alta di ValoreADC = 10
parte alta di SogliaSup = 00
parte alta di ValoreADC = 10
parte alta di SogliaSup = 01
parte alta di ValoreADC = 10
parte alta di SogliaSup = 11
parte alta di ValoreADC = 01
parte alta di SogliaSup = 00
parte alta di ValoreADC = 01
parte alta di SogliaSup = 10
parte alta di ValoreADC = 01
parte alta di SogliaSup = 11
parte alta di ValoreADC = 11
parte alta di SogliaSup = 00
parte alta di ValoreADC = 11
parte alta di SogliaSup = 10
parte alta di ValoreADC = 11
parte alta di SogliaSup = 01
Spero di non averti confuso le idee..
Fammi sapere.
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
[20] Re: errori in MPLAB
No no no, confuse no di certo!!!!
Sinceramente non avevo nemmeno tenuto conto di tutti quei casi......hihihihihi
Ho provato a buttare gìù una bozzetta di listato che poi, dopo averla compilata e sistemati gli errori, provvederò a postare per discuterne un attimo sulla giustezza del listato e dell'insieme.
Per ora grazie per l'aiuto
andrew
Sinceramente non avevo nemmeno tenuto conto di tutti quei casi......hihihihihi
Ho provato a buttare gìù una bozzetta di listato che poi, dopo averla compilata e sistemati gli errori, provvederò a postare per discuterne un attimo sulla giustezza del listato e dell'insieme.
Per ora grazie per l'aiuto
andrew
41 messaggi
• Pagina 2 di 5 • 1, 2, 3, 4, 5
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 17 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

