behöver strore data till SD-kortet med hjälp pic16f877

P

piskot

Guest
hej!kan någon hjälpa mig?Jag behöver för att lagra data på ett SD-kort med hjälp pic16f877.behöver jag kortläsare? im nya till den här snälla hjälpa mig med den schematiska.

 
SD-kortet har en SPI liknande gränssnitt, kolla in ansökan anmärkning om massa lagringsenheter från mikrochip webbplats.Innan du börjar med detta projekt, har du också att studera hur man kan lagra data på SD-kort - det görs en sektor i taget, som på din hårddisk, så du behöver också en buffert för att lagra data för åtminstone en del.

 
vi ses
proton pluss compiller manuell
hämta manual
kommandot:

hämta kompilatorn
och användarhandboken till
sonsivri.com
se "att strömmen är tillbaka"
se Rego post "kompilatorer och proton"

_________________________________________
Syntax

Variabel = CF_READ

Översikt

Läs data från ett Compact Flash-kort.

Operatörer
Variabel - en användardefinierad variabel av typen bit, byte, byte array, ord, ord array, dword eller flyta som kommer att inneha det DtA läsa från Compact Flash-kort.
Exempel

"Läs 16-bitars värden från 20 sektorer i ett compact flash-kort och visa i serie

Device = 16F877 "Vi använder en 14-bitars kärna enhet
XTAL = 4

HSERIAL_BAUD = 9600 "Ställ baudtalet för USART seriekonsoll GOM
HSERIAL_RCSTA =% 10010000 "Aktivera serieporten och kontinuerligt få
HSERIAL_TXSTA =% 00100100 "Aktivera överföra och asynkron mode
'------------------------------------------------- ----------------------------------
"CF Card Förklaringar
CF_DTPORT = PORTD "Tilldela CF data port till PORTD
CF_ADPORT = PORTE "Tilldela CF adress hamn till PORTE
CF_WEPIN = PORTC.5 "Tilldela CF WE stift till PORTC.5
CF_CE1PIN = PORTC.0 "Tilldela CF CE1 stift till PORTC.0
CF_RDYPIN = PORTC.4 "Tilldela CF RDY_BSY stift till PORTC.4
CF_OEPIN = PORTC.1 "Tilldela CF OE stift till PORTC.1
CF_RSTPIN = PORTC.3 "Tilldela CF RESET stift till PORTC.3
CF_CD1PIN = PORTA.5 "Tilldela CF CD1 stift till PORTA.5
CF_ADPORT_MASK = False "Ingen avskärmning av adress uppgifter som krävs
CF_READ_WRITE_INLINE = False "Använd subrutiner för CF_READ / CFWRITE

Symbol CF_CD1 = PORTA.5 "Alias de CD1 pin till PORTA.5
'------------------------------------------------- ----------------------------------
"Variabel Förklaringar
Dim DATA_IO som Word ord läsas från CF-kortet
Dim BUFFER_SIZE word "inre motverka byte i sektorn (ie512)
Dim SECTOR_NUMBER som Dword sektorn är av intresse

'------------------------------------------------- ----------------------------------
"Main Program börjar här
Delayms 100
All_Digital = True
CF_Init "Initialisera CF kortets IO linjer
Även CF_CD1 = 1: BEGIVA "Är Card införas?
'------------------------------------------------- ----------------------------------
"Läs 8-bitars värden från sektor 0 till sektor 20 och visa serie i kolumner och rader format
READ_CF:
SECTOR_NUMBER = 0 "Start på sektor 0
"Ställ in CF-kort för att läsa 1 vid en tid i LBA mode
CF_Sector SECTOR_NUMBER, läsa, 1
Upprepa Form en loop, för de sektorer
BUFFER_SIZE = 1
Hserout [ "sektor", december SECTOR_NUMBER, 13]
Upprepa Form en slinga för ord i sektorn
DATA_IO = CF_Read "Läs ett ord från CF-kortet
Hserout [HEX4 DATA_IO ","] "Uppvisning i Hexadecimal
Om BUFFER_SIZE / / 32 = 0 Då Hserout [13] "Kontrollera om raden färdiga
Inc BUFFER_SIZE "Flytta upp ett ord
Till BUFFER_SIZE> 256 "Till alla ord läses
Hserout [Rep "-" \ 95,13] "Dra en linje inom varje sektor
Inc SECTOR_NUMBER "Flytta upp till nästa sektor
Och ställa in CF-kort för behandlingen i LBA mode
CF_Sector SECTOR_NUMBER, LÄS
Till SECTOR_NUMBER> 20 "Till alla sektorer läses
Stopp

