I am trying to use an external SRAM in which the PIC will send 16 bit data addresses to write and read to the SRAM.
I use PORTC as data in and data out for the SRAM.
I use PORTD and PORTE and my address bits for the SRAM.
My big concern here is am I doing the correct read and write operations.
My SRAM is here... http://download.siliconexpert.com/p.../alcm/sram/as6c4008 feb 2007 with tsop 11.pdf
I am using this format to write to the SRAM
WRITE CYCLE 2 (CE# Controlled) (1,2,5,6)
I am using this format to read the SRAM
READ CYCLE 1 (Address Controlled) (1,2)
Here is my entire code so you can have a better scope of what I am trying to do.
I use PORTC as data in and data out for the SRAM.
I use PORTD and PORTE and my address bits for the SRAM.
My big concern here is am I doing the correct read and write operations.
My SRAM is here... http://download.siliconexpert.com/p.../alcm/sram/as6c4008 feb 2007 with tsop 11.pdf
I am using this format to write to the SRAM
WRITE CYCLE 2 (CE# Controlled) (1,2,5,6)
Rich (BB code):
movlw B'00000011' ;set WE and CE pins and make #OE Low even though it doesnt matter
movwf PORTA ;PORTA holds WE and CE pins
movff addressL,PORTD ;place low bits of address into PORTD
movff addressH,PORTE ;place high bits of address into PORTE
bcf PORTA,WE ;make WE low
bcf PORTA,CE ;after WE low make CE low also
movf value,W ;wait cycle so data out doesnt affect anything
movwf PORTC ;load data into address location
READ CYCLE 1 (Address Controlled) (1,2)
Rich (BB code):
clrf PORTC
setf TRISC
movlw B'00000001' ;setting up ram reading OE and CE is low and WE is high
movwf PORTA
Rich (BB code):
bsf OSCCON,3 ;set up external quartz crystal for 64MHz clock speed
;clock bits
clrf PORTA
clrf LATA
clrf TRISA
;data bits
clrf PORTC
clrf LATC
clrf TRISC
;low address bits
clrf PORTD
clrf LATD
clrf TRISD
;high address bits
clrf PORTE
clrf LATE
clrf TRISE
clrf addressL
clrf addressH
clrf value
;ram should store binary 0-255
ramloop
movlw B'00000011' ;set WE and CE pins and make #OE Low even though it doesnt matter
movwf PORTA ;PORTA holds WE and CE pins
movff addressL,PORTD ;place low bits of address into PORTD
movff addressH,PORTE ;place high bits of address into PORTE
bcf PORTA,WE ;make WE low
bcf PORTA,CE ;after WE low make CE low also
movf value,W ;wait cycle so data out doesnt affect anything
movwf PORTC ;load data into address location
incf value ;increment data value
incf addressL ;increment address
bz ramdone ;if we previously loaded address 0xFF we need to end
goto ramloop ;and repeat
ramdone
clrf PORTC
setf TRISC
movlw B'00000001' ;setting up ram reading OE and CE is low and WE is high
movwf PORTA
movlw 0xFF
movwf addressL
funloop
movff addressL,PORTD
incf addressL
goto funloop