Assembler per PIC - BaroneRosso.it - Forum Modellismo

Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 11 dicembre 07, 17:49   #1 (permalink)  Top
User
 
L'avatar di faustog
 
Data registr.: 28-02-2006
Messaggi: 1.059
Assembler per PIC

non so chi di voi si occupa di programmazione dei PIC..
premetto che io sono un programmatore : JAVA, C, C++, PHP, Visual Basic ecc
insomma solo linguaggi ad alto livello... .l'assembler dell' 8088 studiato solo teoricamente all'Università
..con i PIC sto iniziando da poco ..però non ho il programmatore.. vorrei acquistarlo più in là quando avrò acquisito una certa dimestichezza..
la mattina mi alzo alle 6:00 e prima di andare a lavoro mi faccio un oretta.. stamani mi sono assegnato l'esercizio di realizzare la divisione.. ..vorrei sapere da qualche anima buona se per il 16F84 è giusta la seguente routine,
ovvero se c'è qualcuno che la provi per me che non ho appunto il programmatore!

a dopo
faustog:

;-----------------------------------------------------
; Divisione = numero di volte che il DIVIDENDO puo essere
; sottratto dal DIVISORE. per esempio 8:3
; by FaustoG
;-----------------------------------------------------
PROCESSOR 16F84
RADIX DEC
INCLUDE "P16F84.INC"

ORG 0

EQU RISULTATO 18
EQU DIVISORE 20
EQU DIVIDENDO 22

CLRF RISULTATO
MOVLW 8
MOVWF DIVIDENDO ;carica 8 nel registro DIVIDENDO
MOVLW 3 ;carica il DIVISORE nell accumulatore
AA SUBWF DIVIDENDO, F ; sottrae al DIVIDENDO il DIVISORE
BTFSC STATUS, C ;se C=0 allora salta alla FINE perche
GOTO INCR ;il DIVIDENDO ha raggiunto lo zero oppure
GOTO FINE ;e negativo
INCR INCF RISULTATO
GOTO AA
FINE BSF STATUS, PR0
CLRF TRISB
BCF STATUS,RP0
MOVF RISULTATO, W
MOVWF PORTB
SLEEP

Invece il resto rimane nel registro DIVIDENDO.

a dopo
fausto
faustog non è collegato   Rispondi citando
Vecchio 11 dicembre 07, 18:23   #2 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Guarda che se usi l'ambiente di sviluppo MPLAB della Microchip con il relativo assembler, puoi testare il tuo programma anche senza possedere il programmatore.

Personalmente, poichè utilizzo i PIC professionalmente e per applicazioni piuttosto complesse, programmo in C ed utilizzo l'assembler solo per alcune routine molto critiche come temporizzazione. Esistono anche molte librerie ben testate anche per l'assembler.

Buoni esperimenti.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 11 dicembre 07, 21:57   #3 (permalink)  Top
User
 
L'avatar di faustog
 
Data registr.: 28-02-2006
Messaggi: 1.059
grazie..

grazie non lo sapevo. ...appunto da vero neofita non so le cose più banali.. .il
MPLAB è gratuito oppure serve la licenza?
bene penso che comunque mi piacerebbe affrontare la programmazione in assembler ...visto che i PIC hanno un numero ridottissimo di risorse... e poi magari dopo che avrò cazzeggiato abbastanza in assembler passerò al C ..che sicuramente è più familiare..

..ti spiego il mio obbiettivo è quello di realizzare un insieme di librerie JAVA o meglio classi Java per palmari.. .i quali attraverso la USB pilotano i servi di un aereo..

http://www.pololu.com/products/pololu/0390/

Quindi l'utente finale potrebbe in futuro scaricare da Internet software per computer palmari .. .installare su l proprio aeromodello il palmare più il servocontroller e ...via.... ..altro che UAV!!

a dopo
fausto






