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