Sima LCD 20 * 4-essel el fog ez boldogulni?
 
  
Kód: Egész kijelölése
' Find and read, Print  8.3 filename in the root directory
' M64_Maim_SD_READ_FILE.bas  :
' Mega64, Mega128, Lcd = 20 * 4, Terminál Debug, and KokkeKat_FAT-free_SD!
' By: Kapu48 2011 08.
$regfile = "m128def.dat"                                    ' Táp fesz: 3.3V
$crystal = 11059200
'$regfile = "m64def.dat"
'$crystal = 14746000
$framesize = 64                                             '
$hwstack = 64                                               '
$swstack = 64                                               '
' Feltételes Fordító beállítások:
' Ha = 1 : Hibakeresésnél Tájékoztatók ki írása a terminálra. LCD-re nem működik!
' Ha = 0 Nincsen program hiba ki írás! Csak már jól belőtt programnál ajánlott!
Const Debug_sd = 1                                          ' =0. Ha OK a program Ki írás már nem kel!
' HW beállítások!
' 1 LCD-re listáz    !!!!Még fejlesztés alatt!!!!!
' 0 Terminálra listáz
Const Lcd_ok = 0
' '-------------------------------------------------------------------------------
' A {(Mega64 - M128), (Lcd = 20 * 4), Terminál}-ok hoz  beállítót "KokkeKat_FAT-free_SD_lib_decl.bas" példánya
$include "M64_KokkeKat_FAT-free_SD_lib_decl.bas"
' '-------------------------------------------------------------------------------
' LCD CSAK A VÉGLEGES verzióban lesz! Ez itt csak annak az előkészítése.
#if Lcd_ok = 1
' Az LCD Pin-t mindenki löjje be sajátmagának!
  Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
 'we adjust LCD
  Config Lcd = 20 * 4
  Initlcd
  Cls
#else
  $baud = 19200
#endif
' '-------------------------------------------------------------------------------
                                       '
' Átmeneti String tároló az adatok beolvasásához és Ki írásokhoz
Dim Sdstr As String * 40                                    ' 80 karakter = 1 képernyő sor hossza.
Dim Sdtempw2 As Word                                        ' Indexeléshez 1 word
' 8+3 filenevek tárolására
'Dim Sddirentrynameb(13) As Byte
'Dim Sddirentrynames As String * 12 At Sddirentrynameb(1) Overlay
' 8+3 filenevek tárolására
Dim Sddirentrynames As String * 12                          ' A Beolvasott File név
Dim Sddirentrynameb(13) As Byte At Sddirentrynames Overlay
Dim Sdfindentrynames As String * 12                         ' A keresett File név
Dim Sdfindentrynameb(13) As Byte At Sddirentrynames Overlay
Dim Sb As String * 1                                        ' A beolvasott Byte / CHAR tárolása
Dim Iw As Word                                              ' Indexváltozók tárolási címszámláláshoz
Dim Jw As Word
Dim Ib As Byte
Dim Jb As Byte
' String Tömb 50db 24 karakter hosszú filenév tárolására
Dim List_file_names(50) As String * 12
Dim List_file_index As Byte                                 ' Számláló a fenti tömb Indexeléséhez
Dim Effekt(1280) As Byte                                    ' A beolvasott Fényerő Effekt File tárolása
Dim Effekt_i(3) As Byte                                     ' A fenti file koordináta adatai (Sorszám, X, Y)
Dim Effekt_x As Byte                                        ' Effekt oszlopok száma (PWM kimenetek száma)
Dim Effekt_y As Byte                                        ' Effekt sorok száma
Dim Ful As Word                                             ' Ha 1 menetben nem fér be a file: (Ful > 0)
Dim Sorok As Byte                                           ' Effekt sorok számlálására
Sdfindentrynames = "EFFEKT2 CSV"                            'A kereset File név tárolása
' Here starts the mandatory SD card initialization and file system initialization:
' Itt kezdődik a kötelező SD kártya inicializálása és a fájl rendszer indítása
Ful = 0
Sorok = 1
Sdstatus = 0
Gosub Sdinit
' Inicializálás sikeres. Sdcardtype = 1 -> v1.x SDSC, 2 -> v2 + SDSC, 3 -> v2 + SDHC és SDXC
If Sdstatus = 0 Then                                        ' Initialization succesful. Sdcardtype = 1 -> v1.x SDSC, 2 -> v2+ SDSC, 3 -> v2+ SDHC or SDXC
   Gosub Sdinitfs
End If
If Sdstatus = 0 Then
#if Debug_sd = 1
   Print "SD OK!"                                           ' SD Rendben
#endif
' 8+3CHR File keresés a gyökér könyvtárban
   Sdstartdirclusterd = 0
   Sdclusterd = Sdstartdirclusterd
   Sddirlistarraycounter = 0
   Sddirlistdirection = 0
   Sdentrynames = Sdfindentrynames
   Do
      Sdstatus = 0
      Gosub Sddirlist
'    Ha fájlt talált
      If Sdstatus = 26 Then                                 ' File found
         Sdtempb = 1
         Ib = 0
         Jb = 1
         Do                                                 ' Hasonlítsa össze a könyvtár bejegyzés nevét és megadott belépési nevét
            If Sddirlistdirentry(sdtempb) <> Sdentrynameb(sdtempb) Then       ' Compare this directory entry name and specified entry name
               Sdstatus = 38
            End If
            Incr Sdtempb
         Loop Until Sdtempb = 12 Or Sdstatus = 38
         If Sdstatus <> 38 Then
            Sdstatus = 37
         End If
       End If
   Loop Until Sdstatus = 37 Or Sdstatus = 32 Or Sddirlistendpoint = 1       ' Entry names match or end of directory
'   Belépés nevek megegyeznek vagy végére ért a könyvtárnak
   If Sdstatus = 37 Then
      Sdstatus = 0
   End If