Citazione:
Originalmente inviato da ElNonino
Guarda che se usi l'ambiente di sviluppo MPLAB della Microchip con il relativo assembler, puoi testare il tuo programma anche senza possedere il programmatore.

Personalmente, poichè utilizzo i PIC professionalmente e per applicazioni piuttosto complesse, programmo in C ed utilizzo l'assembler solo per alcune routine molto critiche come temporizzazione. Esistono anche molte librerie ben testate anche per l'assembler.

Buoni esperimenti.

faustog non è collegato   Rispondi citando
Vecchio 11 dicembre 07, 22:42   #4 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da faustog
MPLAB è gratuito oppure serve la licenza?
E' gratuito! Lo scarichi dal sito Microchip e hai sia la funzione simulatore che ti permette di vedere passo passo o a blocchi il funzionamento del programma, con la trace dei registri/variabili che ti interessano e con la funzione 'logic analyzer' vedi anche lo stato dei pin del micro proprio come se stessi usando un analizzatore logico!

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 11 dicembre 07, 23:12   #5 (permalink)  Top
jijuja
Guest
 
Messaggi: n/a
Citazione:
Originalmente inviato da faustog
grazie non lo sapevo. ...appunto da vero neofita non so le cose più banali.. .il
MPLAB è gratuito oppure serve la licenza?
bene penso che comunque mi piacerebbe affrontare la programmazione in assembler ...visto che i PIC hanno un numero ridottissimo di risorse... e poi magari dopo che avrò cazzeggiato abbastanza in assembler passerò al C ..che sicuramente è più familiare..

..ti spiego il mio obbiettivo è quello di realizzare un insieme di librerie JAVA o meglio classi Java per palmari.. .i quali attraverso la USB pilotano i servi di un aereo..

http://www.pololu.com/products/pololu/0390/

Quindi l'utente finale potrebbe in futuro scaricare da Internet software per computer palmari .. .installare su l proprio aeromodello il palmare più il servocontroller e ...via.... ..altro che UAV!!

a dopo
fausto
Ciao,a parte le tue idee sull'UAV che risultano a questo punto chiare
ti posso dire che esistono già molti software per palmari
che "pilotano" dei servo,in Germania ho visto molte volte
modellisti che mettevano a punto il proprio modello al campo
utilizzando il palmare,adirittura ti posso dire che ci sono delle riceventi
in commercio che si interfacciano con il palmare via Usb ed anche wireless.
Passando al sodo ti confermo che Mplab è gratuito,si scarica dal sito
della Microchip ed è integrato (ultime versioni) con Picc Lite della Hitech
cioè ti permette di utilizzare tale software (già compreso) per programmare
nello stesso ambiente di sviluppo in Ansi C i Pic, tale è Free fino a 2K linee
di codice (tradotte in assembler) quindi è praticamente senza limitazioni con il
16F84.
Io,su tali piccoli micro uso di default l'assembler proprio per
l'ottimizzazione che riesci a raggiungere (usandolo correttamente)
e lavori in modo trasparente quando la gestione dei tempi,
come detto sopra,è critica.
Per quanto riguarda la divisione il codice,mi dispiace dirtelo,è
assolutamente inuttilizzabile messo giù così,sembra più "C" che assembler.
Ti consiglio di andarti a vedere "Pic By Exemple" corso veramente
fatto bene per capire l'assembler.
Lì trovi anche degli esempi di codice per divisione a 8 bit e 16 bit con
Micro a 8 bit quali sono i Pic serie 16.
Il C,che stò prendendo in considerazione in questo periodo,
non perchè ne senta l'esigenza ma perchè dicono tutti essere "migliore"
quindi a mio avviso và provato ti permette di sviluppare molto + velocemente
i software senza complicazioni ma a livello di codice
(provato) non ti permette di ottenere la stessa compattezza e velocità che ti permette l'assembler.
Ho provato ad utilizzare gli LCD con il C ed il Basic per confrontare
il software che avevo sviluppato a suo tempo in assembler...
praticamente il codice prodotto è 1/3 più grande in C e circa 3 volte in Basic...
certo che in C o in Basic ci vogliono 20 minuti (senza utilizzare
i comandi pre-compilati) ed in Assembler all'epoca ci sono voluti giorni di lavoro...

