📄 readsd.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 + -