資源簡(jiǎn)介
SD卡的protues仿真
keil 與protues聯(lián)機(jī)仿真
at89c52單片機(jī)

代碼片段和文件信息
#include?
#define?uchar?unsigned?char
#define?uint?unsigned?int
#define?ulong?unsigned?long
/**************定義管腳*************/
sbit?scl=P1^0;//同步時(shí)鐘?入
sbit?si=P1^1;?//同步數(shù)據(jù)?入
sbit?cs=P1^2;?//片選?
sbit?so=P1^3;?//數(shù)據(jù)出
/**********************************/
bit?is_init;
uchar??pbuf[12];
/*關(guān)于錯(cuò)誤碼的定義****************/
#define?INIT_CMD0_ERROR?0X01
#define?INIT_CMD1_ERROR?0X02;
#define?READ_BLOCK_ERROR?0X03;
#define?WRITE_BLOCK_ERROR?0X04;
/*********************************/
void?delay(uchar?i)
{
while(i--);
}
/*寫(xiě)入一個(gè)字節(jié)*******************/
void?spi_write(uchar?x)
{
uchar?i;
for(i=0;i<8;i++)
{
si=((x< scl=0;//low?is?cs
if(is_init)?delay(8);//for?the?v
scl=1;
if(is_init)?delay(8);
}
}
/*********************************/
/*read?a?byte***********************/
uchar?spi_read(void)
{
uchar?temp=0i;
so=1;
for(i=0;i<8;i++)
{
scl=0;
if(is_init)?delay(8);
if(so)?temp=(0x80>>i);
scl=1;
if(is_init)?delay(8);
}
return(temp);
}
/**************************************/
/***********????????write?cmd??**********/
uchar?write_cmd(uchar?*pcmd)
{
uchar?temptime=0i;
for(i=0;i<6;i++) ???//一條命令都是6個(gè)字節(jié),形參用指針,
{ ???//指向6個(gè)字節(jié)命令,
spi_write(pcmd[i]);
}
do?//看看寫(xiě)進(jìn)去沒(méi)有通過(guò)so管腳
{
temp=spi_read();
time++;
}
while((temp==0xff)&&(time<<100));//一直到讀到的不是0xff或超時(shí),退出去
return(temp);
}
/****************************************/
/*/以上為基本的命令或函數(shù),下面的是具體的函數(shù)?*/
/***************??sd?card?reset?goto?spi?use?cmd0?**********/
uchar?sd_reset(void)
{
uchar?timetempi;
uchar?code?pcmd[6]={0x400x000x000x000x000x95};
is_init=1;//下面需要慢點(diǎn),須=1,快點(diǎn)時(shí)=0,即可
cs=1;
for(i=0;i<0x0f;i++) //復(fù)位時(shí),至少要72個(gè)時(shí)鐘周期,
{ //現(xiàn)在是,15*8=120個(gè)clk
spi_write(0xff);
}
cs=0;time=0;
do
{
temp=write_cmd(pcmd);
time++;
if(time==100)
{
return(INIT_CMD0_ERROR);
}
}?while(temp!=0x01);?//校驗(yàn)碼是0x01,是0x01時(shí),表示寫(xiě)入成功
???cs=1;
???spi_write(0xff);//時(shí)序上要求補(bǔ)8個(gè)clk
???return(0);//返回0,寫(xiě)入成功
}
/*****************************************/
/*初始化,用1號(hào)命令*********************/
uchar?sd_init(void)
{
uchar?timetemp;
uchar?code?pcmd[6]={0x410x000x000x000x000xff};
cs=0;
time=0;
do
{
temp=write_cmd(pcmd);
time++;
if(time==100)
{
return?INIT_CMD1_ERROR;
}
}
?while(temp!=0x00);
is_init=0;
cs=1;
spi_write(0xff);
return(0);
}
/************************************************/
/*************??sd?card?扇區(qū)的讀寫(xiě)?????????????????************/
uchar?sd_write_sector(ulong?addruchar?*buffer)
{
uchar?temptime;
uint?i;
uchar?pcmd[]={0x580x000x000x000x000xff};
addr<<=9;//等同于??addr=addr*512一扇區(qū)有512字節(jié),將扇區(qū)地址轉(zhuǎn)換成字節(jié)地址
pcmd[1]=((addr&0xff000000)>>24);//拋棄后24位
pcmd[2]=((addr&0x00ff0000)>>16);
pcmd[3]=((addr&0x0000ff00)>>8);
cs=0;time=0;
do
{
temp=write_cmd(pcmd);
time++;
if(time==100)
{
return(temp);
}
}?while(temp!=0x00);
for(i=0;i<100;i++)
{
spi_read();
}
spi_write(0xfe);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????19215??2009-04-30?20:23??sd.DSN
?????文件??????10232??2009-04-30?20:22??sd.LST
?????文件??????11606??2009-04-30?20:22??sd.OBJ
?????文件????????316??2009-04-30?20:23??sd.PWI
?????文件??????10554??2009-04-30?20:22??sdcard
?????文件???????3557??2009-04-30?20:22??sdcard.hex
?????文件?????????41??2009-04-30?20:22??sdcard.lnp
?????文件??????16024??2009-04-30?20:22??sdcard.M51
?????文件???????1025??2009-04-30?20:23??sdcard.Opt
?????文件???????2371??2009-04-30?20:22??sdcard.plg
?????文件???????2155??2009-04-30?20:23??sdcard.Uv2
????.......??????1024??2009-04-30?17:29??sdcard_Opt.Bak
????.......??????2155??2009-04-30?17:29??sdcard_Uv2.Bak
?????文件?????????58??2009-04-30?16:47??sd管腳.txt
?????文件???????6376??2005-03-22?15:22??STARTUP.A51
?????文件??????14048??2009-04-30?16:52??STARTUP.LST
?????文件????????749??2009-04-30?16:52??STARTUP.OBJ
?????文件??????17453??2009-04-30?20:21??Last?Loaded?sd.DBK
?????文件?????????32??2009-04-30?20:22??sd.__i
?????文件???????4329??2009-04-30?20:22??sd.c
-----------?---------??----------?-----??----
???????????????123320????????????????????20
評(píng)論
共有 條評(píng)論