Ciao!
  Rispondi citando
Vecchio 12 dicembre 07, 18:38   #6 (permalink)  Top
User
 
L'avatar di faustog
 
Data registr.: 28-02-2006
Messaggi: 1.059
ok

grazie a tutti..
x jijuja.. ... si in effetti il discorso dei palmari è azzeccato.. ..però vorrei sapere se esiste già un driver per JAVA tale che attraverso l'import del pakage pre-posto posso utilizzaree delle classi che comunicano con il servo controller.. dal palmare ovviamente.. ..penso che ciò sarebbe fantastico.. .

Per il corso consigliato da te ..sto proprio seguendo quello da te suggerito..


a dopo
fausto

Citazione:
Originalmente inviato da jijuja
Ciao,a parte le tue idee sull'UAV che risultano a questo punto chiare
ti posso dire che esistono già molti software per palmari
che "pilotano" dei servo,in Germania ho visto molte volte
modellisti che mettevano a punto il proprio modello al campo
utilizzando il palmare,adirittura ti posso dire che ci sono delle riceventi
in commercio che si interfacciano con il palmare via Usb ed anche wireless.
Passando al sodo ti confermo che Mplab è gratuito,si scarica dal sito
della Microchip ed è integrato (ultime versioni) con Picc Lite della Hitech
cioè ti permette di utilizzare tale software (già compreso) per programmare
nello stesso ambiente di sviluppo in Ansi C i Pic, tale è Free fino a 2K linee
di codice (tradotte in assembler) quindi è praticamente senza limitazioni con il
16F84.
Io,su tali piccoli micro uso di default l'assembler proprio per
l'ottimizzazione che riesci a raggiungere (usandolo correttamente)
e lavori in modo trasparente quando la gestione dei tempi,
come detto sopra,è critica.
Per quanto riguarda la divisione il codice,mi dispiace dirtelo,è
assolutamente inuttilizzabile messo giù così,sembra più "C" che assembler.
Ti consiglio di andarti a vedere "Pic By Exemple" corso veramente
fatto bene per capire l'assembler.
Lì trovi anche degli esempi di codice per divisione a 8 bit e 16 bit con
Micro a 8 bit quali sono i Pic serie 16.
Il C,che stò prendendo in considerazione in questo periodo,
non perchè ne senta l'esigenza ma perchè dicono tutti essere "migliore"
quindi a mio avviso và provato ti permette di sviluppare molto + velocemente
i software senza complicazioni ma a livello di codice
(provato) non ti permette di ottenere la stessa compattezza e velocità che ti permette l'assembler.
Ho provato ad utilizzare gli LCD con il C ed il Basic per confrontare
il software che avevo sviluppato a suo tempo in assembler...
praticamente il codice prodotto è 1/3 più grande in C e circa 3 volte in Basic...
certo che in C o in Basic ci vogliono 20 minuti (senza utilizzare
i comandi pre-compilati) ed in Assembler all'epoca ci sono voluti giorni di lavoro...

Ciao!
faustog non è collegato   Rispondi citando
Vecchio 12 dicembre 07, 18:46   #7 (permalink)  Top
User
 
L'avatar di faustog
 
Data registr.: 28-02-2006
Messaggi: 1.059
ops!

[...Per quanto riguarda la divisione il codice,mi dispiace dirtelo,è
assolutamente inuttilizzabile messo giù così,sembra più "C" che assembler.]