' Open file and print the contents
' Fájl megnyitása: a tartalmát Tárolja és (ki irja)
   If Sdstatus = 0 Then
#if Debug_sd = 1
      Print "Open File Name: " ; Sdentrynames
#endif
      Sdsecincluster = 0
      Sdstr = ""
      Iw = 1
      Ib = 0
' Ciklús a File vége jelig:
      While Sdeof < 1
         Gosub Sdreadbyte                                   ' Következő Byte beolvasása
         Sb = Chr(sdbyterw)
#if Debug_sd = 1
         Print Sb ;
#endif
         Select Case Sb
            Case "0" To "9" :                               ' Számok kiszedése
                  Sdstr = Sdstr + Sb
                  Incr Ib
            Case ";" :                                      ' Ha Két érték közti elválasztó jel: ";"
                  If Ib > 0 Then
                      If Iw < 1279 Then                     ' Ne lépje át a tömb határát
                         Select Case Sorok                  ' Az első 3 sort külön lekezeljük
                              Case 1 :
                          '        A file koordináta adatai (Sorszám, X, Y)
                                  Effekt_i(jb) = Val(sdstr) ' 1 Byte / ASCII Számok Váltás és tárolás
                                  Incr Jb
                              Case 2 To 3 :                 ' 2. és 3. sort eldobjuk
                                     Sdstr = ""
                              Case Is > 3 :                 ' 4. sortól jöhetnek az adatok
                                 Effekt(iw) = Val(sdstr)
                                 Incr Iw
                         End Select
                      End If
                     Ib = 0
                     Sdstr = ""                             ' Üríti az átmeneti tárolót
                  End If
          End Select
'     Sorvégén végzet műveletek
          Select Case Sdbyterw
                  Case &H0D :
                         If Ib > 0 Then                     ' Ha sorvége előtt még értékes adat volt
                           If Iw < 1279 And Sorok > 3 Then
                              Effekt(iw) = Val(sdstr)       ' Tároljuk
                              Incr Iw
                           End If
                           Ib = 0
                           Sdstr = ""
                         End If
                  Case &H0A :                               ' Ez az utolsó karakter a sorban ?
                        Incr Sorok                          ' Sorszámlálót növeljük
                        Sdstr = ""
                        Ib = 0
            End Select
      Wend
#if Debug_sd = 1
' Ki irja a Tárolt File tartalmát
      Print "A Fenyero ertekek tombje:"
  '   Az 1 sór adatai 3 Byte
      Ib = 1
      Print Effekt_i(ib) ; " " ;
      Incr Ib
      Print Effekt_i(ib) ; " " ;
      Effekt_x = Effekt_i(ib) + 2
      Incr Ib
      Print Effekt_i(ib)
' File méret számolása
      Effekt_y = Effekt_i(ib)
      Jw = Effekt_y * Effekt_x
' Ha nagyobb a File mint a tároló tömbünk  ( IDÉGLENES ERROR figyelése!!!!!!!!.)
' Még nincsen lekezelve ha nagyobb a file mint a tömbünk!!!!!!!!!!!!!!!!!!!!!.)
      If Jw > 1280 Then
         Ful = 1280 - Jw                                    ' A maradék Byte
         Print "Tomb Ful+: " ; Ful
         Jw = 1280                                          ' Csak ekkora a tárolónk
      End If
' Tömb soronkéntti ki írása elválasztó szóközökkel
      Ib = 0
      For Iw = 1 To Jw
         Print Effekt(iw) ; " " ;
         Incr Ib
         If Ib = Effekt_x Then
             Print
             Ib = 0
         End If
      Next
      Print
   Else
      Sdstr = Str(sdstatus)
      Print " NO FILE! " ; Sdstr
#endif
   End If
#if Debug_sd = 1
Else
   Sdstr = Str(sdstatus)
   Print "SD ERROR!" ; Sdstr
#endif
End If
#if Debug_sd = 1
   Print "END Program!"
#endif
End                                                         'end program
'===============================================================================
' A {(Mega64 - M128), (Lcd = 20 * 4), Terminál}-ok hoz  beállítot "KokkeKat_FAT-free_SD_lib_code.bas" példánya
$include "M64_KokkeKat_FAT-free_SD_lib_code.bas"
''


Kód: Egész kijelölése
'KokkeKat_FAT_HELP_Hu.bas
' By: kapu48. 2011 07.
'(
' Magyar nyelvű HELP az alábbi Library rutinjaihoz:
' "KokkeKat FAT-free SD library code" for SDSC, SDHC, and SDXC - INCLUDE at the end of your code
A "KokkeKat_FAT-free_SD_lib_decl.bas" Fő alapp elve, hogy csak a szükséges részeket fordítjuk be a kódba!
Optimális Memória használat céljából! Ezért vannak Constansok létrehozva a feltételes fordítások bealításához.
Ha valahól nem talál, vagy duplán talál valamit a fordító, akkor itt keresgéld  a hibát először!
' Alap SD kártyakezelő rutinok:
................................................................................
>>>    SDINIT:
   SD kártya inicializálása és azonosítás
   Az inicializálás sorrendje határozza meg a kártya SPI módban meghatározza kártya típusát, és ellenőrzi a kártyán
   Lévő támogatott feszültségtartomány. Befejezését követően, a kártya készen áll a tényleges olvasás és írásra
   Hamarosan meg tesszük.
   Van 2 féle iniciálás.
   1.:   Ha Sdinitdetail = 1  Minimum detail  (csak győződjön meg róla, hogy az init sikeres)  Kevesebb helyet foglal
   2.:   Ha Sdinitdetail = 0  Teljes részletességgel (visszatérés részletesen, ha az init sikertelen)
         Változókban vissza kapot értékek:
            Sdresponse(6) Byte   : A <= 48 bites  SD válassza az aktuális utasítás végrehajtása után.
                                Amiket vizsgálni kel:
               Sdresponse(1) = 255 Időtúllépés a CMD8
            Sdcardtype Byte =    : A Kártya típus kódja
            Sdstatus Byte        : Állapot jelző Byte. Kódértelmező tábláztat a Help végén összefoglalva!
   A rutin végén a SPI-t 2*es sebességre állítja!
