{ ********************************************************************** ** Programma: S1DEB8b.PAS Versione: 1.1-16Febbraio 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 compiere un ciclo di conteggio che si ripete; a seconda che lo switch 1 del dip switch sia 0 o a 1 il conteggio sara' crescente o decrescente. E' possibile visualizzare il conteggio sui led. 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 S1DEB8b; {$C-} { disabilita il Ctrl+C } const CNT=$17; { Registro di controllo e comando del PPI 82C55 } PDA=$14; { Registro dati del port A } PDB=$15; { Registro dati del port B } PDC=$16; { Registro dati del port C } RIT=100; { Ritardo di 100 ms } var STATO:byte; TASTO:char; VAL:integer; SWC:integer; RIS:integer; procedure INIZIALIZZAZIONE; { Inizializzazione del registro di controllo dell' 82C55 } begin port[CNT]:=130; end; function LETTURA (INDIRIZZO:integer):byte; begin LETTURA:=port[INDIRIZZO]; end; procedure SCRITTURA (STATO:integer); { Scrittura sul Port A e Port C } var BYTEL,BYTEH:byte; begin BYTEL:=STATO and $FF; { Scrive all'interno della variabile BYTEL solo il valore del byte basso del contenuto della variabile STATO } BYTEH:=(STATO and $FF00) shr 8; { Scrive all'interno della variabile BYTEH solo il valore del byte alto del contenuto della variabile STATO. La lettura del valore inoltre risulta compresa tra 0 e 255 in quanto il contenuto del byte alto e' stato spostato di otto posizioni quindi riportato all'equivalente del byte basso. } port[PDA]:=BYTEL; port[PDC]:=BYTEH; end; begin {programma principale } clrscr; INIZIALIZZAZIONE; gotoxy(10,3); writeln('VISUALIZZAZIONE DEL CONTEGGIO DEI LED SUI PORT A-C IN CORSO'); gotoxy(25,4); write('Premere un tasto per uscire'); begin SCRITTURA($FFFF); { Vengono spenti tutti i led del port A e del port C } SWC:=LETTURA(PDB); RIS:=SWC and 1; { Viene reso sensibile solo lo switch 1 del dip switch } if RIS=0 then VAL:=1 { In base alla lettura dello switch 1 del dip switch la variabile VAL puo' assumere due diversi valori che corrispondono con l'accensione del primo o dell'ultimo led. } else VAL:=$FFFF; repeat begin SCRITTURA(VAL); delay(RIT); SWC:=LETTURA(PDB); RIS:=SWC and 1; if RIS=0 then VAL:=VAL+1 else VAL:=VAL-1 end; until keypressed; end; SCRITTURA($FFFF); { Permette di mantenere, all'uscita del programma, tutti i led del spenti } read(kbd,TASTO); end.