' ********************************************************************** ' ** Programma: S1DEB1.BAS - Versione : 1.0 - 07 Maggio 1999 ** ' ** Compilatore : BASCOM LT, (IDE V.1.20, LIB V.1.27) ** ' ** Scheda : GPC(r) 323 ** ' ** Ditta: grifo(r) ITALIAN TECHNOLOGY ** ' ** Via Dell' Artigiano 8/6 40016 San Giorgio di Piano (BO) ** ' ** Tel.+39 051 892 052 Fax +39 051 893 661 ** ' ** http://www.grifo.com http://www.grifo.it ** ' ** sales@grifo.it tech@grifo.it grifo@grifo.it ** ' ** ** ' ** Realizzato da: Graziano Gaiba ** ' ********************************************************************** ' ' Questo programma riporta il codice esadecimale del tasto premuto ' nell'emulatore di terminale, trasmesso sulla linea seriale, sui segnali ' del port A. ' Per facilitare la visualizzazione dello stato delle linee è necessario ' collegare con un cavo flat a 20 poli, il connettore CN7 della GPC(r) 323 ' al connettore CN15 della DEB 01. ' '****************** Direttive del compilatore ************************** ' $romstart = &H8050 ' indirizzo di partenza del codice macchina $ramstart = &HD000 ' indirizzo di partenza della area dati $ramsize = &H2800 ' pongo a 10K la area dati $crystal = 22118400 ' frequenza di clock del microcontrollore $baud = 19200 ' velocità di comunicazione RS-232 $large ' indirizzamento a 16 bit ' '****************** Dichiarazione delle costanti *********************** ' Dim Pda As Const &HFFFC ' registro dati del portA Dim Pdb As Const &HFFFD ' registro dati del portB Dim Pdc As Const &HFFFE ' registro dati del portC Dim Cnt As Const &HFFFF ' registro di controllo ' '****************** Dichiarazione delle variabili ********************** ' Dim Char As Byte ' Memorizza il codice carattere letto dalla linea seriale Dim T As Byte ' Variabile di uso generico Dim Vbyte As Byte ' Valore resituito dalla procedura ' Se vale 16 il codice non è esadecimale ' Altrimenti è il codice stesso ' '****************** Dichiarazione delle procedure *********************** ' Declare Sub Chartest(t As Byte) ' Determina se il parametro che riceve ' è un carattere esadecimale ' '************************* Programma main ****************************** ' Waitms 1 ' Ritardo per assestamento dei segnali Poke &H20 , 0 Out Cnt , &B10001011 ' Configura il port A in uscita, ' i port B e C in ingresso Out Pda , &HFF ' Spegne i led rossi Print " Programma dimostrativo 1 per la sezione 1 della scheda DEB(r) 01" Print : Print " Riporta sul port 0 il codice esadecimale del tasto premuto sul PC." Print : Print " Esecuzione in corso..." Print Do Print "Digitare carattere: " ; ' Richiede il carattere Char = 0 While Char = 0 Char = Inkey ' Legge la seriale Wend ' Finchè non riceve un carattere Print Chr(char) Call Chartest (char ) If Vbyte = 16 Then Print "Sono ammessi solo i caratteri da 0 a 9, da A ad F e da a ad f." Else Vbyte = Not Vbyte ' Nega il carattere per pilotare i led in logica negata Out Pda , Vbyte ' Pone in uscita il carattere negato End If Loop End ' '************************ Fine del programma *************************** ' ' '**************************** Procedure ******************************** ' ' Procedura che verifica se il suo parametro è una cifra esadecimale, cioè ' un chartere tra 0 e 9, a ed f, A ef F. Pone Vbyte a 16 se non è così. ' Parametri in ingresso: ' T Byte Contiene il carattere da esaminare ' Parametri in uscita ' Vbyte Byte Se il carattere è esadecimale ne contiene il codice ' altrimenti contiene il valore 16 Sub Chartest(t As Byte) Vbyte = 16 If T < 48 Then ' É sotto la cifra 0 Exit Sub ' Sicuramente non è un numero esadecimale End If If T > 57 Then ' Cifra maggiore di 9, verifica se è una lettera If T < 65 Then ' É sotto la lettera A Exit Sub ' Segnala che è errata End If If T > 70 Then ' É sopra la lettera F, potrebbe essere minuscola If T < 97 Then ' É sotto la a Exit Sub ' Segnala che è errata End If If T > 102 Then ' É sopra la f, sicuramente non è Exit Sub ' una cifra esadecimale Else ' Carattere da a ad f, valore da 97 a 102 Vbyte = T - 87 ' Normalizzato da 10 a 15 End If Else ' Carattere da A ad F, valore da 65 a 70 Vbyte = T - 55 ' Normalizzato da 10 a 15 End If Else ' Carattere numerico Vbyte = T - 48 ' Normalizzato da 0 a 9 End If End Sub