................................................................................
>>>    Sdcheckr1:
   SD vissza adott ellenőrző érték (Sdresponse) konvertálása (Sdstatus) kódokká.
      Részletezve a lap alján!>>
................................................................................
>>>    Sdreadsector:
    Olvassa 1 szektort SD
      Bemenő változók:
          Sdcardtype
          Sdsectord
      Kimenő változók:   Ha  Sdstatus = 0
         Ha Sdwmode = 1 és Sdreaddestination = 0, Az adatok a Sdbuffer(1 - 512)bekerülnek
         Ha Sdwmode = 1 és Sdreaddestination > 0, Az adatok a Sdfatbuffer(1 - 512)bekerülnek
................................................................................
>>>    Sdwritesector:
   Ír 1 Szektort. Ha fordítási: Sdwmode > 0
      Bemenő változók:
          Sdcardtype
          Sdsectord
      Kimenő változók:
         Ha Sdwmode = 1 és Sdwriteorigin = 0, Írja ki az adatblokkot a Sdbuffer-ból
         Ha Sdwmode = 1 és Sdwriteorigin > 0, Írja ki az adatblokkot a Sdfatbuffer-ból
         Sdstatus = 0   :  Irás OK
--------------------------------------------------------------------------------
#HA Sdfsactive = 1  FAT16/32 fájlrendszer aktív
>>>    Sdinitfs:
   SD Adatok beolvasása:
       Kimenő változók:
         Sdbuffer(1-255)   :  Főbb Értékek Leírása:
                                 00h ismeretlen vagy semmi
                                 01h 12-bites FAT
                                 04h 16-bites FAT (partíció kisebb, mint 32MB)
                                 05h kiterjesztett MS-DOS partíció
                                 06h 16-bites FAT (partíció nagyobb, mint 32MB)
                                 0BH 32-bites FAT (partíció akár 2048GB)
                                 0Ch Ugyanaz, mint 0BH, de használ LBA1 13h-bővítmények
                                 0Eh Ugyanaz, mint 06h, de használ LBA1 13h-bővítmények
                                 0Fh Ugyanaz, mint 05h, de használ LBA1 13h-bővítmények
                                 ...
                                 ...
                                 ...
................................................................................
>>>    Sdlocatesector:
   Keresse SD szektort
      Bemenet változó:
         Sdclusterd = jelenlegi klaszter
         Sdclusterb (4) Byte Vagy
         Sdclusterd Duplaszó Aktuális klaszter száma
     Kimeneti változó:
         Sdsectord  =  az abszolút szektor száma ebben a csoportban
................................................................................
>>>    Sdlocatenextcluster:
   Keressen következő klasztert (fürtöt)
      Bemeneti változó:
         Sdclusterd = jelenlegi klaszter
         Sdclusterb (4) Byte Vagy
         Sdclusterd Duplaszó Aktuális klaszter száma
       Kimeneti változó:
         Sdclusterd = következő klaszter
................................................................................
>>>    Sdcalculatefat1sector:
   SD cím kiszámításához  FAT 1 szektor
      Bemeneti változó:
         Sdclusterd = jelenlegi klaszter
         Sdclusterb (4) Byte Vagy
         Sdclusterd Duplaszó Aktuális klaszter száma
#END--------------------------------------------------------------------------------
#HA Sdrmode = 1 And Sdfsactive = 1 ( 1 = olvasott és ' 1 = FAT16/32 fájlrendszer olvasás aktív )
>>>    Sdreadbyte:
   Használható olvasni egy byte az aktuális fájlból, ahogy helyezkedik el Gosub Sdfindentryindirectory vagy Gosub Sddirlist
      Hívása előtt ellenőrizze, hogy:
         Sdfilesized > 0,
         Sdstatus = 0, és
         Sdeof = 0
      Bemeneti változók:
         Sdclusterd = Aktuális fájl klaszter Sdclusterb (4) Byte Vagy Sdclusterd Duplaszó Aktuális klaszter száma
         Sdsecincluster = szektor száma ebben a klaszterben, 0-ra, mielőtt az első hívás
         Sdbufferpos = buffer pos ebben a szektorban
         Sdsectord = abszolút szektor száma
      Kimeneti változók:
         Sdbyterw       : az olvasott byte
         Sdbytesread    : olvasott byte számláló
         Sdeof = 1      : End Of fájl található, egyébként 0
         Sdstatus       : Byte
#endif--------------------------------------------------------------------------
#if Sdusefind = 1    ( Használ FIND rutint )
>>>    Sdfindentryindirectory:
   Megkeres 1 bejegyzést a könyvtárban
      Használd, hogy találj egy fájlt, alkönyvtárt, Eszköz ID, vagy rendelkezésre álló könyvtár elérhető belépést
      Bemeneti változók:
         Sdclusterd         : A klaszter száma a könyvtár, amelyben keresni szeretne (tényleges klaszter vagy
                              0 a root könyvtárban)
         Sdsecincluster = 1 : ha csinálsz az első keresés, egyébként a tényleges Sdsecincluster
         Sdbufferpos = 1    : ha csinálsz az első keresés, egyébként a tényleges Sdbufferpos
         Sdentrynames       : A fájl vagy alkönyvtár nevét
         Sddirectorymode    : 0 = találtam fájlt, 1 = találtam alkönyvtárt, 2 = találtam SD Névet ID,
                              3 = találtam elérhető könyvtárat bejegyzést, 4 találtam szülő könyvtárat
            Ha Sdrwmode = 2 Vagy Sdrwmode = 4 :
         Sdbuffer()         : Sdreaddestination = 0    vagy
         Sdfatbuffer()      : Sdreaddestination = 1
     Kimeneti változók:
         Sdstatus:
            28 = A rendelkezésre álló könyvtár helyet találtam
            31 = EOC End Of klaszter lánc talált (könyvtár)
            32 = EOD End Of Directory marker található
            34 = A kötet ID találtam
            47 = Szülő könyvtár mutató találtam
            48 = A fájl vagy alkönyvtár található
         Sddirectorymode = 2:
            Sdclusterd    = Következő klaszter száma (ahol a file / alkönyvtár található)
            Sdentrynames  = A kötet id neve
         Sddirectorymode <> 2:
            Sddirclusterd     = Cluster száma ehhez a könyvtárhoz belépés
            Sddirsecincluster = Lánc start szektor száma az aktuális könyvtárban klaszter, 1 a Sdsecincluster
            Sddirbufferpos    = Lánc induló könyvtárát számlálópozíció, 1-512
            Sdclusterd        = Következő klaszter száma (ahol a file / alkönyvtár tartózkodik)
