AngoLinux

Lampeggio del LED giallo

- A cura del Prof. Stefano Salvi -


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