Newsgroup: it.hobby.elettronica.digitale
Titolo: 93C64 come si programma ???

Io ci sto provando dalla parallela del pc ma niente
Seguo il datasheet msa ev. sbaglio qlcsa
Grazie a chi  può uiutarmi
Alex_69

Vuoi dire 93C46 ?
Di seguito un prg in basic che ho trovato su 
www.elflash.com
 (Elettronica
Flash).
Ciao.
--
Enzo B.
b...@iol.it
http://www.geocities.com/SiliconValley/Horizon/9129
'---------------------------------------------------------------------------
-----------------------------------------------------
' PROGRAMMA PER LA GESTIONE DELLE EEPROM SERIALI MICROWIRE
' tipo 93C06, 93C46.
' By Flavio Falcinelli - Settembre 1998 -
'---------------------------------------------------------------------------
-----------------------------------------------------
 p% = &H3BC    'Indirizzo della porta parallela
 cin% = p% + 1    'Indirizzo dei segnali di controllo di input
 cout% = p% + 2    'Indirizzo dei segnali di controllo di output
 ORG% = 1
 OUT p%, 1 + 16 * ORG%  'Alimentazione EEPROM e pin ORG=1
      '(organizzazione memoria con dati a 16 bit)
 DIM AA%(20)    'Vettore degli indirizzi di memoria
 DIM DD%(20)    'Vettore dei dati
 DIM bit%(20)    'Vettore dei dati letti dalla EEPROM
 Start% = 1    'START bit=1
 Clock% = 1    'Fronte di salita del clock
 CS% = 1    'Segnale CS (chip select)
 CLS
 LOCATE 2, 10: PRINT "Scegli le seguenti opzioni:"
 LOCATE 4, 10: PRINT "1) READ"
 LOCATE 5, 10: PRINT "2) WRITE"
5 LOCATE 5, 25: INPUT flag%
  IF (flag% <> 1) AND (flag% <> 2) THEN GOTO 5
'---------------------------------------------------------------------------
-----------------------------------------------------
' Definisce i comandi di lettura e di scrittura
'
 IF flag% = 1 THEN a% = 1: B% = 0 'Opcode READ
 IF flag% = 2 THEN a% = 0: B% = 1 'Opcode WRITE
'---------------------------------------------------------------------------
-----------------------------------------------------
' Seleziona l'indirizzo di lettura/scrittura
'
 FOR i% = 0 TO 5
6  LOCATE i% + 7, 10
  PRINT "Bit A"; i%; "dell'indirizzo = ";
  INPUT AA%(i%)
  IF (AA%(i%) <> 0) AND (AA%(i%) <> 1) THEN GOTO 6
 NEXT i%
'---------------------------------------------------------------------------
-----------------------------------------------------
' Stabilisce il dato (parola a 16 bit) da scrivere nella locazione
' all'indirizzo precedentemente selezionato.
'
 IF flag% = 2 THEN
  CLS
  LOCATE 5, 10: PRINT "Dato da scrivere:"
  FOR i% = 0 TO 15
20   LOCATE i% + 7, 10
   PRINT "bit D"; i%; "  = ";
   INPUT DD%(i%)
   IF (DD%(i%) <> 0) AND (DD%(i%) <> 1) THEN GOTO 20
  NEXT i%
 END IF
'---------------------------------------------------------------------------
-----------------------------------------------------
 CLS
'---------------------------------------------------------------------------
-----------------------------------------------------
' Lancia il comando ENABLE WRITE (abilitazione alla scrittura)
'
 DIM EW%(20)
 EW%(2) = 0: EW%(3) = 0: EW%(4) = 1: EW%(5) = 1
 EW%(6) = 1: EW%(7) = 1: EW%(8) = 1: EW%(9) = 1
 IF flag% = 2 THEN
  OUT p%, 1 + ORG% * 16
  GOSUB 100
  OUT p%, 1 + CS% * 2 + ORG% * 16
  GOSUB 100
  OUT p%, 1 + CS% * 2 + Start% * 4 + ORG% * 16
  GOSUB 100
  OUT p%, 1 + CS% * 2 + Start% * 4 + Clock% * 8 + ORG% * 16
  GOSUB 100
  FOR i% = 2 TO 9
   OUT p%, 1 + CS% * 2 + EW%(i%) * 4 + ORG% * 16
   GOSUB 100
   OUT p%, 1 + CS% * 2 + EW%(i%) * 4 + Clock% * 8 + ORG% * 16
   GOSUB 100
  NEXT i%
 END IF