................................................................................
>>>    Sddirsectorloop:
   Keres következő Lehívható bejegyzést a SD könyvtárban.
      Bemenő változók:
         Sdsectord       = abszolút könyvtár szektor száma
         Sdbufferpos     = 1, ha csinálsz az első keresés, egyébként a tényleges Sdbufferpos
         Sddirectorymode
            0 = Fájlkeresés
            1 = találni alkönyvtárban
            2 = találni kötet ID
            3 = találni elérhető könyvtár bejegyzést
            4 = találni szülő könyvtár
            5 = vissza teljes bejegyzés, kivéve, ha EOD (csak ha engedélyezett Sdusefindstoreentry = 1)
      Kimeneti változók:
         Sdstatus:
            28 = Egy szabad könyvtár helyet találtam
            32 = EOD End Of Directory marker található
            34 = A kötet ID találtam
            47 = Szülő könyvtár mutató találtam
            48 = A fájl vagy alkönyvtár található
         Ha Sddirectorymode = 2:
         Sdclusterd       = Következő klaszter szám (adott fájl / alkönyvtár található)
         Sdentrynames     = A kötet ID
         Ha Sddirectorymode <> 2:
         Sddirclusterd       = Cluster száma ehhez a könyvtárhoz bejegyzés
         Sddirsecincluster   = lánc start szektor számát az aktuális könyvtárban klaszter, 1 Sdsecincluster
         Sddirbufferpos      = lánc induló könyvtárát számlálópozíció, 1-512
         Sdclusterd          = Következő klaszter szám (adott fájl / alkönyvtár található)
         Sdbuffer            : ???
................................................................................
>>>    Sdcheckclusterreference0:
   Ellenőrizze, amennyiben ez jelzi a EOC (>=&HFFF8 or >=&H0FFFFFF8)
      Kimeneti változók:
         Sdstatus = 31    EOC Vége a klaszter láncnak találat ' EOC End OF Cluster chain found
................................................................................
>>>    Sdgetclusterandsize:
   Sd kapni klaszter és mérete:
      Bemenő változók:
         Sdfattype
         Sdbuffer
         Sdbufferpos
      Kimeneti változók:
         Sdclusterb()  =   Fájl / alkönyvtárt cluster száma      ' File/subdirectory cluster number
         Sdfilesizeb() =   Fájl mérete byte-ban    'File size in bytes
#ENDIF--------------------------------------------------------------------------------
#if Sdwmode > 0 And Sdfsactive = 1
   2 = write unbuffered  vagy 1 = write buffered  És  1 = FAT16/32 fájlrendszer aktív
>>>    Sdcreatefileordir:
   Használd, mint az első három lépést, amikor létrehoz egy új fájlt, vagy az egyetlen lépés,
   ha létrehoz egy új alkönyvtárt
   Sdwritebyte és Sdclosefile az elkövetkező két
   Keresse szabad FAT bejegyzés található szabad könyvtár bejegyzést, és mentsd meg a könyvtár bejegyzést
   vissza az SD kártyára
      Bemeneti változók:
         Sdentrynames         = a 8.3 fájlnév
         Sdcreatemode         : 0 = Fájl, 1  =  alkönyvtárt
         Sdstartdirclusterd   = a könyvtár klaszter száma (ahol a fájl vagy alkönyvtárt kell létrehozni).
                                Állítsa 0-gyökérkönyvtár.
         Sdyear      = az év
         Sdmonth     = a hónap
         Sdday       = a nap
         Sdhours     = az óra
         Sdminutes   = a perc
         Sdseconds   = a másodperc
         Sdmseconds  = az ezredmásodperc
         If Sdmaintainfsinfo = 1
         Sdfsinfofreeclustersd    = a szabad klaszterek száma
         Sdfsinfonextfreeclusterd = A következő nem használt cluster (jellemzően nem az első szabad
                                    újrafelhasználható cluster)
       Kimeneti változók:
         Sdpartitionfull      = 1, ha a partíció tele (nincs több szabad FAT bejegyzés)
         Sdfatsectornum       = a FAT szektor száma
         Sdfatbufferpos       = a helyzet ebben az ágazatban
         Sddirclusterd        = a könyvtár klaszter
         Sddirsecincluster    = az ágazat ebben a klaszterben
         Sddirbufferpos       = a helyzet ebben az ágazatban
         Sdwclusterd          = A klaszter száma vagyunk írásban
         Sdwsecincluster      = az ágazat ebben a klaszter (1)
         Sdwbufferpos         = a helyzet ebben az ágazatban (0) - Felhívjuk a figyelmét!
         Sdwfilesized         = a fájl méretét (0)
         If Sdmaintainfsinfo = 1
         Sdfsinfofreeclustersd      = a szabad klaszterek
         Sdfsinfonextfreeclusterd   = A következő nem használt cluster (jellemzően nem az első szabad újrafelhasználható
                                       cluster)
         Sdstatus = 0      : OK
