Salta la barra di navigazione [1] - Vai alla barra di navigazione [3] - Scrivimi una mail [4]

PIC18: macro

Assembly PIC18 - PIC18 in C - Sommario - Novità - Tutorial - Progetti - Risorse - Non solo elettronica

PIC18: macro

In fase di sviluppo Stesura preliminare In fase di sviluppo

Una macro è un pezzo di codice generato in fase di compilazione che permette di eseguire parti ripetitive in modo compatto e semplice da comprendere. A volte viene erroneamente confuso con il concetto di subroutines. Le differenze:

In questa pagina ho raccolto alcune macro che mi è capitato di usare in alcuni esempi.

Un semplice esempio

Questo primo esempio mostra come scrivere una macro che configura gli otto pin di PORTC come uscita. Ovviamente è sufficiente azzerare il corrispondente registro TRIS (e quindi in questo caso l'uso delle macro non rende più compatto il numero di righe da scrivere, solo più leggibile)

Innanzitutto occorre scrivere il codice sorgente della macro, compreso tra le parole chiave macro ed endm, assegnando un nome:

PORTC_OUT macro
          clrf TRISC
          endm

Per utilizzarla, occorre semplicemente scrivere all'interno del codice, come fosse una normale istruzione:

Programma CODE 0
  ...
  PORTC_OUT
  ...

Il codice eseguibile generato ignora la presenza della macro in corrispondenza della sua definizione e, quando utilizzata all'interno del programma, la sostituisce il codice corrispondente:

Macro disassemblata

Il seguente esempio mostra una macro per configurare PORTB come ingresso con pull-up. In questo caso il codice sorgente appare, oltre che più chiaro, anche più compatto.

PORTB_IN macro
  movlw 0xFF
  movwf TRISB
  movwf WPUB
  bcf INTCON2, 7
  endm

Programma CODE 0
  PORTB_IN
here
  bra here

Di seguito il codice eseguibile generato dall'assemblatore. Tra le righe 17 e 20, la cosiddetta espansione della macro.

Data di creazione di questa pagina: maggio 2017
Ultima modifica di questa pagina:10 luglio 2017


Assembly PIC18

Inoltre potrebbe essere utile la pagina: PIC18 - Suggerimenti, in ordine sparso

Licenza Creative Commons Attribuzione 4.0 Internazionale


EN - Pagina principale - Sommario - Accessibilità - Note legali e privacy policy - Posta elettronica

XHTML 1.0 Strict - CSS 3