Bravo e grazie, finalmente il titolo è coerente
La direttiva ".org" serve per indicare l'origine del codice dal quel punto in poi, se è abilitato il segmento del codice, o l'origine dei successivi dati se è abilitato il segmento dati.
In pratica un codice in assembler per gi AVR parte così (io uso l'asemblatore "avra" per Linux):
- Codice: Seleziona tutto
.include "m8def.inc"
.cseg
.org 0x0000
rjmp RESET
reti ;External Interrupt0 Vector Address
reti ;External Interrupt1 Vector Address
reti ;Timer2 compare match Vector Address
reti ;Timer2 overflow Vector Address
....
RESET:
;Initialize Stack Pointer
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,high(RAMEND)
out SPH,temp
...
ldi ZH,high(2*LUT) ; Load high part of byte address into ZH
ldi ZL,low(2*LUT) ; Load low part of byte address into ZL
lpm ; Load byte from program memory into r0
...
QUIT:
rjmp QUIT
LUT:
.db "0123456789ABCDEF"
Viene abilitato il segmento di codice e posizionata l'origine alla locazione 0x0000, la prima locazione eseguita dopo il reset, in quella locazione è presente un lungo array con tutti i vettori usati dalla MCU, bisogna mettere quella del tuo esatto modello di MCU (nel mio caso un ATmega8, specificato nel include), cambiano in numero e in significato. Quanti e quali è descritto nel datasheet.
Sempre nel datasheet è spigato che la prima cosa da fare è inizializzare lo stack (SP). La locazione di memoria "RAMEND" è diversa per ogni MCU ed è specificata nell'include iniziale fornito dal assemblatore.
Per la "lpm" non sei obbligato a specificare la locazione nella flash, basta una label nel segmento di codice (come RESET o LUT nel codice precedente) e fare esattamente quello scritto nel datasheet, se moti esegue una moltiplicazione per 2 (shift a sinistra di un bit), il tuo libro (che non conosco) parte con l'indirizzo dimezzato imposto e poi ti dice di moltiplicarlo per 2, i preferisco sfruttare l'assemblatore per fare i calcoli come viene fatto nel datasheet.
Ti consiglio di partire con cose più semplici, l'uso della "lpm" non è argomento per principianti.
Oltre ai datasheet esistono anche gli application note:
http://www.atmel.com/Images/doc1233.pdfbuona lettura.