................................................................................
#if Sduseappend = 1    Jelezze Sdapp véget
>>>    Sdpreparetoappend:
   Használható hozzáfűzhet egy már létező fájlban
      Bemeneti változók:
        Sdentrynames       = a 8.3 fájlnév
        Sdyear       = az év
        Sdmonth      = a hónap
        Sdday        = a nap
        Sdhours      = az óra
        Sdminutes    = a perc
        Sdseconds    = a másodperc
        Sdstartdirclusterd       = az első klaszter ennek a (szub-) könyvtárban
        Sdfsinfofreeclustersd    = a szabad klaszterek
        Sdfsinfonextfreeclusterd = A következő nem használt cluster (jellemzően nem az első szabad újrafelhasználható
                                    cluster)
     Kimeneti változók:
        Sdwclusterd              = A klaszter száma vagyunk írásban
        Sdwsecincluster          = az ágazat ebben a klaszterben
        Sdwbufferpos             = a helyzet ebben az ágazatban
        Sdwfilesized             = a fájl mérete
        Sdfatsectornum           = a FAT szektor száma
        Sdfatbufferpos           = a helyzet ebben az ágazatban
        Sddirclusterd            = a könyvtár klaszter
        Sddirsecincluster        = az ágazat ebben a klaszterben
        Sddirbufferpos           = a helyzet ebben az ágazatban
        Sdfsinfofreeclustersd    = a szabad klaszterek
        Sdfsinfonextfreeclusterd = A következő nem használt cluster (jellemzően nem az első szabad újrafelhasználható
                                    cluster)
        Sddirclusterd, Sddirsecincluster és Sddirbufferpos pontja ebbe a könyvtárba belépés
        Sdwclusterd, Sdwsecincluster és Sdwbufferpos pontja az utolsó bájt a fájl
        Sdfatclusterd, Sdfatsectornum és Sdfatbufferpos pontja az utolsó FAT belépés (klaszter szám)
................................................................................
>>>      Sdwritebyte:
   Használható, hogy írjon egy byte egy megnyitott fájl
      Mindig győződjön meg arról, hogy Sdclosefile = 0 mielőtt írás
      Bemeneti változók:
         Sdclosefile kell 0 - ellenkező esetben a fájlt le kell zárni
         Sdwclusterd       = A klaszter száma vagyunk írásban (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                              Touch csak írásban> 1 file)
         Sdwsecincluster   = az ágazat ebben a klaszter (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                              touch csak írásban> 1 file)
         Sdwbufferpos      = a helyzet ebben az ágazatban (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                              touch csak írásban> 1 file)
         Sdwfilesized      = A fájl mérete (eredetileg a Sdcreatefileordir vagy Sdappendfile - touch csak írásban>
                              1 file)
         Sdfatsectornum    = a FAT szektor számát (kezdetben által meghatározott Sdcreatefileordir vagy Sdappendfile -
                              touch csak írásban> 1 file)
         Sdfatbufferpos    = a helyzet ebben az ágazatban (eredetileg a Sdcreatefileordir vagy Sdappendfile -
                           touch csak írásban> 1 file)
         Sdbuffer ()       (érintse meg csak akkor, ha írásban> 1 file)
         Sdbyterw          = az adatokat byte vagyunk arról írni
      Kimeneti változók:
         Sdwclusterd       = A klaszter száma vagyunk írásban
         Sdwsecincluster   = az ágazat ebben a klaszterben
         Sdwbufferpos      = a helyzet ebben az ágazatban
         Sdwfilesized      = a fájl mérete
         Sdfatsectornum    = a FAT szektor száma
         Sdfatbufferpos    = a helyzet ebben az ágazatban
         Sdbuffer ()
         Sdpartitionfull   = 1, ha a partíció teljes (nincs több szabad FAT bejegyzés)
         Sdclosefile       = 1, ha a fájlt be kell zárni a visszatérés a gosub
      Visszatért állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 Timeout
         Sdstatus = 41 adatokat elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba
         Sdstatus = 43 szabad FAT bejegyzés található
         Sdstatus = 44 A partíció teljes - tárolni FAT EOC marker
................................................................................
>>>      Sdfinalizeafterwriting:
   Használható, hogy zárja be a fájlt, miután az utolsó hívás Sdwritebyte
      Bemeneti változók:
         Sdwclusterd       = A klaszter száma vagyunk írásban (meghatározott Sdwritebyte - touch csak írásban> 1 file)
         Sdwsecincluster   = az ágazat ebben a klaszter (meghatározott Sdwritebyte - touch csak írásban> 1 file)
         Sdwbufferpos      = a helyzet ebben az ágazatban (meghatározott Sdwritebyte - touch csak írásban> 1 file)
         Sdwfilesized      = a fájl méretét (meghatározott Sdwritebyte - touch csak írásban> 1 file)
         Sdfatsectornum    = a FAT szektor száma (meghatározott Sdwritebyte - touch csak írásban> 1 file)
         Sdfatbufferpos    = a helyzet ebben az ágazatban (meghatározott Sdwritebyte - touch csak írásban> 1 file)
         Sddirclusterd     = a könyvtár klaszter egyre fájlméret (rögzített vagy Sdcreatefileordir Sdappendfile -
                              touch csak írásban> 1 file)
         Sddirsecincluster = az ágazat ebben a klaszter (rögzített vagy Sdcreatefileordir Sdappendfile -
                              touch csak írásban> 1 file)
         Sddirbufferpos    = a helyzet ebben az ágazatban (rögzített vagy Sdcreatefileordir Sdappendfile -
                              touch csak írásban> 1 file)
         Sdbuffer ()       (érintse meg csak akkor, ha írásban> 1 file)
         Sdfatbuffer ()    (érintse meg csak akkor, ha írásban> 1 file)
         Sdsavedatasector  = 1, ha az adatokat el kell menteni az SD (meghatározott Sdwritebyte -
                              touch csak írásban> 1 file)
      Kimeneti változók:
         Sdclosefile       = 0, ha a fájl lezárás sikeres volt
      Visszatért állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba
