您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机dsPIC30F6014A读写SD卡C30 正文
dsPIC30F6014A读写SD卡C30

dsPIC30F6014A读写SD卡C30

点击数:7687 次   录入时间:03-04 12:03:21   整理:http://www.55dianzi.com   PIC单片机
    lcd_enable();
    PORTD=0X0e;                //显示开,光标开,闪烁
    lcd_enable();
    PORTD=0X06;                //文字不动,光标右移
    lcd_enable();
    PORTD=0X86;                //时间显示地址
    lcd_enable();
 }

//***********************LCD显示函数************************************
void lcd_display()
 {  
    unsigned char i,j;
    lcd_init();
    for(i=0;i<3;i++)          //一共3字节数据
       {
         write(lcd[i]);       //查表获取数据并调用写一个字节数据函数送LCD显示
         for(j=0;j<5;j++)     //延时一段时间(主要是为了控制显示的速度)
          {delay();}
       }
 }

//****************写一字节函数***************************
unsigned char SPI_WriteByte(unsigned char val)
{
 SPI2BUF = val;                //待发送数据装载到发送寄存器
 while(!IFS1bits.SPI2IF);      //等待发送完成
    IFS1bits.SPI2IF=0;            //清除发送完成标志位
 return SPI2BUF;               //读取接收寄存器(即使是无效数据也需清空)
}

//****************接收一字节函数**************************
unsigned char SPI_ReadByte(void)
{
 SPI2BUF = 0xff;               //发送寄存器装载数据,以启动数据接收
 while(!IFS1bits.SPI2IF);      //等待接收完成
    IFS1bits.SPI2IF=0;            //清除接收完成标志位
 return SPI2BUF;               //读取接收到的数据
}

//*****************发送命令函数****************************
unsigned char SD_SendCommand(unsigned char cmd,unsigned long arg)
{
 unsigned char r1;
 unsigned char retry1=0;      //重复操作次数
 
 cs=0;                        //使能片选信号
 
 SPI_WriteByte(cmd | 0x40);   //分别写入命令
 SPI_WriteByte(arg>>24);      //数据段第4字节
 SPI_WriteByte(arg>>16);      //数据段第3字节
 SPI_WriteByte(arg>>8);       //数据段第2字节
 SPI_WriteByte(arg);          //数据段第1字节
 SPI_WriteByte(0x95);         //CRC效验和
 
 while((r1 = SPI_WriteByte(0xff)) == 0xff)//等待响应
  if(retry1++ > 200) break;//超时退出     
     
 cs=1;                        //清初片选信号

 return r1;                   //返回状态值
}

//*******************SD开初始化函数**************************
unsigned char sd_reset()
{
 unsigned char i,tmp;
 unsigned char retry;            //重复次数
 unsigned char r1=0;              
 retry=0;
 delay();
 delay();
 do
 {
        for(i=0;i<100;i++) SPI_WriteByte(0xff);
      
  r1 = SD_SendCommand(0,0);//发idle命令 
  retry++;
  if(retry>20) return 1;   //超时退出 
 } while(r1 != 0x01);      //等待IDLE命令返回

 retry = 0;                    
    cs=0;
  do
 {
        for(i=0;i<100;i++) SPI_WriteByte(0xff);

  r1 = SD_SendCommand(1, 0);         //发Active命令
  retry++;
  if(retry>254) return 1;            //超时退出
       } while(r1);  

    for(i=0;i<100;i++) SPI_WriteByte(0xff);

 r1 = SD_SendCommand(59, 0);            //关crc 
   if (r1) return 1;              //返回不正确,退出初始化

 for(i=0;i<100;i++) SPI_WriteByte(0xff);

    r1 = SD_SendCommand(16, 512);          //设扇区大小512
    if(r1!=0) return 1;                    //返回不正确,退出初始化
 return 0;                              //正常返回 
}

//********************写一个扇区************************** 
unsigned char SD_WriteSingleBlock(unsigned long sector)
{
 unsigned char r1;
 unsigned int i;
    unsigned char retry=0;
 do
 {
        for(i=0;i<100;i++) SPI_WriteByte(0xff);

  r1 = SD_SendCommand(24, sector<<9);//写命令
  retry++;
  if(retry>10) return 1;             //超时退出 
 } while(r1 != 0x00); 

上一页  [1] [2] [3]  下一页


本文关键字:暂无联系方式PIC单片机单片机-工控设备 - PIC单片机