' ********************************************************************** ' * File: Corso_BASCOMAVR_008.BAS * ' * Versione: 1.1 * ' * Data: 06.07.09 * ' * Ambiente sviluppo: Bascom-AVR Demo Ver. 1.11.9.1 + * ' + + AVR bootloader grifo(r) Ver. 1.2 * ' * Schede: GMM AM08 + GMM TST3 * ' * Sviluppato da: GRIFO(r) Italian Technology * ' * via Dell'Artigiano 8/6 * ' * 40016 S. Giorgio di Piano (BO) * ' * Tel. +39 051 892052 Fax. +39 051 893661 * ' * http://www.grifo.com http://www.grifo.it * ' * Autore: Gianluca Angelini * ' ********************************************************************** ' Programma di esempio 008 del corso BASCOM AVR. ' Esegue semplici operazioni di I/O digitale utilizzando uno dei tasti, un LED ' ed il buzzer disponibili sulla GMM TST3, associate al tempo. ' Il programma acquisisce lo stato del tasto rosso T1 e se non premuto, ad ' ogni secondo cambia stato al LED di attivitā DL1 sul Mini Modulo ed effettua ' un beep sul buzzer della GMM TST3. Quando T1 viene premuto le stesse ' operazioni vengono accellerate ed eseguite 5 volte al secondo. Tutte le ' temporizzazioni sono generate con cicli calibrati e l'istruzione DELAY del ' BASCOM AVR. ' Il programma funziona solo se la GMM AM08 č montata sullo zoccolo Z1 della ' GMM TST3!! ' ' Istruzioni aggiunte: * (moltiplicazione), \ (divisione intera).. ' ' 06/07/09: Corso_BASCOMAVR_008.BAS - Ver 1.1 - By G.A. ' Prima versione. ' ' '*************************** Configurazioni IDE ******************************** ' NOTE: per usare correttamente questo programma demo, eseguire i seguenti ' punti: ' 1) Controllare la presenza del file M8DEF.DAT nella directory di ' installazione del BASCOM-AVR e se non disponibile copiarlo e dopo ' rilanciare l'IDE. ' 2) Nella finestra "Options | Compiler | Chip" impostare: ' Chip: m8def.dat ' XRAM: None ' HW Stack: 64 ' Soft Stack: 32 ' Framesize: 64 ' XRAM waitstate: disattivo ' External Access Enable: disattivo '********************** Direttive del compilatore ****************************** $regfile "M8DEF.DAT" ' File di definizione microcontrollore usato $romstart = &H0 ' Indirizzo inizio codice in FLASH $crystal = 7372800 ' Frequenza quarzo del microcontrollore $hwstack = 64 ' Spazio per stack hardware $swstack = 32 ' Spazio per stack software $framesize = 64 ' Spazio per frame $map ' Genera informazioni di debug '******************************* Definizioni *********************************** ' Le risorse usate dal programma sono collegate come illustrato nella seguente ' tabella: ' Risorsa pin Z1 GMM TST3 pin GMM AM08 Segnale uP ' LED DL1 18 12 PB5 , SCK ' Tasto T1 12 6 PC5 , ADC5 , SCL ' Buzzer BZ1 15 9 PB4 , MISO Pindl1 Alias Portb.5 ' Bit con segnale d'uscita collegato a DL1 GMM AM08 Pint1 Alias Pinc.5 ' Bit con segnale d'ingresso collegato a tasto rosso T1 Pinbz1 Alias Portb.4 ' Bit con segnale d'uscita collegato a buzzer BZ1 '************************ Dichiarazioni costanti ******************************* Const Del1sec = 993 ' Numero cicli per ottenere ritardo 1 sec (calibrata sperimentalmente) Const Del20msec = Del1sec * 20 \ 1000 ' Numero cicli per ottenere ritardo 20 msec Const Del180msec = Del1sec * 180 \ 1000 ' Numero cicli per ottenere ritardo 180 msec Const Del980msec = Del1sec * 980 \ 1000 ' Numero cicli per ottenere ritardo 980 msec '************************ Dichiarazioni variabili ****************************** Dim T1stat As Bit ' Variabile booleana con stato pulsante T1 Dim Dl1stat As Bit ' Variabile booleana con stato LED DL1 Dim Del As Long ' Variabile che conta cicli per ritardo '************************ Dichiarazioni procedure ****************************** '************************** Programma principale ******************************* Main: Ddrb.5 = 1 ' Inizializza segnale collegato a DL1 come uscita digitale alta Ddrc.5 = 0 ' Inizializza segnale collegato a T1 come ingresso digitale Ddrb.4 = 1 ' Inizializza segnale collegato a BZ1 come uscita digitale alta Dl1stat = 1 ' Inizializza stato DL1 a disattivo Do ' Inizio ciclo infinito Dl1stat = Not Dl1stat ' Inverte variabile con stato DL1 Pindl1 = Dl1stat ' Setta LED DL1 con nuovo stato ' Effettua beep con il nuzzer della GMM TST3 attivandolo per circa 20 millisecondi Pinbz1 = 0 ' Attiva buzzer BZ1 Del = 0 ' Azzera contatore cicli effettuati per ritardo Do ' Inizio ciclo per ritardo di 20 millisecondi Delay ' Effettua ritardo di circa 1000 microsecondi Del = Del + 1 ' Incrementa variabile che conta cicli per ritardo Loop Until Del > Del20msec ' Fine ciclo per ritardo Pinbz1 = 1 ' Disattiva buzzer BZ1 ' Acquisisce stato tasto T1 ed effettua ritardo diverso a seconda se č o non č premuto T1stat = Pint1 ' Acquisisce e salva stato tasto T1 If T1stat = 1 Then ' Se tasto non premuto ' Effettua ritardo di 980 millisecondi che sommati ai 20 del beep fanno durare il ciclo infinito ' circa 1000 millisecondi. In questo modo lo stesso ciclo viene eseguito una volta al secondo. Del = 0 ' Azzera contatore cicli effettuati per ritardo Do ' Inizio ciclo per ritardo di 980 millisecondi Delay ' Effettua ritardo di circa 1000 microsecondi Del = Del + 1 ' Incrementa variabile che conta cicli per ritardo Loop Until Del > Del980msec ' Fine ciclo per ritardo Else ' Se tasto premuto ' Effettua ritardo di 180 millisecondi che sommati ai 20 del beep fanno durare il ciclo infinito ' circa 200 millisecondi. In questo modo lo stesso ciclo viene eseguito cinque volte al secondo. Del = 0 ' Azzera contatore cicli effettuati per ritardo Do ' Inizio ciclo per ritardo di 180 millisecondi Delay ' Effettua ritardo di circa 1000 microsecondi Del = Del + 1 ' Incrementa variabile che conta cicli per ritardo Loop Until Del > Del180msec ' Fine ciclo per ritardo End If Loop ' Fine ciclo infinito End '************************ Fine programma principale ****************************