⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readsd.c

📁 C51读写SD卡,SD卡使用SPI模式进行读写
💻 C
字号:
/************************************************************************引用头文件***********************************************************************/#include <absacc.h> #include <reg52.h>#include <stdio.h>#include <string.h>#include "SDCARDREAD.h"#include "spi.c"#include "SD.c"//初始化系统void init_SYS(void){  TMOD=0x21;  //设置波特率为57600定时器1方式和定时器0使用16位定时器  TL1=0xff;   //设置波特率为  TH1=0xff;  SCON=0x50;//串口方式1,10位异步收发  PCON=0x80;//波特率倍增  //TR1=1;//打开定时器开始计时  AUXR&=0xbf;  //ES=1;//设置定时器0计时,100MS溢出一次  TH0=0x4C;  TL0=0X00;  ET0=1;                //开定时器0中断    TI=0;  RI=0;  //TBDATA=78;           //78*200=15600≈8000000/512=15625=1秒}//===================================================================== //串口接收数据 //===================================================================== uchar UARTin(uchar *RecData,uchar longofRecData) {   uchar i=0;  Timeout=0;  for(i=0;i<longofRecData;i++)  {      TR0=1;                 //开启超时计数      while(RI==0)            //等待接收1字节数据      {        if(Timeout==1)           //如果延时Delaytime未接收到数据退出循环        {		  Timeout=0;          TR0=0;          return 0;        }      }      act=0;                       //如果接收到了则act归零,act用来记延时      TR0=0;	  RI=0;      *(RecData+i)=SBUF;  }  return 1;} //===================================================================== //串口发送数据 //===================================================================== void UARTout(uchar *sendData,uchar sendNum) {   uchar i;//	while(TI==0);              //正处于移发送忙   for(i=0;i<sendNum;i++)  {    SBUF= *(sendData++);       //取字节到发送串口缓冲区 	while(TI==0);              //正处于移发送忙     //可以发送新数据    TI=0;                     //置发送忙标志,启动发送   }} /******************************************************************************main主函数,看接收到的SD卡的厂商和序列号*****************************************************************************/void main(){//$1  uchar i=0;  uchar Request[3]={0xbb,0xaa,0xcc};    init_SYS();  Timeout=0;  cou=0;  act=0;	for(i=0;i<5;i++)publicdata[i]=0;  //初始化  EA=1;                   //开全局中断	//TR0=1;					//启动TC0开始计时	TR1=1;                  //打开定时器1开始计时 	while(1)	{//$4	 UARTout(Request,3);   	 if(UARTin(Request,1)==1)	 {   	 	if (Request[0]=='X')	   //读取SD卡信息		 {      	//* send command CMD0 to SD Card (reset SD Card) 	/*Request[0]=SD_SendCmd2(0,0);	//* send command CMD1 to SD Card (set SD Card Model:SPI) 	Request[1]=SD_SendCmd2(1,0);	UARTout(Request,3);*/      		 sd_init();		 UARTout(publicdata,8);		 }  	  }	}//$4}//$1//定时器0中断,50ms一次中断void timer0(void)interrupt 1 using 1{	if(cou++==20)	{//每秒act+1		cou=0;		if(act++==DelayTime)		{			//BUSY_AT45=!BUSY_AT45;			act=0;			Timeout=1;			//UARTout(Request,3);		}	}	//计数器重新装载	TH0=0x4C;	TL0=0X00;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -