|
Primo programma in Assembler 8051. Utilizza solo l'I/O incorporato nella scheda.
Per indicazioni sullo stile di codifica, consultare il capitolo sullo
stile di codifica.
Il testo dell'esercizio è il seguente:
Scrivere un programma Assembler per 8051 che faccia lampeggiare il LED giallo connesso al bit 2 della porta P1 alla frequenza di 8 ... 10 volte al secondo.
Una possibile soluzione è la seguente:
; lampeggio.htm
; Stefano Salvi - 15/8/02
;
; Fa' lampeggiare il LED giallo connesso a P1.2
;
.org 8050h ; Locazione di inizio e caricamento del programma
; programma principale (c'e' solo quello)
;
clr P1.2 ; Inizialmente accende il LED
;
lp1: ; Ciclo Programma
;
; Ritardo:
; Con il quarzo a 1059200 Hz, l'8051 esegue 921600 cicli al secondo
; Se voglio 5 lampeggi al secondo, devo avere un ritardo di 184320 cicli.
; Ipotizzando di avere un' 'operazione base' di 4 cicli, 240 ripetizioni di
; questa operazione porteranno ad impiegare 240*4 = 960 cicli totali.
; Se ora ripeteremo qesto ritardo base per 192 volte, otterremo 960*192=184320
; cicli int otale (non contando i 4 cicli aggiuntivi per ripetere il ritardo
; base, pari a 192*4=768)
mov R1,#192 ; 192 ripetizioni di un ritardo base
lp2: ; Ciclo Esterno
mov R0,#240 ; 200 ripetizioni di piccolo ritardo (2 nop)
lp3: ; Ciclo Interno
nop ; operazione nulla - circa un micorsecondo (uS)
nop ; operazione nulla - circa un micorsecondo (uS)
djnz R0,lp3 ; Ripete 'nop,nop' (ci mette circa altri 2 uS)
djnz R1,lp2 ; ripete il ritardo precedente (200 * 3 -> 600 uS)
;
cpl P1.2 ; Commuta il LED (spegne se acceso, accende se spento)
sjmp lp1 ; loop infinito
;
.end
|
Il sorgente del programma è lampeggio.asm ed il file
assemblato, pronto per l'esecuzione è lampeggio.obj.
Per provare il programma, lo si deve caricare in
PCMon, assemblare e far
funzionare. Può funzionare anche in emulazione, sebbene i tempi del lampeggio non siano
precisi.
[Home Page dell'ITIS "Fermi"]
[Indice Quarta]
[Precedente]
[Successivo]
© Ing. Stefano Salvi - Released under GPL licence
|