'---------------------------------------------------------------------------
-----------------------------------------------------
' Invia il bit di start ed il comando (opcode) relativo all'operazione
' di lettura (A=1, B=0) o di scrittura (A=0, B=1).
'
 OUT p%, 1 + ORG% * 16
 GOSUB 100
 OUT p%, 1 + CS% * 2 + ORG% * 16
 GOSUB 100
 OUT p%, 1 + CS% * 2 + Start% * 4 + ORG% * 16
 GOSUB 100
 OUT p%, 1 + CS% * 2 + Start% * 4 + Clock% * 8 + ORG% * 16
 GOSUB 100
 OUT p%, 1 + CS% * 2 + a% * 4 + ORG% * 16   'Opcode
 GOSUB 100
 OUT p%, 1 + CS% * 2 + a% * 4 + Clock% * 8 + ORG% * 16 'Opcode
 GOSUB 100
 OUT p%, 1 + CS% * 2 + B% * 4 + ORG% * 16   'Opcode
 GOSUB 100
 OUT p%, 1 + CS% * 2 + B% * 4 + Clock% * 8 + ORG% * 16 'Opcode
 GOSUB 100
'---------------------------------------------------------------------------
-----------------------------------------------------
' Invia l'indirizzo (organizzazione memoria EEPROM:
' parole di 16 bit ciascuna).
'
 FOR i% = 5 TO 0 STEP -1
  OUT p%, 1 + CS% * 2 + AA%(i%) * 4 + ORG% * 16
  GOSUB 100
  OUT p%, 1 + CS% * 2 + AA%(i%) * 4 + Clock% * 8 + ORG% * 16
  GOSUB 100
 NEXT i%
'---------------------------------------------------------------------------
-----------------------------------------------------
' Invia la sequenza di bit che compongono il dato da scrivere.
'
 IF flag% = 2 THEN
  FOR i% = 15 TO 0 STEP -1
   OUT p%, 1 + CS% * 2 + DD%(i%) * 4 + ORG% * 16
   GOSUB 100
   OUT p%, 1 + CS% * 2 + DD%(i%) * 4 + Clock% * 8 + ORG% * 16
   GOSUB 100
  NEXT i%
  OUT p%, 1 + ORG% * 16    'CS basso
  GOSUB 100
  OUT p%, 1 + Clock% * 8 + ORG% * 16   'Clock alto
  GOSUB 100
  OUT p%, 1 + CS% * 2 + Clock% * 8 + ORG% * 16
  GOSUB 100
 END IF
'---------------------------------------------------------------------------
-----------------------------------------------------
' Lancia il comando DISABLE WRITE
'
 DIM DW%(20)
 DW%(2) = 0: DW%(3) = 0: DW%(4) = 0: DW%(5) = 0
 DW%(6) = 1: DW%(7) = 1: DW%(8) = 1: DW%(9) = 1
 IF flag% = 2 THEN
  OUT p%, 1
  GOSUB 100
  OUT p%, 1 + CS% * 2 + ORG% * 16
  GOSUB 100
  OUT p%, 1 + CS% * 2 + Start% * 4 + ORG% * 16
  GOSUB 100
  OUT p%, 1 + CS% * 2 + Start% * 4 + Clock% * 8 + ORG% * 16
  GOSUB 100
  FOR i% = 2 TO 9
   OUT p%, 1 + CS% * 2 + DW%(i%) * 4 + ORG% * 16
   GOSUB 100
   OUT p%, 1 + CS% * 2 + DW%(i%) * 4 + Clock% * 8 + ORG% * 16
   GOSUB 100
  NEXT i%
 END IF
'---------------------------------------------------------------------------
-----------------------------------------------------
 IF flag% = 2 THEN GOTO 50
'---------------------------------------------------------------------------
-----------------------------------------------------
' Acquisisci il dato letto dalla cella di memoria precedentemente
indirizzata.
'
 FOR i% = 15 TO 0 STEP -1
  OUT p%, 1 + CS% * 2 + ORG% * 16
  GOSUB 100
  OUT p%, 1 + CS% * 2 + Clock% * 8 + ORG% * 16
  GOSUB 100
  bit%(i%) = INP(cin%)
  GOSUB 100
 NEXT i%
 OUT p%, 1 + ORG% * 16
 GOSUB 100
'---------------------------------------------------------------------------
-----------------------------------------------------
' Visualizza il dato letto
'
 FOR i% = 0 TO 15
  IF bit%(i%) = 119 THEN bitdato% = 0
  IF bit%(i%) = 127 THEN bitdato% = 1
  PRINT "bit D"; i%; " = "; bitdato%
 NEXT i%
'---------------------------------------------------------------------------
-----------------------------------------------------
50 OUT p%, 0    'Toglie l'alimentazione alla EEPROM
 END     'Fine del programma.
'
'---------------------------------------------------------------------------
-----------------------------------------------------
'---------------------------------------------------------------------------
-----------------------------------------------------
' Subroutine di ritardo (da definire in funzione del PC disponibile).
'
100 FOR t% = 1 TO 1000: NEXT t%: RETURN
'---------------------------------------------------------------------------
-----------------------------------------------------