................................................................................
>>>      Sdstoredirentry:
   Tárol minden információt egy új könyvtárat bejegyzés, kivéve a fájl mérete,
   hogy frissülni fog a végén a második olvasási + írni ezt a könyvtárat szektor
      Bemeneti változók:
         Sdentrynames   = a neve az új fájl vagy alkönyvtár (vagy. .. Ha a Bevezető subirectory bejegyzés)
         Sdcreatemode   : 0 = Fájl 1 = alkönyvtár
         Sdclusterd     = A klaszter számát, ahol az új fájlt vagy alkönyvtárt indul
         Sdwfilesized   = A fájl mérete (0 alkönyvtár, vagy ha létre egy új fájlt)
         Sdbufferpos    = a puffer pozícióját a jelenlegi szektorban az aktuális könyvtár klaszter
         Sdbuffer ()    = az aktuális könyvtárban szektor
         Sdyear = az év
         Sdmonth = a hónap
         Sdday = a nap
         Sdhours = az óra
         Sdminutes = a perc
         Sdseconds = a másodperc
         Sdmseconds = az ezredmásodperc
      Kimeneti változók:
         Sdbuffer()  = az aktuális könyvtárban szektor
         Sddatew     = a dátumot DateTime formában (általában nem használt utána)
         Sdtimew     = az idő DateTime formátumban (általában nem használt utána)
................................................................................
>>>      Sdstore19_26:
   Adja meg a fájl méretét a könyvtárra vonatkozó bejegyzés
................................................................................
>>>      Sdstore29_32:
   Adja meg a fájl méretét a könyvtárra vonatkozó bejegyzés
................................................................................
>>>      Sdfindfreefat:
   Használható keresni FAT1 a szabad belépés, kezdve Sdsectord, és tárolni pozíciók számának és a FAT1 szektor
      Bemeneti változók:
         Sdsectord      = a FAT1 szektor vagyunk től (> = Sdfat1location, <Sdfat2location)
         Sdbufferpos    = 1 vagy az aktuális pozíció
      Kimeneti változók:
         Sdfatsectornum    = a FAT1 ágazat, amelyben találtunk egy szabad belépőt
         Sdfatbufferpos    = a helyzet ebben az ágazatban
         Sdfatclusterd     = A klaszter szám megfelel a fenti FAT1 helyzetben
         Sdwclusterd       = A klaszter szám megfelel a fenti FAT1 helyzetben
         Sdwsecincluster   = 1
         Sdwbufferpos      = 0 (praktikusabb kiindulási pont, mint 1)
         Sdwfilesized      = 0
      A visszatérési állapotok:
         Sdstatus = 0      = Sikeres
         Sdstatus = 7      = időtúllépés
................................................................................
>>>      Sdfindfreefatentry:
   Használható keresni FAT1 a szabad belépőt, kezdve Sdsectord
      Bemeneti változók:
         Rendeljen Sdsectord     (> = Sdfat1location, <Sdfat2location)
         Hozzárendelése Sdbufferpos = 1 vagy tényleges helyzet
     Kimeneti változók:
         Sdsectord      = a FAT1 ágazat, amelyben találtunk egy szabad belépőt
         Sdbufferpos    = a helyzet ebben az ágazatban
     A visszatérési állapotok:
         Sdstatus =  0 = Sikeres
         Sdstatus =  7 = időtúllépés
         Sdstatus = 43 = szabad FAT bejegyzés található
         Sdstatus = 44 = vége   FAT és nem találtak szabad belépőt
................................................................................
>>>      Sdwclearcluster:
    Használható írni nullák a szektor 2-Sdsecspercluster (ami majd ezt követően akár nulla az ágazati 1 vagy az új
    könyvtár bejegyzés vagy. .. Bejegyzések)
      Bemeneti változók:
         Sdclusterd     = A klaszter vagyunk arról törléséhez
      Kimeneti változók:
         Sdbuffer()     tartalmaz, 512 * nulla
      A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba
................................................................................
>>>      Sdsavefatsec:
   Tárol következő klaszter vagy EOC marker SD / FAT / buffer () a Sdfatbufferpos és mentse vissza az SD kártya
   (FAT1 és FAT2)
      Bemeneti változó:
         Sdfatbufferpos = a FAT bejegyzés helyzetben
         Sdfatsectornum = a FAT szektor száma
         Sdclusterd     = a következő cluster számát vagy EOC marker
     Kimeneti változó:
         Sdbuffer ()
     A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba
................................................................................
#if Sdwmode > 0 And Sdfsactive = 1
>>>      Sdcalculatefatentrycluster:
   Kiszámításához használt klaszter számot a FAT bejegyzés által meghatározott Sdsectord és Sdbufferpos
      Bemeneti változók:
         Sdsectord      = az aktuális FAT szektor
         Sdbufferpos    = a pozíció azon belül
      Kimeneti változó:
         Sdclusterd     rendelkezik a klaszter szám
................................................................................
>>>      Sdlocatedirsector:
................................................................................
#if Sdwmode > 0
   #if Sdfsactive = 1 Or Sdusewipe = 1
