⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdfilelib.lst

📁 在单片机keil编辑其中如何创建自己的函数库。方便以后自己调用
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SDFILELIB                                                             01/10/2009 12:18:21 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SDFILELIB
OBJECT MODULE PLACED IN SdFileLib.OBJ
COMPILER INVOKED BY: D:\silabs\IDEFILES\C51\BIN\C51.EXE SdFileLib.c DEBUG OBJECTEXTEND TABS(2)

stmt level    source

   1          #include <c8051f020.h>
   2          #include <math.h>
   3          #include <stdlib.h>//调用 atoi函数
   4          //--------------------------------
   5           struct FAT32_FAT_Item
   6          {
   7           unsigned char Item[4];
   8          };
   9          //-----------------------------------
  10          struct FAT32_FAT
  11          {
  12           struct FAT32_FAT_Item Items[128];
  13          };
  14          
  15          /*
  16           FAT32中对BPB的定义如下  一共占用90个字节
  17          */
  18          struct FAT32_BPB
  19          {
  20           unsigned char BS_jmpBoot[3];     //跳转指令            offset: 0
  21           unsigned char BS_OEMName[8];     //                    offset: 3
  22           unsigned char BPB_BytesPerSec[2];//每扇区字节数        offset:11
  23           unsigned char BPB_SecPerClus[1]; //每簇扇区数          offset:13
  24           unsigned char BPB_RsvdSecCnt[2]; //保留扇区数目        offset:14
  25           unsigned char BPB_NumFATs[1];    //此卷中FAT表数       offset:16
  26           unsigned char BPB_RootEntCnt[2]; //FAT32为0            offset:17
  27           unsigned char BPB_TotSec16[2];   //FAT32为0            offset:19
  28           unsigned char BPB_Media[1];      //存储介质            offset:21
  29           unsigned char BPB_FATSz16[2];    //FAT32为0            offset:22
  30           unsigned char BPB_SecPerTrk[2];  //磁道扇区数          offset:24
  31           unsigned char BPB_NumHeads[2];   //磁头数              offset:26
  32           unsigned char BPB_HiddSec[4];    //FAT区前隐扇区数     offset:28
  33           unsigned char BPB_TotSec32[4];   //该卷总扇区数        offset:32
  34          
  35           unsigned char BPB_FATSz32[4];    //一个FAT表扇区数     offset:36
  36           unsigned char BPB_ExtFlags[2];   //FAT32特有           offset:40
  37           unsigned char BPB_FSVer[2];      //FAT32特有           offset:42
  38           unsigned char BPB_RootClus[4];   //根目录簇号          offset:44
  39           unsigned char FSInfo[2];         //保留扇区FSINFO扇区数offset:48
  40           unsigned char BPB_BkBootSec[2];  //通常为6             offset:50
  41           unsigned char BPB_Reserved[12];  //扩展用              offset:52
  42           unsigned char BS_DrvNum[1];      //                    offset:64
  43           unsigned char BS_Reserved1[1];   //                    offset:65
  44           unsigned char BS_BootSig[1];     //                    offset:66
  45           unsigned char BS_VolID[4];       //                    offset:67
  46           unsigned char BS_FilSysType[11]; //                  offset:71
  47           unsigned char BS_FilSysType1[8]; //"FAT32    "         offset:82
  48          };
  49          
  50          
  51          //-----------------------------------------
  52          xdata struct file_content_info
  53          {
  54          unsigned long file_size;      //文件的大小
  55          unsigned long frist_clust;      //文件的起始簇
C51 COMPILER V7.06   SDFILELIB                                                             01/10/2009 12:18:21 PAGE 2   

  56          unsigned long current_clust;    //第几族
  57          unsigned char current_sector;   //一族中的第几扇
  58          unsigned int  current_byte;     //一扇中的第几字节
  59          unsigned long file_name_sector;   //文件名所在的扇区
  60          unsigned int  file_name_byte;   //文件名在的字节位置
  61          }file[5];
  62          /*
  63            FAT32初始化时初始参数装入如下结构体中
  64          */
  65          struct FAT32_Init_Arg
  66          {
  67           unsigned long Total_Sectors;           //磁盘的总容量
  68           unsigned long FirstDirClust;         //根目录的开始簇
  69           unsigned long FirstDataSector;     //文件数据开始扇区号
  70           unsigned int  BytesPerSector;      //每个扇区的字节数
  71           unsigned int  FATsectors;              //FAT表所占扇区数
  72           unsigned int  SectorsPerClust;     //每簇的扇区数
  73           unsigned long FirstFATSector;      //第一个FAT表所在扇区
  74           unsigned long FirstDirSector;      //第一个目录所在扇区
  75          // unsigned long RootDirSectors;      //根目录所占扇区数
  76          // unsigned long RootDirCount;      //根目录下的目录与文件数
  77          };
  78          //---------------------------------------------------------------
  79          xdata unsigned char FAT32_Buffer[512] ; //扇区数据读写缓冲区
  80          //xdata unsigned char FAT_Buffer[512];  //操作FAT时数据读缓冲区
  81          xdata struct FAT32_Init_Arg Init_Arg1;      //初始化参数结构体实体
  82          //struct FileInfoStruct FileInfo;       //文件信息结构体实体
  83          unsigned long xdata se=0;           //要操作的扇区数
  84          //unsigned long xdata current_clust;
  85          //unsigned int xdata  clust_num;
  86          unsigned char xdata file_num=0,file_byte=0xff;            //打开文件的数目
  87          //unsigned char xdata hzk[1024];            //存放液晶字库
  88          //unsigned char xdata ch1[90];            //一条记录86个字节和串口中断条码数据
  89          //unsigned char xdata count=0,count_flag,connect_data[5]; 
  90          
  91          #define SYSCLK 24000000
  92          sbit CS=P3^7;
  93          unsigned char data cmd[6]={0x40,0x00,0x00,0x00,0x00,0x95};
  94          //-----------函数申明--------------------------------------------
  95           void MCU_init();
  96          //SD卡的SPI初始化
  97           void SD_SPI_init();
  98          //小端转大端
  99           unsigned long Little_To_Big(unsigned char *dat,unsigned char len);
 100          //打开或创建文件
 101           unsigned char fopen(char file_name[8]);
 102          //关闭文件代号
 103           void fclose(unsigned pfile);
 104          //文件定位
 105           void fseek(unsigned char pfile,unsigned long len);
 106          //读区文件内容
 107           void fread(unsigned char pfile,unsigned char *store,unsigned int read_num);
 108          //写入文件内容,只能写在结尾
 109           void fwrite(unsigned char pfile,unsigned char *store,unsigned int write_num);
 110          //写入文件内容,删除原来文件内容
 111           void fwriteall(unsigned char pfile,unsigned char *store,unsigned int write_num);
 112          //汉字库与液晶汉字库的转换
 113           void HZKLCD(unsigned char *ch,unsigned char *CH);
 114          //字符串转数字
 115           unsigned long find1(unsigned char pfile,unsigned char pfile1,unsigned char len1,unsigned char *array,unsi
             -gned char len,unsigned char len2);
 116          
