' ********************************************************************** ' * File: Corso_BASCOMAVR_084.BAS * ' * Versione: 1.1 * ' * Data: 30.12.10 * ' * 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 084 del corso BASCOM AVR. ' Gestione allarme dell'orologio in tempo reale (Real Time Clock) tramite ' PCF 8583. ' Il programma usa il componente PCF 8583 che è in grado di gestire un orario, ' una data ed una sveglia, tramite l'interfaccia I2C BUS del Mini Modulo. ' Il programma preleva ciclicamente dall'orologio la data, l'ora e lo stato ' della sveglia per poi rappresentarle sulla console. ' Sempre da console si può reimpostare data ed ora attuale, impostare il tempo ' di sveglia (con mese, giorno, ore, minuti, secondi), attivare la sveglia e ' disattivare la sveglia. Quando la sveglia è attivata e l'orologio raggiunge ' il tempo di sveglia impostato, viene indicata la condizione sulla console e ' contemporaneamente si attiva l'uscita /INT del componente che attiva il LED ' collegato. ' Il programma si presenta ed usa una console seriale dotata di monitor e ' tastiera, con un protocollo fisico costante a 19200 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 232. 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 AVR ' (vedere Configurazioni IDE). ' Il programma funziona solo se la GMM AM08 è montata sullo zoccolo Z2 della ' GMM TST3!! ' ' Aggiunte: Nessuna. ' ' 30/12/10: Corso_BASCOMAVR_84.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 ' 3) Nella finestra "Options | Compiler | I2C, SPI, 1WIRE" settare: ' I2C ' SCL port = PORTC.5 ' SDA port = PORTC.4 ' 1Wire ' 1wire = indifferente ' SPI ' Clock = indifferente ' MOSI = indifferente ' MISO = indifferente ' SS = indifferente ' Use Hardware SPI = disattivo ' 4) Nella finestra "Options | Communication" settare: ' COM port = la linea del PC collegata alla GMM AM08, tramite la GMM TST3 ' Baudrate = 19200 ' Parity = None ' Databits = 8 ' Stopbit = 1 ' Handshake = None ' Emulation = TTY ' Font = Terminal, Normale, 12 punti, colore bianco ' Backcolor = Navy ' 5) Al termine della compilazione, della programmazione del codice nella ' GMM AM08, aprire la finestra di emulazione terminale del BASCOM AVR con ' l'opzione: Tools | Terminal emulator (Ctrl+T) ed a questo punto resettare ' o riaccendere il Mini Modulo. '********************** 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 $baud = 19200 ' Velocità comunicazione seriale: 19200 Baud ' Altri parametri sono fissi a: 8 bit x chr ' 1 Stop bit ' No parity '******************************* Definizioni *********************************** ' Le risorse usate dal programma sono collegate come illustrato nella seguenti ' tabelle: ' !!! N.B. Sulla GMM TST3 i jumper devono essere posizionati come segue: ' J1 in 2-3 ; J2 in 1-2 ; J3 in 1-2 ; J5 in 2-3 ; J7 in 2-3 ; J8 in 2-3 ' J9 in 2-3 !!! ' ' Segnali Risorsa pin Z2 pin Segnale Segnale uP ' esterno GMM TST3 GMM TST3 GMM AM08 GMM AM08 usato ' SCL PCF8583 CN3.15 12 6 PC5 ADC5 SCL PC5 ' SDA PCF8583 CN3.16 13 7 PC4 ADC4 SDA PC4 ' Vdd PCF8583 CN3.18 34 28 +5 Vdc - ' GND PCF8583 CN3.17 20 14 GND - ' ' Segnale pin COMx pin CN5 pin Z2 pin Segnale Segnale uP ' PC DB9 GMM TST3 GMM TST3 GMM AM08 GMM AM08 usato ' TX 3 3 9 3 RxD RS232 PD0 ' RX 2 2 10 4 TxD RS232 PD1 ' GND 5 5 20 14 GND - ' Da questa tabella si ricava che il cavo di collegamento tra la COM del PC ed ' il CN5 della GMM TST3 è un normale cavo dritto o prolunga. Volendolo ' richiedere alla grifo(r) si deve specificare il codice CCR 9+9E. Pinrx Alias Ddrd.0 ' Bit con direzione segnale collegato a RxD GMM AM08 Pintx Alias Ddrd.1 ' Bit con direzione segnale collegato a TxD GMM AM08 '************************ Dichiarazioni costanti ******************************* Const Cret = &H0D ' Codice ASCII Carriage Return Const Slawpcf8583 = &HA0 ' Slave address PCF8583 in scrittura Const Slarpcf8583 = &HA1 ' Slave address PCF8583 in lettura '************************ Dichiarazioni variabili ****************************** Dim Hlpb As Byte ' Variabile byte di aiuto ad uso generico Dim Hlpw As Word ' Variabile word di aiuto ad uso generico Dim Choice As Byte ' Scelta utente Dim Wee As Byte ' Giorno settimana RTC Dim Scn As Byte ' Secondi RTC Dim Mnu As Byte ' Minuti RTC Dim Hou As Byte ' Ore RTC Dim Day As Byte ' Giorno mese RTC Dim Mon As Byte ' Mese RTC Dim Yea As Word ' Anno RTC Dim Alract As Bit ' Flag attivazione sveglia Dim Alron As Bit ' Flag allarme sveglia scattato '************************ Dichiarazioni procedure ****************************** Declare Sub Ini_i2c() ' Inizializza linee usate per l'interfaccia I2C BUS software Declare Sub Get_rtc() ' Acquisisce data ed ora da RTC Declare Sub Set_rtc() ' Setta data ed ora su RTC Declare Sub Set_alr() ' Setta sveglia su RTC Declare Sub Get_alr() ' Acquisisce sveglia da RTC Declare Sub Getst_alr() ' Acquisisce stato attuale sveglia da RTC Declare Sub Alr_on() ' Attiva allarme del RTC = sveglia Declare Sub Alr_off() ' Disattiva allarme del RTC = sveglia Declare Sub Shw_head() ' Rappresenta intestazione valori mostrati sulla console Declare Sub Shw_time() ' Rappresenta ora formattata sulla console Declare Sub Shw_date() ' Rappresenta data formattata sulla console Declare Sub Shw_alr() ' Rappresenta impostazione e stato svegia sulla console Declare Sub Ask_time() ' Richiede e preleva i valori temporali comuni all'utente tramite console '************************** Programma principale ******************************* Main: Pinrx = 0 ' Inizializza segnali per comunicazione seriale Pintx = 0 ' come ingressi digitali Call Ini_i2c() ' Inizializza linee usate per l'interfaccia I2C BUS software Print ' Separa da precedenti indicazioni, andando su nuova riga Print Print " Orologio+sveglia del Real Time Clock PCF 8583 con GMM AM08+GMM TST3" Print "Montare Mini Modulo su Z2 della GMM TST3, collegare linea I2C BUS al componente" Print "come da schema." Call Shw_head() ' Rappresenta intestazione valori mostrati Do ' Inizio ciclo infinito Call Get_rtc() ' Acquisisce data ed ora attuale da RTC Call Shw_date() ' Rappresenta data attuale Print " "; ' Separa rappresentazioni Call Shw_time() ' Rappresenta ora attuale Print " "; ' Separa rappresentazioni Call Get_alr() ' Acquisisce data ed ora sveglia da RTC Call Getst_alr() ' Acquisisce stato attuale sveglia da RTC Call Shw_alr() ' Rappresenta impostazione e stato svegia Printbin Cret ' Mantiene rappresentazione su stessa riga Waitms 100 ' Ritardo tra acquisizioni e controlli Choice = Inkey() ' Verifica se tasto premuto su console If Choice > 0 Then ' Se tasto premuto su console If Choice >= "a" Then ' Se tasto minuscolo Choice = Choice And &HDF ' Lo converte in in maiuscolo End If Select Case Choice ' Controlla scelta convertita Case "I": ' Scelta impostazione orologio Print ' Separa da precedenti indicazioni, andando su nuova riga Print Print "Inserire dati per impostare orologio" ' Richiede e preleva data da impostare Input "Giorno settimana (0->lunedi',..,6->Domenica):" , Wee Input "Anno (0000..9999):" , Yea Call Ask_time() ' Richiede e preleva valori temporali comuni tramite la console Call Set_rtc() ' Inizializza RTC con dati inseriti Call Shw_head() ' Rappresenta intestazione valori mostrati Case "S": ' Scelta impostazione sveglia Print ' Separa da precedenti indicazioni, andando su nuova riga Print Print "Inserire dati per impostare sveglia" ' Richiede e preleva tempo di sveglia Call Ask_time() ' Richiede e preleva valori temporali comuni tramite la console Call Set_alr() ' Inizializza sveglia RTC con dati inseriti Call Shw_head() ' Rappresenta intestazione valori mostrati Case "A": ' Scelta attivazione sveglia Call Alr_on() ' Attiva allarme del RTC = sveglia Print Print "Sveglia attivata" Call Shw_head() ' Rappresenta intestazione valori mostrati Case "D": ' Scelta disattivazione sveglia Call Alr_off() ' Disattiva allarme del RTC = sveglia Print Print "Sveglia disattivata" Call Shw_head() ' Rappresenta intestazione valori mostrati Case Else: ' Scelta non valida Printbin &H07 ' Emette un BEL di avviso sulla console End Select End If Loop ' Fine ciclo infinito End '************************ Fine programma principale **************************** '****************** Inizio procedure usate dal programma *********************** ' Inizializza segnali e variabili usati per l'interfaccia I2C BUS gestita via ' software ' Ingresso: Nulla ' Uscita: Nulla Sub Ini_i2c() ' Questa procedura è stata realizzata per compatibilità con i programmi demo ' delle EEPROM con altri protocolli gestite a basso livello. Per il protocollo ' I2C BUS si usano invece le istruzioni ad alto livello del BASCOM. ' Per le connessioni linee dell'interfaccia I2C BUS software vedere help in ' linea e precedente tabella. Config Scl = Portc.5 ' Segnale del micro usato come segnale SCL dell'I2C BUS Config Sda = Portc.4 ' Segnale del micro usato come segnale SDA dell'I2C BUS I2cinit ' Inizializza segnali I2C BUS End Sub ' Procedura che preleva data ed ora attuali dal RTC PCF 8583, in I2C BUS ' Ingresso: Nulla ' Uscita: Scn,Mnu,Hou = orario prelevato ' Day,Mon,Yea,Wee = data prelevata (con anno a 4 cifre) Sub Get_rtc() I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H02 ' Manda indirizzo registro 2 I2cstart ' Manda repeated start I2cwbyte Slarpcf8583 ' Manda slave address PCF8583+R I2crbyte Scn , Ack ' Legge secondi da reg. 2 I2crbyte Mnu , Ack ' Legge minuti da reg. 3 I2crbyte Hou , Ack ' Legge ore da reg. 4 I2crbyte Hlpb , Ack ' Legge anno e giorno da reg. 5 I2crbyte Wee , Nack ' Legge settimana e mese da reg. 6 I2cstop ' Manda stop Scn = Makedec(scn) ' Ottiene secondi Mnu = Makedec(mnu) ' Ottiene minuti Hou = Makedec(hou) ' Ottiene ore Day = Hlpb And &H3F ' Ottiene giorno Day = Makedec(day) Shift Hlpb , Right , 6 ' Ottiene offset anno (0÷3) Yea = Hlpb Mon = Wee And &H1F ' Ottiene mese Mon = Makedec(mon) Shift Wee , Right , 5 ' Ottiene settimana ' Preleva anno a 4 cifre da ultime locazioni RAM del PCF 8583 I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &HFE ' Manda indirizzo penultima locazione I2cstart ' Manda repeated start I2cwbyte Slarpcf8583 ' Manda slave address PCF8583+R I2crbyte Hlpb , Ack ' Legge byte high anno a 4 cifre da RAM Hlpw = Hlpb ' Salva byte high anno a 4 cifre I2crbyte Hlpb , Nack ' Legge byte low anno a 4 cifre da RAM I2cstop ' Manda stop Shift Hlpw , Left , 8 ' Ottiene anno a 4 cifre dai due byte letti Hlpw = Hlpw Or Hlpb Yea = Yea + Hlpw ' Aggiunge offset anno letto da RTC End Sub ' Procedura che setta data ed ora attuali sul RTC PCF 8583, in I2C BUS ' Ingresso: Scn,Mnu,Hou = orario prelevato ' Day,Mon,Yea,Wee = data prelevata (con anno a 4 cifre) ' Uscita: Nulla Sub Set_rtc() Scn = Makebcd(scn) ' Trasforma secondi Mnu = Makebcd(mnu) ' Trasforma minuti Hou = Makebcd(hou) ' Trasforma ore Day = Makebcd(day) ' Trasforma giorno Mon = Makebcd(mon) ' Trasforma mese Shift Wee , Left , 5 ' Trasforma settimana Wee = Wee Or Mon ' Ottiene settimana e mese I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H00 ' Manda indirizzo registro 0 I2cwbyte &H84 ' Manda comando stop RTC su reg. 0 I2cstop ' Manda stop I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H01 ' Manda indirizzo registro 1 I2cwbyte &H00 ' Manda centinaia secondi I2cwbyte Scn ' Manda secondi su reg. 2 I2cwbyte Mnu ' Manda minuti su reg. 3 I2cwbyte Hou ' Manda ore su reg. 4 I2cwbyte Day ' Manda anno=0 e giorno su reg. 5 I2cwbyte Wee ' Manda settimana e mese su reg. 6 I2cstop ' Manda stop I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H00 ' Manda indirizzo registro 0 I2cwbyte &H00 ' Manda comando start RTC su reg. 0 I2cstop ' Manda stop ' Setta anno a 4 cifre su ultime locazioni RAM del PCF 8583 I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &HFE ' Manda indirizzo penultima locazione Hlpb = High(yea) ' Preleva byte high anno a 4 cifre I2cwbyte Hlpb ' Manda byte high anno a 4 cifre su RAM Hlpb = Low(yea) ' Preleva byte low anno a 4 cifre I2cwbyte Hlpb ' Manda byte low anno a 4 cifre su RAM I2cstop ' Manda stop End Sub ' Procedura che setta data ed ora nella sveglia del RTC PCF 8583 e disabilita la ' sua uscita /INT, in I2C BUS. ' Ingresso: Scn,Mnu,Hou = ora sveglia da impostare ' Day,Mon = data sveglia da impostare ' Uscita: Nulla Sub Set_alr() Scn = Makebcd(scn) ' Trasforma secondi sveglia Mnu = Makebcd(mnu) ' Trasforma minuti sveglia Hou = Makebcd(hou) ' Trasforma ore sveglia Day = Makebcd(day) ' Trasforma giorno sveglia Mon = Makebcd(mon) ' Trasforma mese sveglia I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H00 ' Manda indirizzo registro 0 I2cwbyte &H04 ' Manda comando attiva reg. corntrollo allarme,no flags allarme,timer su reg. 0 I2cstop ' Manda stop I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H09 ' Manda indirizzo registro 9 I2cwbyte &H00 ' Manda centinaia secondi allarme = sveglia su reg. 9 I2cwbyte Scn ' Manda secondi allarme = sveglia su reg. 10 I2cwbyte Mnu ' Manda minuti allarme = sveglia su reg. 11 I2cwbyte Hou ' Manda ore allarme = sveglia su reg. 12 I2cwbyte Day ' Manda giorno allarme = sveglia su reg. 13 I2cwbyte Mon ' Manda mese allarme = sveglia su reg. 14 I2cstop ' Manda stop End Sub ' Procedura che preleva data ed ora impostati nella sveglia del RTC PCF 8583, ' in I2C BUS ' Ingresso: Nulla ' Uscita: Scn,Mnu,Hou = ora sveglia prelevata ' Day,Mon = data sveglia prelevata Sub Get_alr() I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H00 ' Manda indirizzo registro 0 I2cstart ' Manda repeated start I2cwbyte Slarpcf8583 ' Manda slave address PCF8583+R I2crbyte Hlpb , Nack ' Legge settaggio control status register da reg. 0 I2cstop ' Manda stop Hlpb = Hlpb Or &H04 ' Setta alarm enable I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H00 ' Manda indirizzo registro 0 I2cwbyte Hlpb ' Manda comando determinato per settare alarm enable su reg. 0 I2cstop ' Manda stop I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H0A ' Manda indirizzo registro 10 I2cstart ' Manda repeated start I2cwbyte Slarpcf8583 ' Manda slave address PCF8583+R I2crbyte Scn , Ack ' Legge secondi allarme = sveglia da reg. 10 I2crbyte Mnu , Ack ' Legge minuti allarme = sveglia da reg. 11 I2crbyte Hou , Ack ' Legge ore allarme = sveglia da reg. 12 I2crbyte Day , Ack ' Legge giorno allarme = sveglia da reg. 13 I2crbyte Mon , Nack ' Legge mese allarme = sveglia da reg. 14 I2cstop ' Manda stop Scn = Makedec(scn) ' Ottiene secondi sveglia Mnu = Makedec(mnu) ' Ottiene minuti sveglia Hou = Makedec(hou) ' Ottiene ore sveglia Day = Makedec(day) ' Ottiene giorno sveglia Mon = Makedec(mon) ' Ottiene mese sveglia End Sub ' Procedura che preleva stato attuale della sveglia dal RTC PCF 8583, in I2C BUS ' Ingresso: Nulla ' Uscita: Alract = Flag attivazione sveglia ' Alron = Flag allarme sveglia scattato Sub Getst_alr() I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H08 ' Manda indirizzo registro 8 I2cstart ' Manda repeated start I2cwbyte Slarpcf8583 ' Manda slave address PCF8583+R I2crbyte Hlpb , Nack ' Legge settaggio alarm control register da reg. 8 I2cstop ' Manda stop If Hlpb = &HB0 Then Alract = 1 ' Salva sveglia attivata Else Alract = 0 ' Salva sveglia non attivata End If I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H00 ' Manda indirizzo registro 0 I2cstart ' Manda repeated start I2cwbyte Slarpcf8583 ' Manda slave address PCF8583+R I2crbyte Hlpb , Nack ' Legge settaggio control status register da reg. 0 I2cstop ' Manda stop Hlpb = Hlpb And &H02 ' Mantiene bit alarm flag=allarme sveglia scattato If Hlpb = &H02 Then Alron = 1 ' Salva allarme sveglia scattato Else Alron = 0 ' Salva allarme sveglia non scattato End If End Sub ' Procedura che attiva allarme del RTC PCF 8583 (=sveglia), in I2C BUS ' Ingresso: Nulla ' Uscita: Nulla Sub Alr_on() I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H08 ' Manda indirizzo registro 8 I2cwbyte &HB0 ' Manda comando Setta dated allarm ed abilita uscita=/INT su reg. 8 I2cstop ' Manda stop End Sub ' Procedura che disattiva allarme del RTC PCF 8583 (=sveglia), in I2C BUS ' Ingresso: Nulla ' Uscita: Nulla Sub Alr_off() I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H00 ' Manda indirizzo registro 0 I2cwbyte &H04 ' Manda comando attivazione reg.contr.all.;no flags all.,time su reg. 0 I2cstop ' Manda stop I2cstart ' Manda start I2cwbyte Slawpcf8583 ' Manda slave address PCF8583+W I2cwbyte &H08 ' Manda indirizzo registro 8 I2cwbyte &H00 ' Manda comando abilitazione uscita di allarme=/INT su reg. 8 I2cstop ' Manda stop End Sub ' Rappresenta intestazione valori mostrati ' Ingresso: Nulla ' Uscita: Nulla Sub Shw_head() Print Print "Data,ora,sveglia in rappresentazione. Tasto I setta orologio, S setta sveglia," Print "A attiva sveglia, D disattiva sveglia." Print Print " Data attuale Ora attuale Data Ora Stato Stato" Print " orologio orologio sveglia sveglia sveglia allarme" End Sub ' Rappresenta data formattata sulla console nel formato gg/mm/aaaa ' Ingresso: Wee,Day,Mon,Yea = data attuale ' Uscita: Nulla Sub Shw_date() Select Case Wee ' Rappresenta giorno della settimana Case 0 : Print "Lun."; Case 1 : Print "Mar."; Case 2 : Print "Mer."; Case 3 : Print "Gio."; Case 4 : Print "Ven."; Case 5 : Print "Sab."; Case 6 : Print "Dom."; End Select Print " "; If Day < 10 Then ' Rappresenta giorno a due cifre Print "0"; End If Print Day ; "/" ; If Mon < 10 Then ' Rappresenta mese a due cifre Print "0"; End If Print Mon ; "/" ; If Yea < 1000 Then ' Rappresenta anno a quattro cifre Print "0"; End If If Yea < 100 Then Print "0"; End If If Yea < 10 Then Print "0"; End If Print Yea ; End Sub ' Rappresenta ora formattata sulla console nel formato oo:mm:ss ' Ingresso: Scn,Mnu,Hou = orario attuale ' Uscita: Nulla Sub Shw_time() If Hou < 10 Then ' Rappresenta ore a due cifre Print "0"; End If Print Hou ; ":" ; ' Con separatore If Mnu < 10 Then ' Rappresenta minuti a due cifre Print "0"; End If Print Mnu ; ":" ; ' Con separatore If Scn < 10 Then ' Rappresenta secondi a due cifre Print "0"; End If Print Scn ; End Sub ' Rappresenta data ed ora della sveglia formattate sulla console nel formato ' dd/mm oo:mm:ss e lo stato di attivazione e scatto ' Ingresso: Mon,Day,Scn,Mnu,Hou = impostazione sveglia ' Alract = Flag attivazione sveglia ' Alron = Flag allarme sveglia scattato ' Uscita: Nulla Sub Shw_alr() If Day < 10 Then ' Rappresenta giorno sveglia a due cifre Print "0"; End If Print Day ; "/" ; If Mon < 10 Then ' Rappresenta mese sveglia a due cifre Print "0"; End If Print Mon ; " " ; Call Shw_time() ' Rappresenta orario sveglia Print " "; ' Separa rappresentazioni If Alract = 1 Then ' Rappresenta stato attivazioe sveglia Print " Attiva "; Else Print "Disattiva"; End If Print " "; ' Separa rappresentazioni If Alron = 1 Then ' Rappresenta stato allarme sveglia scattato Print "Scattato "; Else Print "Non scattato"; End If End Sub ' Richiede i valori di mese, giorno, ore, minuti, secondi (comuni sia al ' settaggio orologio che sveglia) all'utente tramite la console ' Ingresso: Nulla ' Uscita: Scn,Mnu,Hou = orario inserito da utente ' Day,Mon = data inserita da utente Sub Ask_time() Input "Mese (1..12):" , Mon Input "Giorno (1..31):" , Day Input "Ore (0..23):" , Hou ' Richiede e preleva ora da impostare Input "Minuti (0..59):" , Mnu Input "Secondi (0..59):" , Scn End Sub '******************* Fine procedure usate dal programma ************************