
![]() | #11 (permalink) Top | |
User Data registr.: 28-02-2006
Messaggi: 1.059
|
a parte gli inconvenineti dovuti al poco tempo a disposizione .. trovo piuttosto chiaro l'argomento assembler sul tanzilli .. è solo una questione di esperinza .. per esempio lavorare con numeri a 16 bit.. se lo fai una volta e capisci il meccanismo il gioco è fatto.. ..oppure costruire un array oppure le if fatte attraverso somme o sottrazioni e controllo dei bit C e Z di STATUS ..insomma sono 4 cose che occorre farsele bastare per far tutto.. comunque facendo bene il diagramma di flusso il lavoro viene facilitato.. invece ti posso assicurare che è traumatico passare dalla programmazione in C classica strutturata a quella Orientata agli Oggetti.. tempo fà feci veramente fatica..... capire le associazioni tra classi le interfacce e i tutti i Java Design Patterns.. ...molto faticoso.. comunque mi fa piacere intraprendere l'assembler per PIC e mi fa piacere di poter scambiare opinioni ..GRAZIE per la tua disponibilità a dopo fausto Citazione:
| |
![]() | ![]() |
![]() | #12 (permalink) Top | |
User Data registr.: 28-02-2006
Messaggi: 1.059
|
rimanendo in tema ho trovato qualcosa che non mi spiego.. nel tanzilli c'è un capitolo che riguarda la porta seriale trovo strane le seguenti istruzioni: #DEFINE PULS PORTA,0 ;Pulsante (a riposo=1) ;----------------------------------------------------- ORG 0 MOVLW 7 MOVWF CMCON ;PORTA=I/O digitali MAINLOOP BTFSC PULS ;Attende pressione pulsante la BTFSC PORTA, 0 come fa a funzionare se non c'è a monte un istruzione di somma o differenza.. ..a monte vi è una istruzione MOVWF che però non cambia i valori dei bit C o Z.. riesci a spiegarlo ..perchè io questo non lo capisco!! a dopo fausto Citazione:
| |
![]() | ![]() |
![]() | #13 (permalink) Top |
User |
Usando i PIC e simili micro con poche risorse e privi di fpu è bene effettuare tutti i calcoli usando interi e non floating point. Per le divisioni poi è molte volte conveniente utilizzare una combinazione di shift right + sottrazione, in tal modo si risparmia tempo di elaborazione e spazio di memoria. Comunque sviluppare applicazioni complesse magari in multi-tasking o deterministiche in assembler è decisamente time-consuming. ![]()
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) ![]() |
![]() | ![]() |
![]() | #14 (permalink) Top |
Guest
Messaggi: n/a
|
L'istruzione BTFSC PORTA,0 ha questo significato: testa il bit del registro "f" cioè PORTA e salta la prossima istruzione se questo bit vale 0. Fino a quì sembra chiaro,lo "0" che segue la virgola stà ad indicare il primo bit (meno significativo) quindi,essendo la PORTA una delle due porte "esterne" (cioè per precisione il registro PORTA prende il valore della porta A se questa è configurata come ingresso) del 16F84 e se guardi sulla descrizione dei "piedini" equivale a RA0. riassumendo se su questo piedino si presenta un valore 0V viene ignorata l'istruzione successiva. Il tuo discorso sui Flag sarebbe corretto se al posto di prendere PORTA come parametro "f" fosse stato preso STATUS che è il registro che contiene i flag z,c ecc... Nota che le istruzioni di salto usano 2 cicli per essere eseguite, per l'architettura del Pic queste istruzioni,non sapendo quale è l'indirizzo della seguente fino a che non viene svolta praticamente usa 2uS a 4 Mhz per essere eseguita. (curiosità che mi sembra il sito di tanzilli non prenda in considerazione (ho detto mi sembra)) In risposta a ElNonino : Certamente hai ragione e sai quello che dici, io personalmente non uso numeri a virgola mobile ne con segno in assembler (se non convertendogli in numero intero) comunque quello che dici è perchè conosci anche l'assembler. Il giorno d'oggi tutti vengono indirizzati verso linguaggi ad alto livello senza farsi le ossa con l'asm e questo lo trovo sbagliato perchè, ad alto livello si tende a trascurare l'architettura delle macchine che si usano. Sicuramente a livello didattico è importante capire tali micro e poi si possono sfruttare meglio conoscendo l'architettura. Potrei dirti che anche i programmatori ad alto livello in gamba sanno usare l'asm perchè per risolvere alcuni problemi in real time non c'è altra soluzione. Se tutto quello che si vuole è il risultato senza approfondire sarebbe convegnente usare esempio un 16F870 a 20 Mhz in Basic strutturato tipo Microbasic e nonostante la non ottimizzazione del codice si raggiungerebbero risultati in poco tempo poi vista la maggior memoria e velocità... non sò se mi spiego... Certamente il C è più vicino all'assembler del Basic e specialmente se usato senza comandi speciali cioè solo Ansi C... Penso anche io sia la migliore soluzione ma sul 16F84 trovo l'asm con il quale 1000 istruzioni di capacità permettono di arrivare molto lontano,esempio il Basic consente di andare ben poco lontano. Concordi? |
![]() |
![]() | #15 (permalink) Top |
Guest
Messaggi: n/a
|
Ciao, dopo le nostre discussioni questa notte mi sono letto il corso di Tanzilli... (sinceramente a parte una visione molto superficiale non lo avevo mai letto...) Effettivamente non c'è un esempio di divisione...chissà dove lo avevo visto...?!?!?!? Poi ho cercato di approfondire la programmazione con MPLAB (ultima versione) ed ho fatto quello che,sono convinto,pochi di noi (primo io) fanno cioè leggere il manuale!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (Help on line). Ovviamente mi sono accorto che oltre alle 35 istruzioni (uniche in qualsiasi caso alla fine entranti nel Micro) ed alcune direttive usate sempre ci sono un totale di 64 (se non ricordo male) direttive per l'assembler. Con queste (ho dato una letta sommaria) si può lavorare veramente "ad alto livello" e mi correggo anche sull'uso delle variabili che effettivamente usando le direttive si possono usare anche a livello non globale... Ovviamente la sintassi resta quella dell'Assembler ma le direttive rendono la programmazione del micro + simile a quello che si fà con il C. Ora resta il grosso dilemma...approfondisco l'Assembler (MPLAB rivolto ai Pic) o mi imparo per bene il C ??? Si,perchè il C poi posso sfruttarlo anche sugli altri micro (portabilità del codice) mentre l'Assembler del Pic è del Pic (comunque importante da sapere) Specifico che per utilizzare il Basic non ce ne frega niente della struttura interna del micro mentre il C usato come Ansi richiede la conoscenza della "macchina" su cui lavoriamo essendo che i vari registri speciali e non gli configuriamo manualmente. Mà...farò qualche prova cioè programmi usando anche le direttive in Mplab ed usando il C per poi compilargli in assembler puro ed andare a vedere le differenze come codice! Penso comunque che il linguaggio vada scelto in base alle proprie esigenze,cosa si fà con il micro e perchè nò preferenze personali. Dubito che si possa dire (è meglio questo o è meglio quello) dipende da cosa si vuole fare ed ottenere. Certo è che un buon programma buttato giù in assembler non ha nulla da invidiare a software scritti in C se non il tempo di "scrittura" (((vedete che mi stò mordendo la coda???))) Curiosità: ho confrontato il Pr di tanzilli per scrivere sull'LCD con il mio (scritto ancora anni fà) e posso dire che anche se ovviamente molto diversi come stesura + o - le istruzioni sono quelle ma VINCO IO!!! perchè poi 1 lettera in + da stampare per Tanzilli sono 2 istruzioni mentre io ne uso una!!! Un'altra cosa,il mio è ottimizzato per "ricevere" numeri in ASCII da visualizzare anzi dirò di +,oltre a questo modulo ho inserito un altro modulo per la conversione di numeri in binario da 16 bit con il quale faccio la conversione in caratteri decimanli ASCII poi verso l'LCD... Conclusioni? Consiglio in assembler di procedere a moduli (così gli chiamo) inserendogli poi nel Pr come sottoroutine perchè lavorare a moduli indipendenti permette di riutilizzargli in altri programmi e comunque di lavorare su piccole parti di programma quindi facilmente e testarle separatemente. Ciao! |
![]() |
![]() | #16 (permalink) Top |
User |
Diciamo che quelli che tu chiami moduli in realtà in assembler si chiamano macro. Infatti quello da microchip è un macro assembler, inoltre se guardi l'Application Maestro vedrai che il tuo concetto è usato e spiegato. Personalmente mi son creato una libreria di macro in assembler che utilizzo in caso di risorse ridotte all'osso e necessità di velocità d'esecuzione particolari. In genere preferisco il C ANSI poichè dovendo spesso utilizzare altri tipi di processori il codice risulta essere più portatile. Poichè per quanto riguarda l'interfaccia utente dei micro collegati ad un PC utilizzo da moltissimi anni DELPHI, mi piacerebbe trovare un compilatore Pascal anche per i micro; quelli attuali sono pieni di bug e generano codice non molto ben ottimizato. ![]()
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) ![]() |
![]() | ![]() |
![]() | #17 (permalink) Top | ||
User Data registr.: 02-04-2005
Messaggi: 2.050
| Citazione:
Citazione:
![]() | ||
![]() | ![]() |
![]() | #18 (permalink) Top |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
|
Visto che siamo in argomento 'operazioni matematiche' sul sito Microchip ci sono queste application notes con routine già fatte (e bene!) per le operazioni matematiche sia in virgola fissa che mobile: c'è sempre qualcosa da imparare... AN526 PIC16C5x/PIC16Cxx Utility Math Routines AN544 Math Utility Routines AN575 IEEE 754 Compliant Floating Point Routines AN617 Fixed Point Routines AN660 Floating Point Routines AN670 Floating Point to ASCII Conversion TB040 Fast Integer Square Root Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. |
![]() | ![]() |
![]() | #19 (permalink) Top |
Guest
Messaggi: n/a
|
ElNonino : In genere preferisco il C ANSI poichè dovendo spesso utilizzare altri tipi di processori il codice risulta essere più portatile. Sotto questo punto di vista concordo pienamente! Claudio_F : Magari era il mio: http://stor.altervista.org/pic/div/div.htm Sì! era proprio il tuo! Lo avevo notato nel periodo che ho implementato le varie operazioni a 16 Bit com MCU a 8 Bit in Assembler. Intanto ti faccio i complimenti perchè quei pezzetini di codice sono proprio scritti bene,cioè chiunque riesce ad utilizzargli su di un proprio programma viste la caratteristiche di chiarezza!!! Il mio codice per effettuare le stesse operazioni funziona nel modo tutto similare, sono andato a rivedermelo e ricordo pure come ho fatto ad arrivarci : Quando ho pensato di implementare le operazioni ho fatto una ricerca su come si eseguivano in binario,su di un sito ho trovato la spiegazione e c'èra indicato un modo per svolgerle a mano su carta... Praticamente è lo stesso sistema implementato a codice "shift register" e permette,come dici,con un numero di cicli limitato di arrivare al risultato... MSchiepp : visto che siamo in argomento 'operazioni matematiche' sul sito Microchip ci sono queste application notes con routine già fatte (e bene!) per le operazioni matematiche sia in virgola fissa che mobile: c'è sempre qualcosa da imparare... Sono andato a vedermele,buona segnalazione,ad occorrenza vedrò di sfruttarle anche se a quel punto (es. virgola mobile) si prevede di utilizzarle per software un pò + raffinati quindi in linea di massima su Micro con + di 2K memoria... A quel punto risulta sicuramente convegnente lavorare in C e non in Assembler, a mio avviso quando la complessità ed il codice cresce oltre i 2-3K è l'ora di utilizzare un altro linguaggio almeno per la propria salute mentale nonostante sia convinto (oggettivamente è così) che l'unico linguaggio che prevede il controllo completo, sui tempi e sulla singola allocazione di memoria nonchè ottimizzazione spintissima dle codice sia l'Assembler. Ciao! |
![]() |
![]() | #20 (permalink) Top | |
User Data registr.: 28-02-2006
Messaggi: 1.059
|
grazie a tutti ...grazie a jijuja.. ho appena letto.. purtroppo in modo superficiale.. ..aimè per mancanza di tempo ...in questi ultimi due giorni ho avuto molto da fare e non ho potuto leggere le vostre risposte, molto precise e chiare.. ..non appena finirò di leggere le risposte con calma mi rimetterò a leggere il manuale di assembler. ...però da quello che ho appreso è che non avevo contemplato l'idea di eseguire la divisione in binario.. Il discorso della divisione era un pretesto per fare un esercizio.. per non avevo contemplato l'idea di lavorare direttamente in binario.. ..comunque lo affronterò, appena ne avrò il tempo, e poi voglio provare con numeri a 16 bit.. in modo che maturo anche questa esperienza.. come per esempio sono curioso di implementare gli array.. .....la finalità però deve essere riuscire a leggere i segnali che vanno ai servi ed eventualmente pilotare i servi.... ho già letto qualcosa ho trovato delle istruzioni strane!! tipo GOTO $+1 .....però devo ammettere che non ho letto con attenzione e non ho fatto nessuna prova.. ..per cui meglio riprendere il discorso dopo aver fatto una lettura più consona.. .. grazie ancora e a dopo fausto Citazione:
| |
![]() | ![]() |
![]() |
Bookmarks |
| |