{ ********************************************************************** ** Programma: S2DEB1b.PAS Versione: 1.1- 9 Marzo 1999 ** ** Ditta: GRIFO(r) Via Dell'Artigiano 8/6 ** ** 40016 San Giorgio di Piano (BO) ** ** Tel. 051-892052 FAX 051-893661 ** ** Realizzato da: Tassinari Enea ** ********************************************************************** Il programma e' in grado di riportare sul monitor del "sistema di sviluppo", lo stato della tastiera esadecimale. Per il funzionamento del seguente programma e' necessario un compilatore pascal (parte software), una scheda DEB01 e una scheda GPC-15R opportunamente collegate (parte hrdware). } program S2DEB1b; {$C-} { disabilita il Ctrl+C } const CNT=$17; { registro di controllo e comando del PPI 82C55 } PDC=$16; { registro dati del port C } var TASTO:char; RIGA:integer; PC_OUT:integer; COLONNA:integer; TEMP:integer; TASTO_PREC:integer; NUM_TASTO:integer; const CODICI: array[1..16] of char = '147*2580369#ABCD'; { Assegno alla costante CODICI i sedici caratteri della tastiera esadecimale } procedure INIZIALIZZAZIONE; { Inizializzazione del registro di controllo dell' 82C55 } begin port[CNT]:=131; end; function LETT_PCL (INDIRIZZO:integer; BIT:byte):byte; { lettura dello stato del Port C } var TEMP:integer; VAL_RIG:integer; begin TEMP:=port[INDIRIZZO]; { Leggo il port C } VAL_RIG:=RIGA-1; BIT:=1 shl VAL_RIG; { Leggo un solo bit alla volta } LETT_PCL:=TEMP and BIT; { Lettura del bit del port C indicato dalla variabile bit. } end; procedure VIS_TASTO; { Procedura per la visualizzazione di un tasto della tastiera della deb01 } var NUM:integer; CONTATORE:integer; begin NUM:=(COLONNA-1)*4+RIGA; NUM_TASTO:=NUM; repeat if NUM_TASTO=TASTO_PREC then CONTATORE:=CONTATORE+1 else begin TASTO_PREC:=NUM_TASTO; CONTATORE:=1; end; until CONTATORE:=200; gotoxy(50,8); write(CODICI[NUM]:2); { Visualizzo il carattere contenuto nella cella di memoria che corrisponde al risultato di NUM. } delay(400); { Immetto un ritardo di 400 ms } gotoxy(50,8); clreol; { Cancello la fine della riga } end; procedure TASTIERA; { Procedura per il controllo della tastiera della deb01 } var LETT_BIT:byte; begin repeat PC_OUT:=16; for COLONNA:=1 to 4 do { Ciclo di scrittura della colonna } begin port[PDC]:=PC_OUT; { Settaggio del portC con PC_OUT. } for RIGA:=1 to 4 do { Ciclo di lettura della riga } begin LETT_BIT:=LETT_PCL(PDC,RIGA); { Leggo le righe della tastiera. } if LETT_BIT=0 then VIS_TASTO else begin NUM_TASTO:=255; TASTO_PREC:=NUM_TASTO; end; end; { Chiudo il ciclo di lettura delle righe } PC_OUT:=PC_OUT shl 1;{ Aggiorno la variabile PC_OUT } end; { Chiudo il ciclo di scrittura delle colonne } until keypressed; end; begin {programma principale } clrscr; INIZIALIZZAZIONE; gotoxy(12,3); writeln('VISUALIZZAZIONE DELLO STATO DELLA TASTIERA ESADECIMALE IN CORSO'); gotoxy(26,4); write('Premere un tasto per uscire'); gotoxy(27,8); write('* Stato della tastiera:'); gotoxy(27,7); write('**********************'); gotoxy(27,9); write('**********************'); TASTIERA; read(kbd,TASTO); end.