C51 COMPILER V7.06   SDFILELIB                                                             01/10/2009 12:18:21 PAGE 3   

 117          unsigned char SD_SPI_init_1(); 
 118          void SD_CMD(unsigned char *cmd);
 119          void FAT32_Init();
 120          unsigned long Little_To_Big(unsigned char *dat,unsigned char len);
 121          void Write_SD_Sector(unsigned long sector);
 122          void Read_SD_Sector(unsigned long sectors);
 123          
 124          #define ulong unsigned long
 125          #define uchar unsigned char
 126          #define uint unsigned int
 127          
 128          //-------------函数声明-----------------------------------------
 129          uchar file_name_compare(uchar *file_name,uchar *Name);
 130          uchar fopen(char file_name[8]);
 131          ulong FAT32_GetNextCluster(ulong LastCluster);
 132          unsigned long Add_Newclust(unsigned char pfile);
 133          unsigned long find_emptyclust();
 134          void write_size(unsigned char pfile,unsigned int write_num);
 135          
 136          
 137          
 138          
 139          void MCU_init()
 140          { 
 141   1        WDTCN = 0xde;
 142   1        WDTCN = 0xad;
 143   1        XBR0=0x02;      //选择.P0.0 - P0.3分别为SPI接口的SCK、MISO、MOSI和NSS
 144   1        //XBR0=0x06;    //P0.0和P0.1为串口,P0.2、P0.3、P0.4和P1.0为SPI接口
 145   1        XBR1=0x00;      
 146   1        XBR2=0x44;      //允许功能选择开关有效,开启UART1串口
 147   1        P0MDOUT=0x1d;//0x34;    //选择SCK、MOSI、NSS为推拉式输出,MISO为开漏式,作为数据输入口
 148   1        P1MDOUT=0x40;   //选择P1.6 LED为推拉式输出
 149   1        P3=0x82;      //READY 输入口
 150   1        P74OUT=0x00;    //P4 - P7 漏极开路
 151   1        P4=0x0ff;     //P4 输入
 152   1        SPI0CFG=0xc7;   //选择在时钟的第2个边沿采样,SCK的空闲状态为高电平,移位位数为8
 153   1        SPI0CN=0x03;    //允许主方式,允许SPI
 154   1        SPI0CKR=SYSCLK/2/12000000-1;//SPI的波特率为12Mb/s
 155   1      }
 156          //--------------------------------------------------- 
 157          //Name :SD_SPI_init_1
 158          //Fun  :SD 卡进入 SPI 模式 
 159          //In   :none 
 160          //Out  :0 - successful;  1 - failed
 161          //--------------------------------------------------- 
 162          unsigned char SD_SPI_init_1() 
 163          { 
 164   1        unsigned char j,retry;
 165   1      
 166   1        for(j=0;j<10;j++)     //Send 80 clocks
 167   1        {
 168   2        SPI0DAT = 0xff; 
 169   2          while(!SPIF);
 170   2        SPIF = 0;
 171   2        }
 172   1      
 173   1        retry = 0;
 174   1        do
 175   1        {
 176   2          SD_CMD(cmd);      //Send CMD0
 177   2          if(retry++>20)         /* 超时返回 */
 178   2          return 1;
C51 COMPILER V7.06   SDFILELIB                                                             01/10/2009 12:18:21 PAGE 4   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -