Capitolo.009

Transcript

Capitolo.009
Corso di BASCOM 8051 - (Capitolo 9 )
Corso Teorico/Pratico di programmazione in BASCOM 8 0 5 1 .
Autore: DAMINO Salvatore.
Codice Morse. ( 3 ) .
Come precedentemente accennato per utilizzare adeguatamente le potenzialità
dei Mini Moduli è necessario che si abbia una conoscenza più approfondita
dell'architettura della CPU impiegata. A questo fine è vivamente consigliata una
lettura approfondita del Data-Sheet della CPU di cui, di seguito, riportiamo
qualche stralcio.
Schema a Blocchi della CPU Atmel AT89C5115.
In questa lezione approfitteremo dalle possibilità offerte dall'Esempio.014 per
ampliarlo introducendo una impotante caratteristica offerta dal nostro Mini
Modulo GMM 5 1 1 5 vale a dire quella della EEPROM interna.
La GMM
-
5 1 1 5 dispone, a livello di Memorie, delle reguente risore:
16K byte di FLASH per Codice.
2K byte di FLASH per Boot Loader.
2 5 6 byte di RAM interna per dati.
2 5 6 byte di XRAM per dati.
2K byte di EEPROM per dati.
Registri SFR.
49
Architettura
della Memoria FLASH.
Configurazione della RAM Interna.
Organizzazione dei 128 Bytes Bassi della RAM Interna.
50
Mappa dei Registri per Funzioni Speciali ad Accesso Diretto.
(Special Function Registers: SFR).
In questo esempio prenderemo in considerazione le possibilità offerte dai 2K di
EEPROM interna.
Questa sezione è una Memoria che ha la particolarità di poter ritenere le
informazioni anche in assenza di alimentazione. A differenza però della Memoria di
tipo FLASH questa può essere scritta, cancellate, riscritta, ecc. a livello di Byte
per un numero molto alto di volte. Nel caso di questo dispositivo la Casa Madre
assicura un numero di 100K Cicli che non sono davvero pochi.
Gli utilizzi sono veramente innumerevoli e sono limitati solo dalla fantasia del
progettista. Si possono, ad esempio, settare un certo numero di parametri atti a
51
specializzare ciascun dispositivo di una produzione oppure, come nel ns. caso, si
possono memorizzare i vari messaggi da trasmettere in Morse.
Una volta editato il messaggio questo viene memorizzato all'interno di una Lista di
messaggi sulla EEPROM della GMM 5115. Ad ogni messaggio viene attribuito un
numero di identificazione per poterlo richiamare e metterlo in esecuzione.
Tutti i messaggi rimarranno nel Mini Modulo anche con apparecchiatura spenta e
alla sua riaccensione potranno essere richiamati ed essere eseguiti senza problemi.
Tipico Tasto Telegrafico.
52
Esempio.015.
Programma
MORSE con EEPROM.
di
Addestramento
per
codice
Definizioni aggiunte:
Nessuna
Dichiarazioni aggiunte:
Nessuna
Istruzioni aggiunte:
DISABLE INTERRUPTS ; ENABLE INTERRUPTS ; OUT ; INP ; INCR ; CHR ; SPACE
Operatori aggiunti:
OR
Programma di Esempio.015 del corso BASCOM 8051.
Consente di generare dei messaggi, in codice Morse, e di memorizzarli/prelevarli
nella/sulla EEPROM interna.
Il programma può eseguire le seguenti operazioni: richiede un messaggio e poi lo
genera con codice Morse sul buzzer, definisce la velocità di generazione dei codici
Morse, genera in Morse l'ultimo messaggio usato, salva fino a 5 Messaggi in
EEPROM, preleva un messaggio salvato da EEPROM ed infine genera i 3 codici
particolari del Morse di attenzione, errore e ripetizione.
L'interazione con l'utente avviene tramite una console seriale dotata di tastiera e
monitor, con un protocollo fisico costante a 19.200 Baud, 8 Bit x chr, 1 Stop
bit, Nessuna Parità.
Questa console può coincidere con un sistema in grado di gestire una
comunicazione seriale in RS 2 3 2. Al fine di semplificarne l'uso si può usare un PC
dotato di una linea COMx, che esegue un programma di Emulazione Terminale
come HYPERTERMINAL o l'omonima modalità offerta dal BASCOM 8 0 5 1
(vedere Configurazioni IDE) .
53
Inizio
Inizializza segnali per comunicazione seriale come ingressi digitali
Inizializza segnale collegato a buzzer BZ1 come uscita digitale alta
Imposta durata unità temporale a 200 msec
Presenta indicazioni d'uso del programma sulla console seriale
Inizio Loop Infinito
Presenta menù con le operazioni disponibili sulla console seriale
Attende scelta operazione da eseguire, la rappresenta sulla console
seriale e la trasforma in maiuscolo
Si
Scelta operazione = Genera Messaggio
No
Richiede e preleva il messaggio da generare in Morse (max. 40 caratteri)
1: Genera messaggio inserito in Morse
Si
Scelta operazione = Imposta Velocità
No
Rappresenta attuale durata unità temporale Morse, da cui deriva l'attuale velocità
Richiede e preleva la nuova durata unità temporale Morse, da cui deriva la nuova velocità
Si
Scelta operazione = Ripete Ultimo Messaggio
No
1: Genera ultimo messaggio usato in Morse
Si
Scelta operazione = Salva Messaggio in EEPROM
No
7: Mostra attuali messaggi salvati in EEPROM
Richiede e preleva numero messaggio e messaggio da salvare in EEPROM (max. 40 caratteri)
5: Salva messaggio in EEPROM
Si
Scelta operazione = Legge Messaggio da EEPROM
No
7: Mostra attuali messaggi salvati in EEPROM
Richiede e preleva numero messaggio da leggere da EEPROM
6: Legge messaggio da EEPROM
Scelta operazione = Genera Codice Attenzione
No
Si
Setta codifica binaria e numero componenti del codice di attenzione Morse
2: Genera codice Morse settato
Scelta operazione = Genera Codice Errore
No
Si
Setta codifica binaria e numero componenti del codice di errore Morse
2: Genera codice Morse settato
Scelta operazione = Genera Codice Ripetizione
No
Si
Setta codifica binaria e numero componenti della prima parte del codice di ripetizione Morse
2: Genera codice Morse settato
Genera spazio tra le due parti del codice ripetizione effettuando ritardo di 3 unità temporali (4)
Setta codifica binaria e numero componenti della seconda parte del codice di ripetizione Morse
2: Genera codice Morse settato
Avvisa per scelta operazione non valida con suono su Console
Fine Loop Infinito
Raffigurazione della Flow del Programma.
54
Rappresenta intestazione per caratteri generati su console seriale
Trasforma messaggio da generare in maiuscolo
Determina numero caratteri del messaggio da generare
Ciclo che si ripete per il numero caratteri del messaggio
Determina codice ASCII dell'attuale carattere da generare del messaggio
= Spazio
Attuale carattere da generare é
≠ Spazio
3: Genera carattere in Morse
Genera spazio tra una parola e la successiva,
effettuando ritardo di 7 unità temporali (4)
Valido e Quindi Generato
Attuale carattere é
Non Valido
Rappresenta carattere generato su console
Fine Ciclo
1: Generazione Messaggio Morse.
Ciclo che si ripete per il numero componenti del codice
Ottiene componente da generare dal codice Morse, ovvero suo bit meno significativo
Attiva buzzer BZ1 della GMM TST3
Linea Morse (bit = 1)
Componente da Generare é
Effettua ritardo di 3 unità temporali (4)
Punto Morse (bit = 0)
Effettua ritardo di 1 unità temporale (4)
Disattiva buzzer BZ1 della GMM TST3
Genera spazio Morse tra i componenti, effettuando ritardo di 1 unità temporale (4)
Shifta Codice Morse di un bit a destra
Fine Ciclo
2: Generazione Codice Morse.
55
Carattere é valido, ovvero incluso nella tabella con
codifica binaria Morse, che va da " " a "‘"
No
Si
Determina codice ASCII del carattere da generare, a partire da 0
Preleva codice Morse e numero componenti relativi al carattere da generare da apposita
tabella con codifica binaria
2: Genera Codice Morse Prelevato
Genera spazio Morse tra un carattere e l'altro, effettuando ritardo di 3 unità temporali (4)
3: Generazione Carattere
Morse.
Genera ritardo di una unità temporale Morse, che ha la durata definita dall'utente. Tale durata
definisce in modo inversamente proporzionale la velocità di generazione dei codici Morse
4: Effettua Ritardo di 1 Unità Temporele.
Calcola indirizzo inizio messaggio in EEPROM, usando spazio occupato di 42 locazioni a messaggio
Salva indicazione messaggio salvato in EEPROM, su prima locazione del messaggio (8)
Determina lunghezza del messaggio da salvare in caratteri
Salva lunghezza del messaggio da salvare in EEPROM, su seconda locazione del messaggio (8)
Ciclo che si ripete per il numero caratteri del messaggio
Determina codice ASCII dell'attuale carattere da salvare del messaggio
Salva codice ASCII in EEPROM su sucessiva locazione del messaggio (8)
Fine Ciclo
5: Salva Messaggio in EEPROM.
56
Calcola indirizzo inizio messaggio in EEPROM, usando spazio occupato di 42 locazioni a messaggio
Preleva indicazione messaggio salvato in EEPROM, da prima locazione del messaggio (9)
Messaggio già salvato in EEPROM
No
Si
Preleva lunghezza del messaggio da leggere da EEPROM, da seconda locazione del messaggio (9)
Prepara stringa lunga quanto il messaggio da leggere, riempendola di spazi
Ciclo che si ripete per il numero caratteri del messaggio
Preleva codice ASCII da EEPROM, da sucessiva locazione del messaggio (9)
Determina attuale carattere del messaggio dal codice ASCII prelevato
Salva carattere attuale nel messaggio
Fine Ciclo
Indica messaggio salvato in EEPROM e letto
6: Legge Messaggio da EEPROM.
Visualizza intestazione lista messaggi in EEPROM su console seriale
Preleva indicazione messaggio salvato in EEPROM, da prima locazione del messaggio
Ciclo che si ripete per i massimi 5 messaggi gestiti in EEPROM
Visualizza numero messaggio attuale su console seriale
6: Legge messaggio attuale da EEPROM
No
Messaggio già salvato in EEPROM
Visualizza messaggio vuoto nella lista su
console seriale
Si
Visualizza messaggio letto nella lista su
console seriale
Fine Ciclo
7: Mostra Attuali Messaggi Salvati in EEPROM.
57
Avvia scrittura EEPROM effettuando le seguenti operazioni:
- Deseleziona ERAM su area dati esterna del microprocessore
- Disabilita tutti gli interrupts
- Seleziona EEPROM su area dati esterna del microprocessore
- Scrive byte sulla locazione dell'area dati esterna del microprocessore
- Attiva scrittura EEPROM interna
- Deseleziona EEPROM su area dati esterna del microprocessore
- Riabilita tutti gli interrupts
- Seleziona ERAM su area dati esterna del microprocessore
Effettua ciclo in cui attende la fine scrittura EEPROM, controllando apposito bit di EEPROM
occupata, all'interno di un timeout di sicurezza
8: Scrive un Byte in una Locazione della EEPROM.
Effettua lettura EEPROM con le seguenti operazioni:
- Deseleziona ERAM su area dati esterna del microprocessore
- Disabilita tutti gli interrupts
- Seleziona EEPROM su area dati esterna del microprocessore
- Legge byte dalla locazione dell'area dati esterna del microprocessore
- Deseleziona EEPROM su area dati esterna del microprocessore
- Riabilita tutti gli interrupts
- Seleziona ERAM su area dati esterna del microprocessore
9: Legge un Byte da una Locazione della EEPROM
58