' ********************************************************************** ' ** Programma: g51ppo.BAS - Versione : 1.3 - 16 aprile 2003 ** ' ** Compilatore : BASCOM 8051 DEMO, (IDE e LIB V.2.0.6.0) ** ' ** Scheda : K51-AVR tramite GMB HR84 e GMM 5115 ** ' ** 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 demo permette di pilotare una periferica I2C BUS a bordo della K51-AVR, ' PCF8574, attraverso il modulo mini-BLOCK GMB HR84 ed un mini modulo grifo(r). ' Il PCF874 e' un I/O expander che permette di pilotare 8 linee digitali TTL sia ' in ingresso che in uscita, tutte le operazioni di lettura e scrittura ' avvengono tramite l'interfaccia seriale sincrona I2C BUS. ' Il demo attiva alternativamente una linea alla volta, creando il classico ' scorrimento di un bit a destra e a sinistra, e scrive 'out' sui display a 7 ' segmenti della K51-AVR per indicare il funzionamento del demo. ' Prima di compilare selezionare nel menu Option/Compiler/Misc/ : ' Byte End 5F. ' ' ' ' 05.06.2000 by Adriano Pedrielli (per la sola K51) ' ' 16.04.2003 by Graziano Gaiba ' ' '*********************************************************************** ' '****************** Direttive del compilatore ************************** ' $regfile = "grifo_mm.dat" $romstart = &H0 ' indirizzo di partenza del codice ' macchina per FLASH $ramstart = &H0 ' indirizzo di partenza della area ' dati $ramsize = &H100 ' pongo a 256 bytes la area dati $crystal = 14745600 ' frequenza di clock del microcontrollore $baud = 19200 ' velocità di comunicazione RS-232 '$large ' indirizzamento a 16 bit $map Config Sda = P2.0 ' I2C serial DATA Config Scl = P2.1 ' I2C serial CLK ' ' ****************** Dichiarazione delle costanti *********************** ' Dim Saa1064 As Const &H38 ' Slave address SAA1064 Dim Wsaa1064 As Const &H70 ' Slave address SAA1064 in Write Dim Rsaa1064 As Const &H71 ' Slave address SAA1064 in Read ' ***************** Elenco indirizzi per Saa1064 *********************** Dim Ctb As Const 0 ' Ind. Control byte Dim Dig1 As Const 1 ' Ind. Digit 1 Dim Dig2 As Const 2 ' Ind. Digit 2 Dim Dig3 As Const 3 ' Ind. Digit 3 Dim Dig4 As Const 4 ' Ind. Digit 4 ' ********************************************************************** ' Commentare la dichiarazione del componente non usato ' 'Dim Pcf8574 As Const &H3C ' Slave address PCF8574A 'Dim Wpcf8574 As Const &H78 ' Slave address PCF8574A in Write 'Dim Rpcf8574 As Const &H79 ' Slave address PCF8574A in Read Dim Pcf8574 As Const &H24 ' Slave address PCF8574P Dim Wpcf8574 As Const &H48 ' Slave address PCF8574P in Write Dim Rpcf8574 As Const &H49 ' Slave address PCF8574P in Read ' '****************** Dichiarazione delle variabili ********************** ' Dim Pout As Byte ' valore per le linee di uscita Dim X As Byte ' uso generico Dim Valore As Byte ' valore di conteggio ' '****************** Dichiarazione delle procedure ********************** ' Declare Sub Iniz ' Inizializzazione periferiche ' '************************* Programma main ****************************** ' Main: ' Ritardo Assestamento segnali Waitms 1 Print Chr(12) Print "Questo demo e' stato progettato per funzionare solo su una GMM 5115" Print "Proseguite nell'esecuzione solo se avete la scheda giusta!" Print "Se intendete proseguire, premete un tasto" Do Valore = Inkey Loop Until Valore <> 0 Call Iniz ' inizializzazioni Do Valore = 1 ' valore di partenza For X = 1 To 7 ' inizializzo il ciclo Pout = Not Valore ' complemento in valore I2cstart I2cwbyte Wpcf8574 I2cwbyte Pout I2cstop ' I2csend Wpcf8574 , Pout ' setto le uscite Rotate Valore , Left ' shift dei bit a sinistra Waitms 255 ' ritardo Next X For X = 1 To 7 ' inizializzo il ciclo Pout = Not Valore ' complemento in valore I2cstart I2cwbyte Wpcf8574 I2cwbyte Pout I2cstop ' I2csend Wpcf8574 , Pout ' setto le uscite Rotate Valore , Right ' shift dei bit a destra Waitms 255 ' ritardo Next X Loop End ' '************************ Fine del programma *************************** ' ' '**************************** Procedure ******************************** ' ' ******************* Inizializzazione delle periferiche ***************** ' Questa procedura esegue tutte le inizializzazioni del sistema. ' Parametri: ' Ingresso : nulla ' Uscita : nulla ' ************************************************************************ ' Sub Iniz ' Inizializzazione periferiche Do I2creceive Rsaa1064 , Valore ' leggo il registro di stato Loop Until Valore = 0 ' attendo accensione SAA1064 I2cstart ' sequenza di Start per I2CBUS I2cwbyte Wsaa1064 ' comunico lo Slave address I2cwbyte Ctb ' Punto al registro di controllo I2cwbyte &B00100111 ' bit0 =1 dynamic mode ' bit1 =1 digit 1+3 not blanked ' bit2 =1 digit 2+4 not blanked ' bit3 =0 no test segment ' bit4 =0 no 3mA segment current ' bit5 =1 6mA segment current ' bit6 =0 no 12mA segment current ' bit7 =0 indifferente I2cwbyte 92 ' scrive DY1 "o" I2cwbyte 28 ' scrive DY2 "u" I2cwbyte 120 ' scrive DY3 "t" I2cwbyte 0 ' scrive DY4 off I2cstop End Sub '