>>>      Sdpreparedatetime:
   Kiszámítására használt dátum és idő a formátumot használják a könyvtár bejegyzések
      Bemeneti változók:
        Sdyear
        Sdmonth
        Sdday
        Sdhours
        Sdminutes
        Sdseconds
        Kimeneti változók:
        Sddatew tartja a dátumot
        Sdtimew tartja az időt
        Belsőleg használt változók:
        Sdtempb
        Dátum és idő formátumok
        Sok FAT fájlrendszer nem támogatja a dátum / idő nem DIR_WrtTime és DIR_WrtDate.
        Emiatt DIR_CrtTimeMil, DIR_CrtTime, DIR_CrtDate és DIR_LstAccDate valójában opcionális mezőket.
        DIR_WrtTime és DIR_WrtDate támogatni kell, de.
        Ha a másik dátum és idő mező nem támogatja, akkor be kell 0-ra a fájlt hoz létre, és figyelmen kívül hagyja a többi fájl műveletek.
        Dátum formátum. A FAT könyvtárra vonatkozó bejegyzés a bélyegzőt egy 16-bites mező, amely alapvetően egy időpontot képest az MS-DOS korszaka 1980/01/01.
        Itt van a formátumot (bit 0 a LSB a 16 bites szó bit 15 az MSB a 16-bit):
        Bits 0-4 : A hónap napja, érvényes tartomány 1-31 beleértve.
        Bits 5-8 : Hónap év, 1 = január, érvényes tartomány 1-12 beleértve.
        Bits 9-15: gróf éve 1980-tól érvényes tartomány 0-127 inclusive (1980-2107).
        Idő formátum. A FAT könyvtárra vonatkozó bejegyzés időbélyeg egy 16-bites mező, amely finomsága 2 másodpercig.
        Itt van a formátumot (bit 0 a LSB a 16 bites szó bit 15 az MSB a 16 bites szó).
        Bits 0-4  : 2 másodperces szám, érvényes tartomány 0-29 inclusive (0 - 58 másodperc).
        Bits 50-10: Perc, érvényes tartomány 0-59 beleértve.
        Bits 11-15: óra, érvényes tartomány 0-23 beleértve.
        Az érvényes idő tartománya Midnight 0:00:00-23:59:58.
................................................................................
#if Sdusefsinfo = 1
>>>      Sdreadfsinfo:
   Használható olvasni a fsinfo változók
      Bemeneti változó
         Egyik sem
      Kimeneti változók:
         Sdfsinfofreeclustersd      : rendelkezik a számú szabad klaszterek
         Sdfsinfonextfreeclusterd   : pont a következő használt klaszter (jellemzően nem az első szabad
                                       újrafelhasználható cluster)
      A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
................................................................................
>>>      Sdwritefsinfo:
   Használható írni a fsinfo változók vissza az SD kártya (miután frissítve)
     Bemeneti változók:
         Sdfsinfofreeclustersd    : rendelkezik a számú szabad klaszterek
         Sdfsinfonextfreeclusterd : pont a következő használt klaszter (jellemzően nem az első szabad
                                    újrafelhasználható cluster)
     Kimeneti változó
         egyik sem
     A visszatérési állapotok:
         Sdstatus = 0 Sikeres
         Sdstatus = 7 időtúllépés
         Sdstatus = 41 adatok elutasította CRC hiba miatt
         Sdstatus = 42 adatok miatt visszautasításra írási hiba
................................................................................
>>>      Sdupdatefsinfo:
   Használható, amikor egy újabb klaszter kerül üzembe helyezett
      Bemeneti változók:
         Sdfatclusterd           = A klaszter imént elkezdte használni
         Sdfsinfofreeclustersd   = tartja a korábbi számú szabad klaszterek
         Sdfsinfonextfreeclusterd : mutat az előző használt klaszter (jellemzően nem az első szabad újrafelhasználható cluster)
      Kimeneti változók:
         Sdfsinfofreeclustersd     :  rendelkezik a frissített számú szabad klaszterek
         Sdfsinfonextfreeclusterd   : pont a következő használt klaszter (jellemzően nem az első szabad
                                    újrafelhasználható cluster)
................................................................................
#if Sdusedirlist = 1
>>>      Sddirlist:
   Jelenleg feltételezi, soha nem töltse ki az SD kártya teljesen!
     Használható, hogy lépjünk előre és hátra keresztül az aktuális könyvtárban
     Hívja a rutin egy ciklus, amelyben ellenőrizni bizonyos Sdstatus értékek
     Visszaállítása Sdstatus 0-ra, mielőtt a következő lépés a hurok
     Az első hívás egy új könyvtárat, hozzá valódi vagy látszólagos Sdclusterd.
     Ha felsorolja a gyökér, állítsa dummy értékét 0 és támogatja a FAT16 könyvtárat.
     Az első hívás egy új könyvtárat, hozzá Sddirlistarraycounter = 0
     Mindig hozzá Sddirlistdirection, 0 = előre, 1 = hátra
         Rutin-specifikus Sdstatuses:
            26 = A fájl bejegyzés találtam
            27 = A könyvtár bejegyzést találtam
            28 = Egy szabad könyvtár helyet talált
            32 = EOD End Of Directory marker található
            33 = Alkönyvtár. vagy .. bejegyzést találtam
            34 = A kötet ID találtam
            36 = Hosszú fájlnév találtam
................................................................................
#if Sdusedirlist = 1
>>>      Sdcheckclusterreference:
    Ellenőrizze, hogy ez azt jelzi, EOC (> = & HFFF8 vagy> = & H0FFFFFF8)  Check if it indicates EOC (>=&HFFF8 or >=&H0FFFFFF8)
................................................................................
#if Sduselfn = 1
>>>      Sdlookforlfn:
    Hívás után Sddirlist visszatért a Sdstatus = 26 (file) vagy 27 (alkönyvtár)
................................................................................
#if Sduselfn = 1
>>>      Sdcalculatelfnchecksum:
................................................................................
#if Sduselfncompare = 1
>>>     Sdcomparefilenames:
................................................................................
#if Sdusewipe = 1       használja a törlést
>>>     Sdwipe:
   Tisztítására használt, és alaphelyzetbe álit FAT1, FAT2, gyökérkönyvtár, és fsinfo szektorban.
      Ez NEM egy valódi formázást!
      Bemeneti változók
         Sdentrynames minden 11 karakter szóközökkel
         Sdentrynames minda 11 Karakter szóközökkel
         Sdyear
         Sdmonth
         Sdday
         Sdhours
         Sdminutes
         Sdseconds
