' ********************************************************************** ' ** Programma: S1DEB7 - Versione : 1.1 - 2 Marzo 1999 ** ' ** Compilatore : BASCOM LT, (IDE V.1.20, LIB V.1.27) ** ' ** Scheda : GPC(r) F2 ** ' ** 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: Enea Tassinari ** ' ********************************************************************** ' ' Questo programma permette di visualizzare l'accensione di un led in una ' direzione o nell'altra a seconda della posizione dello switch 1 del dip ' switch. ' Per facilitare la visualizzazione dello stato delle linee è necessario ' collegare con un cavo flat a 20 poli, il connettore CN2, della GPC(r)F2, ' con il connettore CN1 della TIO 16, oppure 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 = 11059200 ' frequenza di clock del microcontrollore $baud = 9600 ' velocità di comunicazione RS-232 $large ' indirizzamento a 16 bit ' '****************** Dichiarazione delle costanti *********************** ' Dim Cnt As Const &HFA03 ' registro di controllo e comando del 82c55 Dim Pda As Const &HFA00 ' registro dati del portA Dim Pdb As Const &HFA01 ' registro dati del portB Dim Pdc As Const &HFA02 ' registro dati del portC ' '****************** Dichiarazione delle procedure ********************** ' Declare Sub Scritt_port(stato As Integer)' procedura per la scrittura sui port A e C ' '****************** Dichiarazione delle variabili ********************** ' Dim Temp As Word ' variabile temporanea per le operazioni aritmetiche Dim Stato As Integer ' variabile per la procedura scritt_port Dim Valore As Word ' variabile di scrittura sui port Dim Bytel As Word ' variabile per la procedura lett_port Dim Byteh As Word ' variabile per la procedura lett_port Dim Lett_pdb As Byte ' variabile per la lettura del port B Dim Val_pdb As Byte ' variabile per il mascheramento del port B ' '************************* Programma main ****************************** ' Main: Waitms 1 ' ritardo per assestamento segnali Out Cnt , 130 ' programmo modo 0, portA output e portB in input Out Pda , 255 ' metto tutti i led del port A spenti Out Pdc , 255 ' metto tutti i led del port C spenti Print Print " VISUALIZZAZIONE DELLO SCORRIMENTO DI UN LED IN CORSO " Print Scritt_port (&HFFFF) ' metto tutti i led spenti in fase iniziale Lett_pdb = Inp(pdb) ' lettura dello stato del port B Val_pdb = Lett_pdb And 1 ' rendo sensibile solo lo switch 1 del dip switch If Val_pdb = 0 Then ' Se la lettura è uguale a zero metto la variabile valore a uno Valore = 1 Else Valore = &H8000 ' Se la lettura è uguale a uno metto la variabile a 8000H End If Do Temp = &HFFFF - Valore ' Sottraggo 255 al contenuto di valore Scritt_port (temp) ' scrivo sui port A e C il contenuto della variabile temporanea Waitms 100 ' introduco un ritardo di 100 ms Lett_pdb = Inp(pdb) ' Leggo lo stato del dip switch Val_pdb = Lett_pdb And 1 ' Rendo sensibile solo lo switch 1 If Val_pdb = 0 Then ' leggo lo stato del port B If Valore = &H08000 Then ' Dopo che si è acceso lo ultimo led riaccendo il primo Valore = 1 ' accendo il primo led Else Rotate Valore , Left ' shifto i bit centrali End If Else If Valore = 1 Then ' dopo che si è acceso il primo led accendo lo ultimo Valore = &H8000 ' accendo il led finale Else If Valore = 256 Then ' compio la accensione in sequenza del led corrispondente a 256, Valore = 128 ' con quello corrispondente a 128 Else Rotate Valore , Right'shifto i bit centrali verso destra End If End If End If Loop ' il programma si ferma se spingo un tasto che ha carattere maggiore di 48 End ' '************************ Fine del programma *************************** ' ' '**************************** Procedure ******************************** ' ' Procedura per la scrittura dei port A e C tramite lo utilizzo di un unica variabile di tipo ' integer. ' dati d'ingresso:stato = valore che immetto nei port ' dati d'uscita:nessuno Sub Scritt_port (stato As Integer) Bytel = Stato And &HFF ' maschero il byte alto Byteh = Stato And &HFF00 ' maschero il byte basso Byteh = Byteh / 256 ' maschero il byte basso e metto il byte alto come se fosse basso Out Pda , Bytel ' scrivo sul port A il contenuto della variabile bytel Out Pdc , Byteh ' scrivo sul port C il contenuto della variabile byteh End Sub '