Si in effetti era un programma in C che faccio ai ragazzi diciamo che ho usato lo stesso diagramma di flusso solo che mi hanno consigliato di
cambiare il salto con questo che in effetti dovrebbe essere più ottimale perchè
la BTFSS salta se la C = 1 e siccome per la sottrazion la C vale = 1 fin quando il risultato è maggiore di zero quindi salta ed esegue l'incremento ..... fino a quando la sottrazione non produce un numero negativo a quel punto esegue il GOTO per chiudere


AA----SUBWF DIVIDENDO, F
------BTFSS STATUS, C
------GOTO FINE
------INCF RISULTATO,F
------GOTO AA
FINE-- BSF STATUS, PR0

==============================================






Citazione:
Originalmente inviato da faustog
grazie a tutti..
x jijuja.. ... si in effetti il discorso dei palmari è azzeccato.. ..però vorrei sapere se esiste già un driver per JAVA tale che attraverso l'import del pakage pre-posto posso utilizzaree delle classi che comunicano con il servo controller.. dal palmare ovviamente.. ..penso che ciò sarebbe fantastico.. .

Per il corso consigliato da te ..sto proprio seguendo quello da te suggerito..


a dopo
fausto
faustog non è collegato   Rispondi citando
Vecchio 13 dicembre 07, 00:15   #8 (permalink)  Top
jijuja
Guest
 
Messaggi: n/a
Ciao,
Premessa :
Io,ogni volta che creo una parte di codice per "dividere" mi viene diverso...non lo sò perchè ma ti posso dire che ci sono molti modi per farlo
ed in base a dove và utilizzata la ottimizzo.
Certo è che molto deriva dal fatto che in assembler si utilizzano solo variabili globali,problema che con il C non C'è!
Pensa che adirittura io non uso quasi mai la direttiva "Include" ma definisco programma per programma i registri,definizioni e variabili che mi servono
sempre in base a cosa devo fare.
potrei indicarti come procederei io per creare una divisione in assembler come credo la abbia pensata tù :
serve un registro uso contatore (risultato),c'è un dividendo,un divisore ed un eventuale resto...approposito,di solito uso un bit di un registro
anche per definire condizioni di errore tipo divisione per 0 (che non è possibile)
L'ambiente che definisco è 8 bit,numero intero senza virgola e segno. Volendo prevedere ciò o divisioni 16-32 o esagerando 64 bit le cose si complicano non poco.
Allora,prendo il valore da dividere e lo carico in un registro,il valore per il quale dividere e lo carico in un altro registro,
controllo se è 0 ed in caso esco con errore altrimenti eseguo la sottrazione...verifico con il flag appropriato se sono passato per lo 0,in questo caso
la divisione ha solo resto altrimenti carico il risultato nel registro del valore da dividere,incremento il contatore e rieseguo la sottrazione con questo nuovo valore,
ripeto il controllo,eventualmente esco con risultato altrimenti incremento il contatore,ricarico ecc....
Con questo volevo solo renderti l'idea di come procederei!
Pensa (lo sai) che con il C o con il Basic....pensi divido e dividi!!!!
Per questo molti non prendono in considerazione l'assembler...

Ciao!

Ps. se trovassi il tempo ti scriverei un pò di codice ma sono incasinatissimo,in caso chiedi che ti dò le indicazioni che posso!
Approposito,per quanto riguarda il discorso dei palmari,se ricordo bene
una delle ditte che produce le riceventi con ingresso USB per
interfacciarsi con tali è la ACT (.de)
e visto il trattamento ricevuto in alcune occasioni da loro penso che se chiedi
ti darebbero sicuramente i parametri per scambiare i dati con esse,da lì puoi realizzare il Software che ti serve.

Ultima modifica di jijuja : 13 dicembre 07 alle ore 00:20
  Rispondi citando
Vecchio 13 dicembre 07, 15:48   #9 (permalink)  Top
User
 
L'avatar di faustog
 
Data registr.: 28-02-2006
Messaggi: 1.059
grazie..

grazie jijuja..

