Il manuale di Arduino: Guida completa by Paolo Aliverti

Il manuale di Arduino: Guida completa by Paolo Aliverti

autore:Paolo Aliverti [Aliverti, Paolo]
La lingua: ita
Format: mobi, epub
Tags: Technology & Engineering, Elettrotecnica, Tecnologia, Elettronica, Ingegneria, Electronics, Telecommunications
ISBN: 9788868953416
editore: LSWR
pubblicato: 2016-05-18T22:00:00+00:00


Assembler

L’assembler è un linguaggio a bassissimo livello: quando lo usate, state parlando quasi la stessa lingua del calcolatore. In assembler agite direttamente con le parti del chip e potete, per esempio, copiare dati da un registro all’altro o svolgere operazioni di base. L’assembler si può convertire facilmente in codice macchina con una semplice tabella di conversione. Il C e i linguaggi ad alto livello facilitano molto la vita, anche se poi devono essere convertiti in sequenze di codice macchina di cui spesso non sappiamo nulla. Generalmente, non si sa come una variabile o un ciclo for siano convertiti in codice macchina.

Non è mia intenzione inserire qui un corso di assembler, ma vi mostrerò comunque come usarlo direttamente all’interno dell’IDE di Arduino e vi illustrerò qualche impiego pratico.

Innanzitutto, l’assembler può essere codificato direttamente nello sketch usando una funzione speciale:

__asm__("istruzioni in assembler");

È possibile utilizzare anche una forma più elegante, senza i segni di sottolineatura: asm volatile ( " asm " );

Ogni istruzione deve stare su una singola riga e per “andare a capo” si devono inserire i due caratteri

.

Utilizzando un’istruzione assembler, potete resettare la scheda con un effetto simile alla pressione del tasto RESET.

asm volatile (" jmp 0 ");

La funzione fa sì che il puntatore al programma riparta da 0, che equivale a fare un reset senza però spegnere “elettricamente” la scheda. L’assembler è molto più difficile da scrivere del C e richiede una profonda conoscenza del microcontrollore. Il vantaggio è che un programma scritto in questo modo è molto più veloce.

La pausa più breve ottenibile con Arduino è di 2 microsecondi, perché è invocata richiamando una funzione delayMicroseconds(), la cui chiamata richiede alcuni cicli di elaborazione. Potete inserire delle micropause usando l’istruzione assembler nop, cioè “nessuna operazione”. Il microcontrollore sarà comunque impegnato “a far nulla” per un ciclo. Il minimo ritardo sarà pari a 62,5 nanosecondi. Invocatelo in questo modo:

asm volatile ("nop
");

Per realizzare pause maggiori, aggiungete più nop, uno di seguito all’altro. Si possono trovare ulteriori informazioni all’indirizzo http://bit.ly/arduino_asm (in inglese).

Un’operazione che potrebbe esservi molto utile è la possibilità di agire contemporaneamente su più pin. Per farlo, dovrete scrivere dei bit direttamente nei registri. Un registro è una

“rastrelliera” che contiene 8 bit, modificando un singolo bit potete cambiare il comportamento o lo stato del pin associato. In questi casi, non è necessario utilizzare l’assember perché nell’ambiente di Arduino sono state definite delle variabili che vi danno l’accesso diretto ai registri. Esistono tre tipi di registri:

• DDR – è il registro per configurare i pin come ingressi o uscite;

• PORT – è il registro per impostare lo stato dei pin quando sono usati come uscite, oppure per leggerlo quando si comportano da ingressi;

• PIN – è il registro da usare per la lettura dei pin.

Ogni microcontrollore ha più gruppi di registri. Per esempio su Arduino Uno sono usati tre gruppi di registri:

• DDRB, PORTB e PINB – per i pin digitali da 8 a 13;

• DDRC, PORTC e PINC – per i pin analogici da A0 a A5;

• DDRD, PORTD e PIND – per i pin digitali da 0 a 7.



scaricare



Disconoscimento:
Questo sito non memorizza alcun file sul suo server. Abbiamo solo indice e link                                                  contenuto fornito da altri siti. Contatta i fornitori di contenuti per rimuovere eventuali contenuti di copyright e inviaci un'email. Cancelleremo immediatamente i collegamenti o il contenuto pertinenti.