PIC16F84 - esercizi in assembly

Quattro led - quattro interruttori

Si realizzi con un PIC16F84 un circuito e la programmazione in assembly per leggere la posizione di 4 interruttori collegati ai pin da RB0 a RB3. Ogni interruttore accende e spegne uno dei 4 led collegati ai pin da RA0 a RA3 e all'alimentazione.

Programma in Assembly (realizzato con Ktechlab)

Programma per far lampeggiare un led

Si realizzi con un PIC16F84 la programmazione in assembly per fare accendere e spegnere un led.

Led intermettente gestito a interrupt con il Timer0

Si realizzi con un PIC16F84 la programmazione in assembly per fare accendere e spegnere un led con il Timer0.

Schema elettronico (realizzato con Ktechlab)

Diagramma di flusso (realizzato con Ktechlab)

Diagramma di flusso completo (realizzato con Ktechlab)

Programma in Assembly (realizzato con Ktechlab)

Controllo di una barra di 8 led

Si realizzi con un PIC16F84 un circuito e la programmazione in Assembly per accendere un led alla volta su una barra di 8 led collegata ai pin da RB0 a RB7. Il led acceso scorre lungo la barra. Quando arriva al termine si inizia da capo. Con il deviatore collegato a RA0 si determina se il led accesso scorre verso il basso o verso l'alto.

Schema elettronico (realizzato con Ktechlab

Diagramma di flusso (realizzato con Ktechlab)

Programma in assembly

Controllo di 1 led tramite 1 pulsante

Si realizzi con un PIC16F84 un circuito e la programmazione in C per leggere un pulsante e comandare un led. Il led si accende quando il pulsante viene premuto, si spegne quando rilasciato e di nuovo premuto, poi il programma si ripete.

Schema elettronico con Ktechlab

Diagramma di flusso

Schema elettronico (realizzato con KtechlabControllo di una pressa tramite 2 pulsanti

Schema elettronico (realizzato con Ktechlab)

Diagramma di flusso (realizzato con Ktechlab)

Programma in Assembly

Programma in Assembly

Il segmento che gira

Si realizzi con un PIC16F84 un circuito e la programmazione in assembly per accendere uno dopo l'altro i 6 led collegati ai pin da RA0 a RA4 e a RB7 di un display (l'anodo dei led è collegato all'alimentazione).


Programma in Assembly

Il segmento che gira avanti e indietro

Si realizzi con un PIC16F84 un circuito e la programmazione in assembly per accendere uno dopo l'altro i 6 led collegati ai pin da RA0 a RA4 e a RB7 di un display (l'anodo dei led è collegato all'alimentazione). Quando l'interruttore S1 cambia stato, l'ordine di accensione si inverte.

La barra che si illumina a comando

Si realizzi con un PIC16F84 un circuito e la programmazione in assembly per leggere i byte memorizzati nella Eeprom e utilizzarli per accendere 13 led di una barra collegati ad pin RB0-7 e ai pin RA0-4 (l'anodo dei led è collegato all'alimentazione).

Programma in Assembly

La barra che si illumina in base ai comandi scritti sulla Eeprom

Si realizzi con un PIC16F84 un circuito e la programmazione in assembly per scrivere e leggere i byte memorizzati nella Eeprom e utilizzarli per accendere 13 led di una barra collegati ad pin RB0-7 e ai pin RA0-4(l'anodo dei led è collegato all'alimentazione).

Schema elettronico

Il robot e la calamita

Un robot dispone di due sensori e di un braccio dotato di una calamita.

Un microcontrollore PIC16F84 controlla il robot tramite due sensori (collegati a RB0 e RB1) e un uscita (RA0) collegata all'attivazione del braccio.

Quando un altro robot si avvicina il PIC attende il momento giusto e poi fa scendere la calamita sull'altro robot.

Se un solo sensore è attivo, si attende 0,9 secondi e poi si cala la calamita (RA0=0),

se sono attivi entrambi i sensori si attiva subito la calamita.

Il processo inizia quando da un sensore arriva al PIC il livello logico 1.

Disegnare il diagramma di flusso.

Scrivere il relativo programma in assembly.

Il programma sarà composto dalle seguenti parti:

1) inizializzazione del PIC

2) sottoprogramma di ritardo

3) programma di gestione

Calcolare il tempo di ritardo in base al quarzo scelto.

Disegnare lo schema elettronico.

Durata della prova: 1 ora

Bozza programma in Assembly 

 

Sottoprogramma DELAY

Si ipotizza di montare un quarzo da 4 MHz.

Nel PIC ogni istruzione impiega 4 cicli di clock, ovvero 1 us.

Correggi i valori del conteggio del Delay (80h, FFh e FFh) con quelli giusti.

Il cancello automatico

Un cancello automatico dispone:

- di un sensore per sentire la presenza dell'auto davanti al cancello,

- di un sensore per ricevere il comando di apertura,

- di un motoriduttore per aprire il cancello

- di un paletto elettromeccanico per bloccare il cancello nelle posizioni chiuso e aperto

Un microcontrollore PIC16F84 controlla il cancello.

Quando un auto si avvicina e viene dato il comando di apertura, il PIC sblocca il paletto e

accende il motoriduttore che apre il cancello, attende per 7 secondi l'apertura,

blocca il paletto, attende che il sensore non rilevi più l'auto, sblocca il paletto,

chiude il cancello disattivando il motoriduttore, attende 7 secondi, attende una nuova auto.

Disegnare il diagramma di flusso.

Scrivere il relativo programma in Assemby.

Il programma sarà composto dalle seguenti parti:

1) inizializzazione del PIC

2) sottoprogramma di ritardo

3) programma di gestione del cancello e del paletto

Calcolare il tempo di ritardo in base al quarzo scelto.

Disegnare lo schema elettronico.

Durata della prova: 1 ora

Programma in Assembly

Sottoprogramma Delay

Si ipotizza di montare un quarzo da 4 MHz.

Ogni istruzione impiega 4 cicli di clock, ovvero 1 us.

Ipotizzando che DELAY impiega 2 istruzioni per ogni iterazione,

si calcola che occorrono 15 milioni di iterazioni per attendere 30 secondis.

Correggi i valori del conteggio del Delay (2Fh FFh e 0Fh) con quelli giusti.

Contapersone

Si vuole utilizzare un microcontrollore PIC16F84 per

realizzare un dispositivo che segnala il superamento della capienza massima di un cinema.

Il processo è il seguente:

● viene attivato il timer0 in modo che conteggi il tempo massimo possibile

● a interrupt ogni 500 ms il PIC fa lampeggiare (con duty cycle=50%) un led verde collegato a RB2

● un tornello segnala il passaggio di uno spettatore, il PIC attende RB0=1, poi attende RB0=0, poi incrementa una variabile che rappresenta il numero di persone entrate

● se si supera la capienza della sala (500 persone) il PIC fa lampeggiare a interrupt il led rosso collegato a RB3 (sempre ogni 500 ms con duty cycle 50%)

● si attende il pulsante di reset (RB1=1) per tornare all'inizio del programma

1) Disegnare il diagramma di flusso del programma.

2) Ipotizzando di avere un clock a 4 MHz, scrivere in linguaggio Assembly il programma dividendolo nelle seguenti parti: inizializzazione dei pin, inizializzazione dell'interrut, interrupt, main.

3) Disegnare e dimensionare lo schema elettronico (la fotocellula sarà disegnata come un interruttore, non si può utilizzare deviatori).