{ ********************************************************************** ** Programma: S1DEB11.PAS Versione: 1.1-17Febbraio 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 far scorrere i led del PORT A e PORT C in direzioni opposte in modo sequenziale. In particolare i led del port A scorrono da sinistra verso destra mentre quelli del port C da destra verso sinistra. Nel punto di incontro dei due led il buzzer della DEB01 emette un piccolo suono; perchŠ questo avvenga Š necessario settare il j10 della scheda DEB01 in posizione 2-3. 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 S1DEB11; {$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 INDIRIZZO:BYTE; STATO:byte; TASTO:char; OUTPDA:integer; OUTPDC:integer; procedure INIZIALIZZAZIONE; { Inizializzazione del registro di controllo dell' 82C55 } begin port[CNT]:=130; end; procedure SCRITTURA (STATO:byte; INDIRIZZO:byte); { Scrittura sul Port A e Port C } begin port[INDIRIZZO]:=STATO; end; procedure BUZZER; { Questa procedura serve per produrre un'onda quadra che sia in grado di far suonare il buzzer } var BIT:byte; INDICE:integer; RITARDO:integer; begin for INDICE:=1 to 500 do begin BIT:=OUTPDC and 127; { Leggo lo stato della variabile OUTPDC e rendo sensibile solo il bit 7 in questo modo genero un'onda quadra in grado di far suonare il buzzer.} SCRITTURA(255-BIT,PDC); for RITARDO:=1 to 8 do; BIT:=OUTPDC or 128; { Leggo lo stato di OUTPDC cioŠ dei led e faccio variare solo il bit 7 ponendolo sempre a 1. } SCRITTURA(255-BIT,PDC); for RITARDO:=1 to 8 do; end; end; begin {programma principale } clrscr; INIZIALIZZAZIONE; gotoxy(10,3); writeln('VISUALIZZAZIONE DELLO SCORRIMENTO DEI LED SUI PORT A-C IN CORSO'); gotoxy(25,4); write('Premere un tasto per uscire'); begin OUTPDA:=1; OUTPDC:=128; repeat begin SCRITTURA(255-OUTPDA,PDA); SCRITTURA(255-OUTPDC,PDC); delay(RIT); if OUTPDA=128 then OUTPDA:=1 { Tramite questo comando riesco ad accendere l'ultimo led e il primo in sequenza. In sostanza gli estremi devo riportarli a mano e non posso utilizzare lo shl. } else OUTPDA:=OUTPDA shl 1; { I led interni vengono schiftati verso sinistra. } if OUTPDC=1 then begin BUZZER; OUTPDC:=128; end { E' possibile accendere in sequenza il primo e l'ultimo led. E' necessario collegarli in questa modo in quanto non e' possibile schiftarli. } else OUTPDC:=OUTPDC shr 1; { I led vengono schiftati verso destra } end; until keypressed; end; SCRITTURA(255,PDA); SCRITTURA(255,PDC); { Permette di mantenere, all'uscita del programma, tutti i led spenti } read(kbd,TASTO); end.