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