
![]() | #1 (permalink) Top |
User 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 |
![]() | ![]() |
![]() | #2 (permalink) Top |
User |
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) ![]() |
![]() | ![]() |
![]() | #3 (permalink) Top | |
User 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:
| |
![]() | ![]() |
![]() | #4 (permalink) Top | |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
| Citazione:
Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. | |
![]() | ![]() |
![]() | #5 (permalink) Top | |
Guest
Messaggi: n/a
| Citazione:
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! | |
![]() |
![]() | #6 (permalink) Top | |
User 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:
| |
![]() | ![]() |
![]() | #7 (permalink) Top | |
User 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:
| |
![]() | ![]() |
![]() | #8 (permalink) Top |
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 |
![]() |
![]() | #9 (permalink) Top | |
User 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:
| |
![]() | ![]() |
![]() | #10 (permalink) Top |
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... |
![]() |
![]() |
Bookmarks |
| |