Microcomputer: interfacciamento parallelo e gestione delle interruzioni

Giuliano Donzellini, Domenico Ponta

Contatore di oggetti per una catena di montaggio, con gestione delle interruzioni

120072

 

v1.71

Un sistema a microprocessore controlla il flusso di oggetti all'uscita di una catena di montaggio industriale. La catena possiede quattro separati percorsi di uscita. Ogni 200 mS comunica alla sala di controllo, inviando un rapporto a riguardo del numero di oggetti prodotti nell'ultimo intervallo di 200 mS, per ciascun percorso di uscita. Scrivere e testare il programma di controllo di tutto il sistema, secondo le seguenti specifiche.

Un timer, collegato al processore DMC8, invia una richiesta di interrupt !INT ogni 0,5 mS: il segnale di conferma di esecuzione dell'interrupt !INTA, da parte del processore, cancella automaticamente la richiesta di interruzione quando inizia la sequenza di interrupt.

Il porto di ingresso parallelo SENSORS (indirizzo 00h, vedi figura) legge le uscite di quattro sensori ottici (A, B, C e D), ciascuno posto sui percorsi di uscita. I sensori generano '0' in stato di riposo, e '1' quando un oggetto passa davanti al suo campo visivo.

I porti di uscita paralleli COUNT (indirizzo 03h) e CODE (indirizzo 02h) consentono la comunicazione con la sala di controllo. Il porto COUNT invia il numero di oggetti (linee N7..N0) transitati da un determinato percorso di uscita. Il porto CODE specifica il codice binario del percorso di uscita (‘00’ = A, ‘01’ = B, ‘10’ = C, ‘11’ = D) al quale il conteggio si riferisce (linee C1, C0), e pilota la linea Strobe (C7).

Specifiche del firmware

Il microprocessore, nel programma principale, controlla continuamente il porto SENSORS. Confronta il loro stato attuale con il precedente, rilevando il passaggio da '0' a '1' delle uscite dei sensori e incrementando, per ciascun percorso di uscita, il corrispondente conteggio degli oggetti. Supponiamo che, durante l'intervallo di 200 mS, passino attraverso un singolo percorso molto meno di 255 oggetti.

La routine di gestione degli interrupt, eseguita ad ogni "timer tick", conta il numero di volte che è chiamata (in modo da valutare il tempo trascorso, a passi di 0,5 mS). Quando i 200 mS di intervallo sono trascorsi, il conteggio del tempo viene riazzerato e la variabile SEND è attivata. SEND segnala al programma principale di inviare le informazioni di conteggio alla sala di controllo, per ogni percorso di uscita.

Il programma principale, oltre a controllare i sensori, verifica anche la variabile SEND. Se questa è attivata, il programma principale prosegue trasmettendo le informazioni alla sala di controllo, secondo le seguenti regole:

  • Il numero di oggetti passati sul percorso A è copiato sul porto COUNT;
  • Il codice del percorso A è copiato sul porto CODE;
  • La linea di Strobe è attivata impulsivamente per circa 50 mS, e poi riazzerata;
  • Dopo una pausa di circa 50 mS, questa sequenza viene ripetuta per gli altri tre percorsi (B, C e D).

Si noti che la sala di controllo terrà conto della transizione negativa della linea Strobe per leggere le informazioni CODE e COUNT. Dopo che il programma principale avrà completato l'invio dei dati, la variabile SEND è ri-azzerata.

Proponiamo qui tre modelli di soluzione, in codice assembly DMC8, in ordine decrescente di difficoltà:

  1. In questo modello, più impegnativo, solo la struttura generale del codice è presente e dovrà essere scritto quasi tutto;
  2. Il secondo modello contiene una soluzione per il ciclo principale, tranne che per il sottoprogramma di uscita;
  3. Il terzo file contiene una soluzione quasi completa, tranne che per la routine di gestione delle interruzioni.

Chi volesse eseguire solo un'analisi di codice già scritto, e simularne il comportamento, trova qui disponibile una soluzione completa.

Una volta terminato di scrivere e testare il programma nel d-McE, occorre caricarlo nella ROM del microcomputer e simulare l'intero circuito. Un click sulla figura seguente aprirà lo schema nel d-DcS. Notare che, per testare il ricevitore, la sequenza di ingresso "TestSequence" è disponibile nella finestra del diagramma temporale.