Noter

Mängden bytes läses från Compact Card beroende variabeln som användes som uppdraget.dvs variabeln innan equals operatör: --

SMÅTT typ variabel kommer att läsa 1 byte från Compact Flash-kort.
En byte typ variabel kommer också läst 1 byte från Compact Flash-kort.
ETT ORD typ variabel kommer att läsa 2 byte från Compact Flash-kort minst signifikanta byte först (LSB).
En DWORD typ variabel kommer att läsa 4 byte från Compact Flash-kort minst signifikanta byte först (LSB).
En flottörtyp variabel kommer också att läsa 4 byte från Compact Flash-kort i rätt format för en rörlig led variabel.

Tillgång till Compact Flash-minnet är inte samma sak som konventionella minnet.Det finns ingen mekanism för att välja en adress till uppgifterna i fråga.Du kan bara välja sektorn sedan sekventiellt läsa data från kortet.I grund och botten är en motsvarighet till adressen i en vanlig del av minnet, men istället för 1 byte av data, den innehåller 512 bytes.

När det är valt med hjälp av CF_Sector kommando, ett belopp av 512 bytes tillgängliga kan läsas från kortet.När en läsa har skett, Compact Flash-kort automatiskt steg till nästa byte inom sektorn redo för en annan läsa.För att en enkel loop enligt nedan kommer att läsa alla bytes i en bransch:

BUFFER_SIZE = 0
Upprepa Form en slinga för byte i sektorn
DATA_IO = CF_Read "Läs en Byte från CF-kortet
Inc BUFFER_SIZE "Tillväxt i byte mot
Till BUFFER_SIZE = 512 "Till alla Bytes läses

För att extrahera en särskild del av data från en sektor, en liknande slinga kan användas, men med ett villkor som är att avhoppen i rätt position: --

BUFFER_SIZE = 0
Även 1 = 1 "Form en oändlig loop
DATA_IO = CF_Read "Läs en Byte från CF-kortet
Om BUFFER_SIZE = 20 Sen Break "Avsluta när korrekta ståndpunkt
Inc BUFFER_SIZE "Tillväxt i byte mot
BEGIVA "Stäng loop

Strängen ovan kommer att avsluta loop när 20 byte har lästs från kortet.

Naturligtvis Arrays även kan laddas från ett Compact Flash-kort på ett liknande sätt, men kom ihåg, den största storleken på en array i PROTON BASIC är 256 delar.De utdrag nedan visar två möjliga metoder för lastning en array med data som läses från ett Compact Flash-kort.

Dim AR1 [256] som Byte "Skapa en 256 element array
Dim BUFFER_SIZE word "inre motverka byte i sektorn
BUFFER_SIZE = 0
Upprepa Form en slinga för byte i sektorn
AR1 [BUFFER_SIZE] = CF_Read "Läs en Byte från CF-kortet
Inc BUFFER_SIZE "Tillväxt i byte mot
Till BUFFER_SIZE = 256 "Till alla Bytes läses

Stora kedjor som den ovan är bäst anpassade till 16-bitars kärna enheter.Inte bara för att de generellt har mer RAM, men eftersom deras RAM nås mer linjärt och det finns ingen bank gränser när kedjor.Dessutom, genom att gå till några låga register i en 16-bitars kärna enheten är det möjligt att effektivt lägga ut alla 512 bytes från en sektor till 2 kedjor:

Device = 18F452 "Välj en 16-bitars kärna enhet
Dim AR1 [256] som Byte "Skapa en 256 element array
Dim AR2 [256] som Byte "Skapa en annan 256 inslag array
Dim BUFFER_SIZE word "inre motverka byte i sektorn
Dim FSR0 som FSR0L.Word "Kombinera FSR0L / H som en 16-bitars register
FSR0 = Varptr (AR1) Hämta adress AR1 i FSR0L / H
Upprepa Form en slinga för byte i sektorn
POSTINC0 = CF_Read "Läs en Byte från CF-kortet och plats
"Direkt i minnet
och sedan öka till nästa adress i PIC RAM
Inc BUFFER_SIZE "Tillväxt i byte mot
Till BUFFER_SIZE = 512 "Till alla Bytes läses

När ovanstående loop är klar Arrays AR1 och AR2 kommer att hålla data som läses från Compact Flash-kort är sektorn.Naturligtvis behöver du pad ut strängar med lämpliga förklarar och CF_Sector kommando.

Se även

CF_Init
CF_Sector (för en lämplig krets)
CF_Write (för försäkrar

 

Welcome to EDABoard.com

Sponsor

Back
Top