no preoccuaprti.. ..qui nel forum ci basta scambiare due chiacchiere.. ..la divisione la faccio fare ai ragazzi di terza in C dicendo loro che possono usare solo incrementi e decrementi e controllare se una variabile sia maggiore di zero oppure no con i cicli while o for.. ..

l'idea di base è che dividendo - divisore ..per n volte fin quando > 0
ogni ciclo si incrementa RISULTATO

per esempio se devo fare 10 : 3 devo pensare di fare:

------10 - 3 = 7 // 7 - 3 = 4 // 4 - 3 = 1 // 1 è < 3 quindi STOP
R=0 // 1 // 2 // 3 //

allora abbiamo 3 con il resto di uno . Ovvero la divisione è ottenuta dalla variabile che incremento ogni ciclo.. . il resto è il valore che rimane del dividendo

va be adesso scendo giu e mi faccio un voletto con l'easy glider ..prima che fa buio

a dopo
fausto




Citazione:
Originalmente inviato da jijuja
Ciao,
Premessa :
Io,ogni volta che creo una parte di codice per "dividere" mi viene diverso...non lo sò perchè ma ti posso dire che ci sono molti modi per farlo
ed in base a dove và utilizzata la ottimizzo.
Certo è che molto deriva dal fatto che in assembler si utilizzano solo variabili globali,problema che con il C non C'è!
Pensa che adirittura io non uso quasi mai la direttiva "Include" ma definisco programma per programma i registri,definizioni e variabili che mi servono
sempre in base a cosa devo fare.
potrei indicarti come procederei io per creare una divisione in assembler come credo la abbia pensata tù :
serve un registro uso contatore (risultato),c'è un dividendo,un divisore ed un eventuale resto...approposito,di solito uso un bit di un registro
anche per definire condizioni di errore tipo divisione per 0 (che non è possibile)
L'ambiente che definisco è 8 bit,numero intero senza virgola e segno. Volendo prevedere ciò o divisioni 16-32 o esagerando 64 bit le cose si complicano non poco.
Allora,prendo il valore da dividere e lo carico in un registro,il valore per il quale dividere e lo carico in un altro registro,
controllo se è 0 ed in caso esco con errore altrimenti eseguo la sottrazione...verifico con il flag appropriato se sono passato per lo 0,in questo caso
la divisione ha solo resto altrimenti carico il risultato nel registro del valore da dividere,incremento il contatore e rieseguo la sottrazione con questo nuovo valore,
ripeto il controllo,eventualmente esco con risultato altrimenti incremento il contatore,ricarico ecc....
Con questo volevo solo renderti l'idea di come procederei!
Pensa (lo sai) che con il C o con il Basic....pensi divido e dividi!!!!
Per questo molti non prendono in considerazione l'assembler...

Ciao!

Ps. se trovassi il tempo ti scriverei un pò di codice ma sono incasinatissimo,in caso chiedi che ti dò le indicazioni che posso!
Approposito,per quanto riguarda il discorso dei palmari,se ricordo bene
una delle ditte che produce le riceventi con ingresso USB per
interfacciarsi con tali è la ACT (.de)
e visto il trattamento ricevuto in alcune occasioni da loro penso che se chiedi
ti darebbero sicuramente i parametri per scambiare i dati con esse,da lì puoi realizzare il Software che ti serve.
faustog non è collegato   Rispondi citando
Vecchio 13 dicembre 07, 18:16   #10 (permalink)  Top
jijuja
Guest
 
Messaggi: n/a
Ok,comunque mi interessa continuare questa discussione,
se posso commentarti ti duco che tu pensi in C,
devi pensare in assembler per lavorare con l'assembler...
Il contrario di quello che faccio io!
Penso in assembler e vorrei lavorare in C BENE...
Sto cercando di cambiare il mio modo di pensare anzi espanderlo...
  Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato




Tutti gli orari sono GMT +2. Adesso sono le 12:53.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002