资源简介
SD卡的protues仿真
keil 与protues联机仿真
at89c52单片机
代码片段和文件信息
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/**************定义管脚*************/
sbit scl=P1^0;//同步时钟 入
sbit si=P1^1; //同步数据 入
sbit cs=P1^2; //片选
sbit so=P1^3; //数据出
/**********************************/
bit is_init;
uchar pbuf[12];
/*关于错误码的定义****************/
#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--);
}
/*写入一个字节*******************/
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个字节,形参用指针,
{ //指向6个字节命令,
spi_write(pcmd[i]);
}
do //看看写进去没有通过so管脚
{
temp=spi_read();
time++;
}
while((temp==0xff)&&(time<<100));//一直到读到的不是0xff或超时,退出去
return(temp);
}
/****************************************/
/*/以上为基本的命令或函数,下面的是具体的函数 */
/*************** sd card reset goto spi use cmd0 **********/
uchar sd_reset(void)
{
uchar timetempi;
uchar code pcmd[6]={0x400x000x000x000x000x95};
is_init=1;//下面需要慢点,须=1,快点时=0,即可
cs=1;
for(i=0;i<0x0f;i++) //复位时,至少要72个时钟周期,
{ //现在是,15*8=120个clk
spi_write(0xff);
}
cs=0;time=0;
do
{
temp=write_cmd(pcmd);
time++;
if(time==100)
{
return(INIT_CMD0_ERROR);
}
} while(temp!=0x01); //校验码是0x01,是0x01时,表示写入成功
cs=1;
spi_write(0xff);//时序上要求补8个clk
return(0);//返回0,写入成功
}
/*****************************************/
/*初始化,用1号命令*********************/
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 扇区的读写 ************/
uchar sd_write_sector(ulong addruchar *buffer)
{
uchar temptime;
uint i;
uchar pcmd[]={0x580x000x000x000x000xff};
addr<<=9;//等同于 addr=addr*512一扇区有512字节,将扇区地址转换成字节地址
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);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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
- 上一篇:c51单片机跑马灯单键控制
- 下一篇:天猫淘宝数据爬取源码可直接使用.zip
相关资源
- 矩阵键盘数码管显示+protues仿真源程序
- protues中AMPIRE12864液晶数据手册及程序
- 在Protues中怎样更改51单片机默认RAM大
- 全自动洗衣机PROTUES仿真+源程序+完整
- STM32 F103R6 寄存器方式读写GPIO源代码
- 四按键控制四个LED亮灭的源程序和P
- protues 太阳能LED路灯充电控制器模拟充
- protues下仿真红外发射电路
- 用protues仿真的按键式波形发生器
- protues标准交通灯设计
- protues 仿真直流电机控制系统
- protues仿真 数字时钟的课程设计
- 51单片机 矩阵键盘 protues ISIS 源码和仿
- 低频信号发生器protues仿真与C程序
- 基于单片机的交通灯keil仿真程序和
- protues成功仿真AD(TLC549)采集系统.
- 微机原理课程设计 --汽车信号灯控制
- 微机原理课程设计(亲测可用)--吉利
- 课程设计题五:汽车尾灯控制器设计
- 基于protues仿真的数字电子秤
- 51单片机Protues仿真舵机,可以通过按
- 485通信 protues仿真
- 简易波形发生器
- 基于单片机的时间设计
- 放大器放大信号protues仿真
- 51单片机 简易电子时钟
- 温度测试代码加仿真图protues
- MCS-51单片机Gps接收程序
- 数字钟protues仿真,纯硬件实现,功能
- 51单片机——简易计算器设计源码、
评论
共有 条评论