资源简介
51单片机读写SD卡程序,使用FAT文件系统,51单片机也可以有海量存储了

代码片段和文件信息
#include “SD.h“
#include “FAT.h“
//FAT系统信息
unsigned long FATOffset; //FAT表的起始绝对扇区号
unsigned long RDTOffset; //RDT表的起始绝对扇区号
unsigned long DataOffset; //Data区的起始绝对扇区号
unsigned int MaxCluster; //最大的簇序号FAT16
unsigned int RDTEntryNum; //根目录项数
unsigned char ClusterSize; //每簇扇区数
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//将一个16位数按字节倒序
void Swap16(unsigned int *Var)
{
*Var = ((*Var & 0xFF00)>>8 | (*Var & 0x00FF)<<8);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//将一个32位数按字节倒序
void Swap32(unsigned long *Var)
{
*Var = ((*Var & 0xFF000000)>>24 | (*Var & 0x00FF0000)>>8 | (*Var & 0x0000FF00)<<8 | (*Var & 0x000000FF)<<24);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//读取并计算SD卡文件系统信息,返回0x00时操作成功,0xFF时出错。
unsigned char InitFAT()
{ //FAT文件系统参数
unsigned long RelSector;
unsigned long TotalSector;
unsigned int ReservedSector;
unsigned char FATNum;
unsigned int FATSize;
//初始化SD卡
if(InitSD()!=0x00) return 0xFF;
//读取FAT文件系统参数
if(0x00 != ReadSectorPartial(0 454 4 (unsigned char *)&RelSector)) return 0xFF;
Swap32(&RelSector);
if(0x00 != ReadSectorPartial(0 458 4 (unsigned char *)&TotalSector)) return 0xFF;
Swap32(&TotalSector);
if(0x00 != ReadSectorPartial(RelSector 14 2 (unsigned char *)&ReservedSector)) return 0xFF;
Swap16(&ReservedSector);
if(0x00 != ReadSectorPartial(RelSector 13 1 &ClusterSize)) return 0xFF;
if(0x00 != ReadSectorPartial(RelSector 16 1 &FATNum)) return 0xFF;
if(0x00 != ReadSectorPartial(RelSector 17 2 (unsigned char *)&RDTEntryNum)) return 0xFF;
Swap16(&RDTEntryNum);
if(0x00 != ReadSectorPartial(RelSector 22 2 (unsigned char *)&FATSize)) return 0xFF;
Swap16(&FATSize);
//计算FAT系统信息
FATOffset = RelSector + ReservedSector;
RDTOffset = FATOffset + FATNum * FATSize;
DataOffset = RDTOffset + (RDTEntryNum * 32) / 512;
MaxCluster = (unsigned int)((TotalSector + 1 - DataOffset) / ClusterSize + 1);
return 0x00; //初始化成功
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//在SD卡根目录下查找指定文件,返回0x00时操作成功,0xFF时出错。
//参数pFile为文件结构体指针;pFileName为要查找的文件名。
//文件名长11字节;前8个为文件名,不足8字节的在后面补空格;后3字节为文件后缀;所有字符为ASCII码大写字符。
unsigned char FileOpen(PFILE pFile char *pFileName)
{
unsigned int Entry EntrySecOffset;
unsigned long EntrySector;
unsigned char i;
idata char FileName[11];
for(Entry=0; Entry { //计算Entry的起始位置
EntrySector = (Entry * 32) / 512 + RDTOffset;
EntrySecOffset = (Entry * 32) % 512;
//读取Entry的前11字节
if(0x00 != ReadSectorPartial(EntrySector EntrySecOffset 11 FileName)) return 0xFF;
//比较文件名
for(i=0; i<11; i++)
{
if(FileName[i] != *(pFileName+i)) bre
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 749 2006-10-05 11:27 SDCard\STARTUP.OBJ
文件 5115 2002-04-16 14:32 SDCard\STARTUP.A51
文件 8468 2006-10-05 11:24 SDCard\FAT.c
文件 164 2007-09-06 15:37 SDCard\SD.plg
文件 1699 2006-06-30 10:32 SDCard\MAIN.bak
文件 4127 2006-10-05 11:27 SDCard\main.LST
文件 2254 2006-10-05 10:03 SDCard\SD_Uv2.Bak
文件 7424 2006-10-05 11:27 SDCard\main.OBJ
文件 1549 2006-07-12 17:05 SDCard\main.c
文件 11200 2006-10-05 11:27 SDCard\SD.LST
文件 3267 2006-10-05 09:52 SDCard\SD.bak
文件 689 2006-10-05 10:09 SDCard\FAT.h
文件 14472 2006-10-05 11:27 SDCard\FAT.LST
文件 26095 2006-10-05 11:27 SDCard\FAT.OBJ
文件 3333 2006-10-05 09:57 SDCard\SD.h
文件 8467 2006-10-05 11:24 SDCard\FAT.c.bak
文件 4758 2006-10-05 09:42 SDCard\SD.c
文件 11679 2006-10-05 11:27 SDCard\STARTUP.LST
文件 1566 2006-06-30 15:18 SDCard\main.c.bak
文件 679 2006-10-05 10:06 SDCard\FAT.h.bak
文件 4762 2006-10-05 09:40 SDCard\SD.c.bak
文件 4912 2006-06-26 10:45 SDCard\FAT.bak
文件 100 2006-10-05 11:28 SDCard\SD.lnp
文件 35652 2006-10-05 11:28 SDCard\SD.M51
文件 15782 2006-10-05 11:28 SDCard\SD.hex
文件 3334 2006-10-05 09:57 SDCard\SD.h.bak
文件 1120 2006-10-05 10:03 SDCard\SD_Opt.Bak
文件 17059 2006-10-05 11:27 SDCard\SD.OBJ
文件 45712 2006-10-05 11:28 SDCard\SD
文件 2299 2007-09-06 15:37 SDCard\SD.Uv2
............此处省略5个文件信息
- 上一篇:多台或者两台 KINECT连接同一台电脑PC
- 下一篇:简易单片机4人抢答器
相关资源
- 51单片机通信采样proteus仿真方波转化
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
评论
共有 条评论