查看: 1079|回复: 0
打印 上一主题 下一主题

SD卡读写

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-6 09:40:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*-----------------------------------------------------------
芯片    :STC12C5A60S2
晶振    :11.0592MHZ
开发平台:KEIL
功能    :向SD卡读写一个扇区,如果成功则激活P0口流水灯,如果失败则无流水灯。并且随程序运行向串口发送运行状态。
波特率  :9600BPS
日期    :11.5.19
其他    :本程序软件模拟SPI,随后我会改为硬件SPI

注意    :下载完程序后请复位系统后运行!(切记!!)
-------------------------------------------------------------*/

#include "STC12C5A60S2.h"
#include "uart.h"
#include "sd.h"
#define uchar unsigned char
#define uint unsigned int

uchar xdata tab[512]; //定义外部ROM,512个字节,数据缓冲区(一个扇区必须写512字节 )

void delay5ms()
{
  uchar a,b;
    for(b=19;b>0;b--)
        for(a=130;a>0;a--);
}

void delay500ms()
{
    uchar a,b,c;
    for(c=23;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
}

void main()
{

        int i;
        uchar flag=0;

        init();                              //初始化串口
        txd_s("串口初始化\n");


        SD_Reset();                         //复位SD卡
        txd_s("SD卡复位完\n");


        SD_Init();                                         //初始化SD卡
        txd_s("SD卡初始化完\n");



        for(i=0;i<512;i++)
        tab=i;                                                //向数据缓冲区中写入0~255 0~255,共512个字节
        txd_s("缓冲区写完\n");


       
        SD_Write_Sector(20,tab);          //将数据缓冲区中的512个字节的数据写入SD卡的第20扇区中
        delay5ms();
        txd_s("扇区写完\n");



        for(i=0;i<512;i++)                                  //清空数据缓冲区
           tab=0;
        txd_s("清缓冲区\n");



        SD_Read_Sector(20,tab);                        //从SD卡的第20扇区中读取512个字节的数据到数据缓冲区
        txd_s("读扇区完\n");



        for(i=0;i<512;i++)
        if(((uchar)i)!=tab)                          //对读出的数据进行匹配,如果不吻合则flag=1,否则flag=0
          {
           flag=1;
           break;
         }
        delay5ms();
        txd_s("匹配完毕\n");



        if(flag==0)        {
        delay5ms();
        txd_s("匹配对 \n");
        P0=0xfe;
        while(1)                        {
        P0=P0>>1|P0<<7;       
        delay500ms();                        }
                                 }

        else                          {
        delay5ms();
        txd_s("匹配错 \n");  }
        while(1);

}






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表