| /*----------------------------------------------------------- 芯片    :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);
 
 }
 
 
 
 
 
 
 
 
 |