* Routine di lettura e scrittura su EEPROM 93C06 con 68HC705C8 * Base tempi con quarzo esterno da 4MHz - Bus interno a 2MHz * Pin Out di connessione: * 68HC705C8 KM93C06 * 6,PORTC DataOUT (pin4) * 5,PORTC DataIN (pin3) * 4,PORTC SK (pin2) * 3,PORTC CS (pin1) * Le prime due locazioni EEprom contengono "OK" se la memoria è già stata inizializzata * In caso contrario contengono dati casuali ed il programmatore può decidere una strategia * di lettura alternativa PROMCYHI EQU $A0 ;CODICE TEST MEMORIA VERGINE PROMCYLO EQU $A1 ; IDEM STARTRAM EQU $A0 ;INIZIO RAM DATI STARTUP - FINE $BF PORTA EQU $00 PORTB EQU $01 PORTC EQU $02 PORTD EQU $03 DDRA EQU $04 DDRB EQU $05 DDRC EQU $06 DDRD EQU $07 PROMDAT EQU $50 ;DATI TEMPORANEI PER EEPROM XTEMP EQU $51 ;TEMPORANEO PER REG. INDICE X ATEMP EQU $52 ;TEMPORANEO PER ACCUMULATORE ***************************************************************** * SUB SCRITTURA DATI IN EEPROM * * I DATI DA SCRIVERE SONO IN RAM DA STARTRAM PER 32 LOCAZ. * * LOC. PROMDAT CONTIENE IL DATO TEMPORANEO DA INVIARE * ***************************************************************** PROMWRITE SEI LDA #'O' STA PROMCYLO LDA #'K' STA PROMCYHI LDA #$30 ;COMANDO EW-ENABLE STA PROMDAT BSET 3,PORTC ;CS = 1 BSET 5,PORTC ;DI = 1 ( START BIT ) JSR WAITCLK JSR PROMSEND BCLR 3,PORTC JSR WAITCLK LDA #$20 ;COMANDO ERASE ALL STA PROMDAT BSET 3,PORTC ;CS = 1 BSET 5,PORTC ;DI = 1 ( START BIT ) JSR WAITCLK JSR PROMSEND BCLR 3,PORTC JSR WAIT30MS CLRX CLR Y PROMWRA LDA Y ORA #$40 ;COMANDO WRITE AGGIUNTO AD INDIR. STA PROMDAT BSET 3,PORTC ;CS = 1 BSET 5,PORTC ;DI = 1 ( START BIT ) JSR WAITCLK JSR PROMSEND LDA STARTRAM,X ;INVIO DATI PRIMO BYTE STA PROMDAT JSR PROMSEND INCX LDA STARTRAM,X ;INVIO DATI SECONDO BYTE STA PROMDAT JSR PROMSEND BCLR 3,PORTC ;CS = 0 JSR WAIT30MS INC Y INCX CPX #$20 ;END A FINE RAM BLO PROMWRA CLR PROMDAT ;COMANDO EW-DISABLE BSET 3,PORTC ;CS = 1 BSET 5,PORTC ;DI = 1 ( START BIT ) JSR WAITCLK JSR PROMSEND BCLR 3,PORTC BCLR 5,PORTC JSR WAITCLK CLI RTS *********************************************** * SUB RITARDO 30 mS PER TEMPO SCRITTURA PROM * *********************************************** WAIT30MS STA ATEMP STX XTEMP LDA #$27 ;0.768 mS x 39 CICLI WAIT30A CLRX WAIT30B DECX BNE WAIT30B DECA BNE WAIT30A LDA ATEMP LDX XTEMP RTS ************************************ * SUB INVIO UN BYTE SU PROM INPUT * ************************************ PROMSEND BRCLR 7,PROMDAT,PROM7A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 7 PROMDAT BRA PROM7B PROM7A BCLR 5,PORTC PROM7B JSR WAITCLK BRCLR 6,PROMDAT,PROM6A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 6 PROMDAT BRA PROM6B PROM6A BCLR 5,PORTC PROM6B JSR WAITCLK BRCLR 5,PROMDAT,PROM5A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 5 PROMDAT BRA PROM5B PROM5A BCLR 5,PORTC PROM5B JSR WAITCLK BRCLR 4,PROMDAT,PROM4A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 4 PROMDAT BRA PROM4B PROM4A BCLR 5,PORTC PROM4B JSR WAITCLK BRCLR 3,PROMDAT,PROM3A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 3 PROMDAT BRA PROM3B PROM3A BCLR 5,PORTC PROM3B JSR WAITCLK BRCLR 2,PROMDAT,PROM2A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 2 PROMDAT BRA PROM2B PROM2A BCLR 5,PORTC PROM2B JSR WAITCLK BRCLR 1,PROMDAT,PROM1A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 1 PROMDAT BRA PROM1B PROM1A BCLR 5,PORTC PROM1B JSR WAITCLK BRCLR 0,PROMDAT,PROM0A BSET 5,PORTC ;DI = 0 OPP. 1 COME BIT 0 PROMDAT BRA PROM0B PROM0A BCLR 5,PORTC PROM0B JSR WAITCLK RTS ********************************************************* * SUB GENERA IMPULSO DI CLOCK 25uS OFF + 25uS ON * ********************************************************* WAITCLK STA ATEMP STX XTEMP LDA #$08 ;2 x 0.5 uS WCLKA DECA BNE WCLKA BSET 4,PORTC LDA #$08 WCLKB DECA BNE WCLKB BCLR 4,PORTC LDA ATEMP LDX XTEMP RTS ************************************************************************* * SUB LETTURA DATI DA EEPROM VERSO RAM DA STARTRAM PER 32 LOCAZ. * * LOC. PROMDAT CONTIENE IL DATO TEMPORANEO DA TRASFERIRE * ************************************************************************* PROMREAD SEI CLRX CLR Y PROMRDA LDA Y ORA #$80 ;COMANDO READ AGGIUNTO AD INDIR. STA PROMDAT BSET 3,PORTC ;CS = 1 BSET 5,PORTC ;DI = 1 ( START BIT ) JSR WAITCLK JSR PROMSEND BCLR 5,PORTC JSR PROMREC LDA PROMDAT ;RECOVERY PRIMO BYTE STA STARTRAM,X JSR PROMREC INCX LDA PROMDAT ;RECOVERY SECONDO BYTE STA STARTRAM,X BCLR 3,PORTC ;CS = 0 INC Y INCX CPX #$20 ;END A FINE RAM BLO PROMRDA CLI RTS ******************************************** * SUB LETTURA DI UN BYTE DA PROM OUTPUT * ******************************************** PROMREC JSR WAITCLK BRCLR 6,PORTC,PREC7A BSET 7,PROMDAT ;BIT 7 PROMDAT = 0 OPP. 1 COME DO BRA PREC7B PREC7A BCLR 7,PROMDAT PREC7B JSR WAITCLK BRCLR 6,PORTC,PREC6A BSET 6,PROMDAT ;BIT 6 PROMDAT = 0 OPP. 1 COME DO BRA PREC6B PREC6A BCLR 6,PROMDAT PREC6B JSR WAITCLK BRCLR 6,PORTC,PREC5A BSET 5,PROMDAT ;BIT 5 PROMDAT = 0 OPP. 1 COME DO BRA PREC5B PREC5A BCLR 5,PROMDAT PREC5B JSR WAITCLK BRCLR 6,PORTC,PREC4A BSET 4,PROMDAT ;BIT 4 PROMDAT = 0 OPP. 1 COME DO BRA PREC4B PREC4A BCLR 4,PROMDAT PREC4B JSR WAITCLK BRCLR 6,PORTC,PREC3A BSET 3,PROMDAT ;BIT 3 PROMDAT = 0 OPP. 1 COME DO BRA PREC3B PREC3A BCLR 3,PROMDAT PREC3B JSR WAITCLK BRCLR 6,PORTC,PREC2A BSET 2,PROMDAT ;BIT 2 PROMDAT = 0 OPP. 1 COME DO BRA PREC2B PREC2A BCLR 2,PROMDAT PREC2B JSR WAITCLK BRCLR 6,PORTC,PREC1A BSET 1,PROMDAT ;BIT 1 PROMDAT = 0 OPP. 1 COME DO BRA PREC1B PREC1A BCLR 1,PROMDAT PREC1B JSR WAITCLK BRCLR 6,PORTC,PREC0A BSET 0,PROMDAT ;BIT 0 PROMDAT = 0 OPP. 1 COME DO BRA PREC0B PREC0A BCLR 0,PROMDAT PREC0B RTS