Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori ST626X. Quinta parte 3/4

ST626X Corso di programmazione per microcontrollori ST626X

I VETTORI DI INTERRUZIONE

Sappiamo già il significato di quest’ultimo termine che può essere brevemente riassunto come locazione programma gestita dalla CPU solo in caso di particolari richieste hardware. Nel nostro caso, l’unico vettore utilizzato è quello di Reset con indirizzo FFE hex in cui andiamo a scrivere l’istruzione: “JP RESET”. Così facendo, all’atto della prima accensione oppure dopo un reset, generato dal pin di ingresso “Reset”, la CPU andrà a leggere l’istruzione contenuta nella FFE hex e la eseguirà processando l’istruzione contraddistinta dalla “label” o etichetta RESET.

La prima istruzione presente nella locazione più bassa della memoria programma deve perciò essere preceduta dalla stessa etichetta; la corretta sintassi è: etichetta: - spazio - istruzione. Qui dobbiamo per prima cosa disabilitare tutte le interruzioni azzerando il contenuto del registro IOR (Interrupt Option Register) e “rinfrescare” il Watchdog scrivendo nel relativo registro (DWDR) un qualsiasi numero.

st626x_eeprom

Rammentiamo che il watchdog viene decrementato dal clock del micro diviso 12 e che quando tale registro raggiunge il valore 0 causa un reset del micro stesso. Dovremo perciò periodicamente, durante il programma, ricaricare il registro del watchdog onde evitare che si azzeri. Dopo queste due istruzioni troviamo quella denominata RETI (Return from Interrupt), utilizzata per indicare la fine di una routine di interrupt. Questa istruzione è indispensabile all’inizio del programma per indicare la fine dell’interruzione di Reset, in caso contrario, ovvero tralasciando il RETI iniziale, la CPU non sarà in grado di gestire eventuali altre interruzioni.

INIZIALIZZAZIONE DELLE LINEE DI I/O

A questo punto, occorre procedere all’inizializzazione delle risorse del chip che intendiamo utilizzare, partendo dalle linee di ingresso/uscita. Nella nostra applicazione, utilizziamo solo la porta di I/O indicata con la lettera B. A questa porta risultano collegati sia i due pulsanti, precisamente il “+” al PB5 e il “-” al PB6, sia i due led: l’LD1 al PB4 e l’LD2 al PB3. I pulsanti sono connessi tra le relative linee del chip (pin 7 e 8) e la massa, mentre i led sono collegati ai piedini 6 e 5 del micro ed al +5 volt attraverso una resistenza di limitazione. La porta B viene controllata dai tre relativi registri: direzione, opzione e dati a cui abbiamo assegnato rispettivamente le seguenti sigle: DDRPB, ORPB e DRPB; dovremo quindi agire su questi tre registri per configurare le linee nel modo desiderato.

Nel nostro caso, per poter gestire correttamente i pulsanti, le linee PB5 e PB6 devono essere inizializzate come ingressi con resistore di pull-up, mentre le linee PB3 e PB4, collegate ai led, vengono inizializzate come uscite open-drain. Per fare ciò utilizziamo l’istruzione “LDI” (Load immediate) seguendo la seguente sintassi: “LDI rr,n” dove rr rappresenta uno spazio di un byte nella memoria dati ed n indica un numero compreso tra 0 e 255 in rappresentazione decimale. Se il numero viene espresso in esadecimale occorre anche aggiungere alla cifra la lettera H (Hexadecimal) se, invece, viene scritto in binario, occorre aggiungere il suffisso B (Bynary). Attenendoci alla tabella di configurazione dei pin riportata nell’articolo, possiamo procedere all’inizializzazione della porta B come indicato nel listato.

mf55_diagramma_flusso_programma

Abbiamo così configurato alcune linee della porta B a funzionare come ingressi e altre, sempre della porta B, come uscite. Quando, come in questo caso, una porta viene suddivisa in ingressi e uscite, il relativo registro dati (DRPB) non può essere controllato con le istruzioni di SET (Set bit) e RES (Reset bit). Per rimediare a questo inconveniente occorre fare una copia in RAM del registro dati, denominata, nel nostro caso, CDRPB e con l’istruzione “LDI” assegnare a questa cella RAM lo stesso valore del registro dati B.

In un secondo tempo, utilizzeremo la cella CDRPB per modificare il contenuto del relativo registro dati DRPB. Ad esempio, supponiamo di voler accendere il led LD1 connesso al PB4. Per fare ciò, dobbiamo portare la linea PB4 al valore logico 0, in pratica dobbiamo resettare il bit 4 del DRPB. Poiché l’istruzione: RES 4,DRPB non è supportata dai micro ST6 e, se applicata, causa un malfunzionamento della porta B, occorre seguire questa semplice procedura: resettare il bit 4 della cella RAM contenente la copia del DRPB e, successivamente, trasferire il contenuto della cella nel registro.

La sintassi corretta è la seguente: RES 4,CDRPB - LD A,CDRPB - LD DRPB,A. Bene, ora nel listato troviamo le istruzioni di inizializzazione della memoria EEPROM. Caratteristica principale di questo tipo di memoria è la capacità di trattenere i dati anche senza tensione di alimentazione per ben 10 anni. Risulta perciò utilissima in moltissime applicazioni, in cui si desideri la ritenzione di dati senza la necessità di mantenere sempre alimentato, ad esempio con una batteria tampone, il micro. I nuovi microcontrollori ST626X dispongono di uno spazio di 128 byte di memoria EEPROM suddivisi in due “banchi” da 64 byte con locazioni da 0 a 3F hex.

Il kit è disponibile da Futura Elettronica

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 9 utenti e 68 visitatori collegati.

Ultimi Commenti