因仑“3+1”工程特种兵精英论坛

标题: SD卡读写 [打印本页]

作者: 张衍波    时间: 2015-5-6 09:40
标题: SD卡读写
/*-----------------------------------------------------------
芯片    :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);

}



[attach]2770[/attach]







欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4