ME Labs, Inc.
719-520-5323
 
Home:
  Developer Resources:

Programming Clues
    Sample Programs
   
    PICBASIC PRO™
Compiler Manual
    PICBASIC™ Compiler
Manual
    Serin2/Serout2 Modes
    ASCII Character Set
    Number Conversion
    Floating Point
Routines
    PBP Debug Monitor
    Articles and Tutorials

Hardware Clues
    Parts / Vendor List
    PICPROTO™ Boards
    LAB-X1 Docs
    LAB-X2 Docs
    LAB-X20 Docs
    LAB-X3 Docs
    LAB-X4 Docs
    LAB-XUSB Docs
    LAB-XT Docs
     
 

ME Labs, Inc. | 1-719-520-5323 | Example Program - sdfs3.pbp

10/02/08 - PICBASIC PRO 2.50L test program to talk to FAT16 formatted MMC/SD cards with PIC18F4550. This is only a test program that is part of a larger project. The complete fileset with schematic, includes, and details can be found at download: http://melabs.com/resources/samples/pbp/sdfs3.zip
' Name        : sdfs3.pbp
' Compiler    : PICBASIC PRO Compiler 2.6 (PBPL only)
' Assembler   : MPASM
' Target PIC  : PIC16F4550
' Hardware    : Schematic available in http://melabs.com/resources/samples/pbp/sdfs3.zip
' Oscillator  : 20MHz
' Keywords    : SD Card, SD/MMC, FAT16
' Description : 10/02/08 - PICBASIC PRO 2.50L test program to talk to FAT16 
' formatted MMC/SD cards with PIC18F4550.  This is only a test program that 
' is part of a larger project.  The complete fileset with schematic, includes, 
' and details can be found at download: 
' http://melabs.com/resources/samples/pbp/sdfs3.zip


	Define	OSC	20	' 20 MHz oscillator

' Alias PIC pins and registers for SD/MMC card
SD_WE		Var	PORTA.4	' SD card write protect
SD_WE_TRIS	Var	TRISA.4	' SD card write protect direction
SDI		Var	PORTB.0	' SPI data in
SDI_TRIS	Var	TRISB.0	' SPI data in direction
SCL		Var	PORTB.1	' SPI clock
SCL_TRIS	Var	TRISB.1	' SPI clock direction
SD_CS		Var	PORTB.3	' SD card chip select
SD_CS_TRIS	Var	TRISB.3	' SD card chip select direction
SD_CD		Var	PORTB.4	' SD card detect
SD_CD_TRIS	Var	TRISB.4	' SD card detect direction
SDO		Var	PORTC.7	' SPI data out
SDO_TRIS	Var	TRISC.7	' SPI data out direction


' Include the SD/MMC subroutines (found in http://melabs.com/resources/samples/pbp/sdfs3.zip)
	Include "SDFS.PBP"
	SDC_UseHardSPI = TRUE	' Use hardware SSP port for SPI.

	ADCON1 = 15		' All I/O pins digital
	Pause 100

	' FSInit initializes the card and reads all the preliminary information from it
	Gosub FSInit
	Serout2 PORTC.6, 84, ["Init: ", Dec FAT_error, " ", Dec SDC_status, " ", Dec SDC_response, $d, $a]
	If (FAT_error != 0) Then Stop

	' Display card directory
	Gosub FINDfirst		' Find first file on card
	While (FAT_error = 0)
		Serout2 PORTC.6, 84, [Str FAT_FileName\11, $d, $a]
		Gosub FINDnext	' Find next file on card
	Wend

' This section defines a specific short (8.3) filename
'  Note that spaces are use in empty elements and must be upper case for Windows
	FAT_FileName[0] = "T"
	FAT_FileName[1] = "E"
	FAT_FileName[2] = "S"
	FAT_FileName[3] = "T"
	FAT_FileName[4] = "1"
	FAT_FileName[5] = " "
	FAT_FileName[6] = " "
	FAT_FileName[7] = " "
	FAT_FileName[8] = "T"
	FAT_FileName[9] = "X"
	FAT_FileName[10] = "T"

' Set file time to 8:30:10 and date to 1/1/2008
	FAT_seconds = 5
	FAT_minutes = 30
	FAT_hours = 8
	FAT_day = 1
	FAT_month = 1
	FAT_year = 28

' Open a file for write
	FAT_mode = "w"		' Write mode
	Gosub FSfopen		' Open file pointed to by Byte array FAT_FileName
	Serout2 PORTC.6, 84, ["Open for write: ", Dec FAT_error, $d, $a]
	If (FAT_error != 0) Then Stop

' Write to file
	FAT_src[0] = "A"
	FAT_src[1] = "B"
	FAT_src[2] = "C"
	FAT_count = 3
	Gosub FSfwrite
	Serout2 PORTC.6, 84, [ "Write ", Dec FAT_error, $d, $a]
	If (FAT_error != 0) Then Stop

' Close file
	Gosub FSfclose
	Serout2 PORTC.6, 84, [ "Close ", Dec FAT_error, $d, $a]
	If (FAT_error != 0) Then Stop

' Open a file for read
	FAT_mode = "r"		' Read mode
	Gosub FSfopen		' Open file pointed to by Byte array FAT_FileName
	Serout2 PORTC.6, 84, ["Open: ", Dec FAT_error, $d, $a]
	If (FAT_error != 0) Then Stop

' Read and display the whole file
	FAT_count = 1		' Read 1 byte to buffer at a time
	Gosub FSfread
	While (FAT_error = 0)
		Serout2 PORTC.6, 84, [FAT_dest[0]]
		FAT_count = 1	' Read 1 byte to buffer at a time
		Gosub FSfread
	Wend
	Serout2 PORTC.6, 84, [ "Read: ", Dec FAT_error, $d, $a]

' Delete a file
'	Gosub FSremove		' Delete file pointed to by Byte array FAT_FileName
'	Serout2 PORTC.6, 84, ["Remove: ", Dec FAT_error, $d, $a]
'	If (FAT_error != 0) Then Stop

' Rename a file
' FAT_FileName2 is new name
'	FAT_FileName2[0] = "T"
'	FAT_FileName2[1] = "E"
'	FAT_FileName2[2] = "S"
'	FAT_FileName2[3] = "T"
'	FAT_FileName2[4] = "2"
'	FAT_FileName2[5] = " "
'	FAT_FileName2[6] = " "
'	FAT_FileName2[7] = " "
'	FAT_FileName2[8] = "T"
'	FAT_FileName2[9] = "X"
'	FAT_FileName2[10] = "T"
'	Gosub FSrename		' Rename file pointed to by Byte array FAT_FileName
'	Serout2 PORTC.6, 84, ["Rename: ", Dec FAT_error, $d, $a]
'	If (FAT_error != 0) Then Stop

	End

           

Download the program file.