Autor Tema: AYUDA CON EEPROM SPI  (Leído 1536 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado oso

  • PIC10
  • *
  • Mensajes: 3
AYUDA CON EEPROM SPI
« en: 09 de Mayo de 2007, 15:12:24 »
Necesito que me ayuden con un problema de tiempos que tengo con la escritura de una memoria serial spi del tipo 25lc080 aqui les dejo parte del codigo para que lo vean, y por favor que me expliquen en que me estoy equivocando.

EE_WRITE_ENB:
         low  CS
         delayms 5
         shout 
         SSPBUF = WRT_ENB
         gosub Envio_ok
         high  CS
         delayms 5
         return
       
EE_WRITE: 
         low CS
         delayms 5
         SSPBUF = WRT_CMD
         gosub Envio_ok
         SSPBUF = $0
         gosub Envio_ok
         SSPBUF = $0
         gosub Envio_ok
         SSPBUF = "X"
         gosub Envio_ok
         high CS
         return

ENVIO_OK:
         IF SSPIF = 0 Then envio_ok   
    SSPIF = 0
    delayms 5
         return   

Desconectado oso

  • PIC10
  • *
  • Mensajes: 3
Re: AYUDA CON EEPROM SPI
« Respuesta #1 en: 15 de Mayo de 2007, 16:08:23 »
 :-/ :-/ :-/Un ejemplito que funciona, igual RARAAVIS ha trabajado un poco mas y lo ha presentado mejor :-/ :-/ :-/

Include "PROTON18_20.INC"
XTAL = 4

DECLARE SHIFT_DELAYUS 5
'******************* VARIABLES Y CONSTANTES **********************
       
DIM     WRT_ENB AS     byte
DIM     WRT_CMD AS     byte
DIM     WRT_DIS AS     byte
DIM     RD_CMD  AS     byte
dim     HOLA [4] AS   BYTE
dim     i       AS     BYTE
DIM     LOW_ADDR AS     BYTE
DIM     HIGH_ADDR AS     BYTE

Symbol CS_  = PORTC.0                      ' Chip select pin
Symbol SCK_ = PORTC.3                      ' Clock pin
Symbol SDI_   = PORTC.4                      ' Data in pin
Symbol SDO_   = PORTC.5                      ' Data out pin

WRT_ENB = %00000110
WRT_CMD = %00000010
WRT_DIS = %00000100
RD_CMD  = %00000011

HOLA
  • = "A"

HOLA [1] = "B"
HOLA [2] = "C"
HOLA [3] = "D"


      Dim Addr as WORD                          ' Address
      DIm B0   as Byte                          ' Data

       Delayms 500                                       ALL_DIGITAL = TRUE                           ' Set PORTA and PORTE to digital
       high CS_                                   ' Chip select inactive       
       Delayms 5                                ' Wait for LCD to start up
       Gosub eewriteen                          ' Enable SEEPROM writes
       HIGH_ADDR = 0
       LOW_addr = 0                     ' B0 is data for SEEPROM
       gosub eewrite                       ' Write to SEEPROM

loop1: Goto loop1
 
'******* Subroutine to read data from addr in serial EEPROM ********
eeread:
            CS_ = 0                                   
            Shout sDo_, sCK_, MSBFIRST, [RD_CMD\8, LOW_ADDR\8]   
            Shin sDi_, sCK_, MSBPOST_H, [B0]              
            CS_ = 1                                   
            Return
 
'************** Subroutina para escribir EEPROM ******************
eewrite:
           CS_ = 0                                     
           Shout sDo_, sCK_, MSBFIRST, [WRT_CMd, high_addr, LOW_ADDR, STR HOLA] ' Send write command, address and data
           CS_ = 1
           delayms 5                                  

'************* Subrutina que habilita escritura de EEPROM *************

eewriteen:
               CS_ = 0                                              
               Shout sDo_, sCK_, MSBFIRST, [WRT_ENB]
               CS_ = 1                                   
               Return
     
End
« Última modificación: 16 de Mayo de 2007, 11:31:10 por oso »