................................................................................
 1 = használja A méret info rutin
#if Sdusesizeinfo = 1
>>>      Sdreceivebuffer18:
................................................................................
>>>      Sdrequestcid:
................................................................................
>>>      Sdrequestcsd:
   ' 16 bytes, MSB first
................................................................................
>>>      Sdcalculatesize:
   Sdrequestcsd után lehet hívni
      ' v2+
   ' Bits 127-126 = 01 (byte 1.6 = 1, 1.7 = 0)
   ' C_SIZE 22 bits 69-48 (bytes 8&B00111111,9,10)
   ' Size = C_SIZE * 2^19
   ' v1.x:
   ' Bits 127-126 = 00
   ' C_SIZE 12 bits 73-62 (bytes 7&B00000011, 8, 9&B11000000)
   ' C_SIZE_MULT 3 bits 49-47 (bytes 10&B00000011, 11&B10000000)
   ' READ_BL_LEN 4 bits 84-80 (byte 6&B00001111)
   ' Size = (C_SIZE+1) * 2^(C_SIZE_MULT+2) * 2^READ_BL_LEN
................................................................................
>>>      Sdrequeststatus:
   SD kérés állapota
................................................................................
#if Sdusecrc7 = 1
>>>      Sdcheckresponsecrc7:
   Fogadja az SD választ, és ellenőrzi a CRC
................................................................................
>>>      Function Sdcrc7(byval Sdarray As Byte) As Byte
   Kiszámítja CRC7 az 5 Első byte Sdarray
================================================================================
Sd status kódok:
   0 = Siker (nincs hiba található)
   1 = Időtúllépés az inicializálás CMD0
   2 = Időtúllépés az inicializálás CMD8
   3 = Időtúllépés az inicializálás first CMD58
   4 = Időtúllépés a kezdeti CMD55 + ACMD41 hurok
   5 = Időtúllépés az inicializálás második CMD58
   6 = Időtúllépés a CMD13
   7 = Időtúllépés várakozás közben & H00 & HFE
   8 = Minimális inicializálási részletesen meg nem határozott hiba 1
   9 = Minimális inicializálási részletesen meg nem határozott hiba 2
   10 = R1 tétlen (futás inicializálás)
   11 = R1 törli alaphelyzetbe
   12 = R1 illegális parancs
   13 = R1 parancsot CRC hiba
   14 = R1 sorozat törlés hiba
   15 = R1 cím hiba
   16 = R1 paraméter hiba
   17 = R3 nem egy SD-kártyát
   18 = R3 tápfeszültség határon kívüliek
   19 = R7 nem támogatott feszültség vagy VHS hiba CMD8 parancs
   20 = R7 meghatározatlan hiba CMD8 válasz
   21 = Nem támogatott FAT32 gyökér cluster számát (nem 2)
   22 = R3 kártyával bekapcsolás foglalt (OCR.31 = 0)
   23 = Nem támogatott fájlrendszer
   24 =
   25 =
   26 = A fájl bejegyzés talált
   27 = A könyvtár bejegyzést talált
   28 = A rendelkezésre álló (korábban törölt) könyvtárban helyet talált
   29 = Nem támogatott szektorok számát klaszter
   30 =
   31 = EOC End Of Cluster lánc jelző található
   32 = EOD End Of Directory jelző található
   33 = Alkönyvtár. vagy .. bejegyzést találtam
   34 = A kötet ID talált
   35 = Nem támogatott szektor mérete
   36 = Hosszú fájlnév találtam
   37 =
   38 =
   39 =
   40 =
   41 = Adat elutasította CRC hiba miatt
   42 = Adat elutasította Write Error miatt
   43 = Szabad FAT bejegyzés található
   44 = vége FAT és nem szabad belépés talált (partíció tele)
   45 =
   46 = kerestünk a teljes FAT16 gyökérkönyvtárba, de nem talált, amit kerestünk
   47 = Szülő könyvtár mutató talált
   48 = A fájl vagy alkönyvtár található
Állapot bitek:
   Sdeof = 1 :  EOF jelző                               (Vége jelző)
   Sdreaddestination    : 0 = Sdbuffer, 1 = Sdfatbuffer    Olvasáskór (Választás a 2 Adat(512Bytes) buffer kőzőt)
   Sdwriteorigin        : 0 = Sdbuffer, 1 = Sdfatbuffer  Íráskor    (Választás a 2 Adat(512Bytes) buffer kőzőt)
   Sdcreatemode         : 0 = Fájl 1 = alkönyvtár
   Sdclosefile = 1      : Lezárja az aktuális fájlt
   Sdpartitionfull = 1  : a partíció tele van (nincs több szabad FAT bejegyzés)
   Sdsavedatasector = 1 : menteni az aktuális adatok szektorba
   Sdfatcontinue = 1    : tovább hurok segítségével az aktuális FAT szektor
   Sddirlistdirection   : 0 = előre, 1 = hátra         Haladás iránya jelző
   Sddirliststartpoint = 1 : A könyvtár hátra lista elérte kiindulópontja
   Sddirlistendpoint = 1   : A könyvtár előre lista végére ért pontja
   Sddirlistoutside = 1 : Vagyunk kívül a könyvtár klaszter tömb, amikor felsorolja a könyvtárat
   Sdlfncontinue = 1    : Folyamatos összeállítása vagy nyomtatás a hosszú fájlnév
   Sdlfnfound = 1       : Utolsó könyvtár bejegyzést a hosszú fájlnév találtak
   Sdappendcontinue = 1 : Továbbra is összehasonlítja a fájlnév
   Sdappendfound = 1    : Fájlt talált
   Sderaseall = 1       : Minden adatot töröl szektorban is

Kód: Egész kijelölése
Sdyear = 2011
Sdmonth = 5
Sdday = 01
Sdhours = 15
Sdminutes = 57
Sdseconds = 32
Sderaseall = 1   




