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

📄 main.c

📁 用单片机对SD卡的读写的一个例程。下载后运行KEIL即可编译
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include <SM89516A.H>
#include "INC\CONFIG.H"
#include "string.h"
#include "INC\V24INT.H"							/* 串口操作相关函数 */
#include "INC\SDDRIVER.H"						/* SD卡操作的相关函数 */
#include "inc\sdhal.h"

#define CMD_SD_INIT		   0x00				/* SD卡初始化卡命令  */
#define CMD_SD_READ    	   0x01				/* SD卡读命令        */
#define CMD_SD_WRITE   	   0x02				/* SD卡写命令        */
#define CMD_SD_ERASE	   0x03				/* SD卡擦除命令      */

#define CMD_DATA_TRANS	   0x04				/* 将sd_buf中的数据发送到PC机 */
#define CMD_DATA_RECV	   0x05				/* 接收来自串口的数据,并放入sd_buf中 */
 
/* SD卡读写缓冲区,比SD卡一个块大8字节 */  
INT8U sd_buf[520];

int main (void)
{
	INT32U bufaddr;														
	INT32U blockaddr;
	INT32U blocknum;
	
	SCONF |= 0x03;
	DBANK = 0;

	DISABLE;
	//Timer_0_Init();
 	V24_Init();
 	ENABLE;

	ES  = 1;
	EA  = 1;	
	TR1 = 1;
	IT0 = 1;                        /*INT0 下降沿触发,计费器数据中断*/
	IT1 = 1;
	EX1 = 0;					    //关外部中断1
    EX0 = 0;                        //关外部中断0
	
	SPI_SendByte(0xAA);
	SPI_SendByte(0xAA);
    while(1)                            							 		/* 等待串口中断 */
    { 
    	if (V24_Inp_Ptr==8)	 																			/* 如果串口收到数据 */
    	{ 
    		switch(V24_Rx_Buf[0])

    		{
    			case CMD_SD_INIT: V24_Rx_Buf[1] = SD_Initialize();				/* 初始化SD卡 */
    			break; 
    		
    			case CMD_SD_READ:
    				 blockaddr = (V24_Rx_Buf[1] << 24) + (V24_Rx_Buf[2] << 16) +	/* 计算块地址 */
    							 (V24_Rx_Buf[3] << 8) + V24_Rx_Buf[4];
    				 V24_Rx_Buf[1] = SD_ReadBlock(blockaddr, sd_buf);		 	/* SD卡单块读 */ 			
    			break;
    		 	    		
    			case CMD_SD_WRITE:	 
    				 blockaddr = (V24_Rx_Buf[1] << 24) + (V24_Rx_Buf[2] << 16) + 
    							 (V24_Rx_Buf[3] << 8) + V24_Rx_Buf[4];
    				 V24_Rx_Buf[1] = SD_WriteBlock(blockaddr, sd_buf);			/* SD 卡单块写 */
    			break;
    			
    			case CMD_SD_ERASE:	 
    				 blockaddr = (V24_Rx_Buf[1] << 24) + (V24_Rx_Buf[2] << 16) + 
    							 (V24_Rx_Buf[3] << 8) + V24_Rx_Buf[4];
    				 blocknum  = (V24_Rx_Buf[5] << 16) + (V24_Rx_Buf[6] << 8) +
    				 			 (V24_Rx_Buf[7]);
    				 V24_Rx_Buf[1] = SD_EraseBlock(blockaddr, blocknum);		/* SD 卡擦除 */
    			break;
   			
    			case CMD_DATA_RECV:	 
    				 bufaddr = (V24_Rx_Buf[1] << 8) + V24_Rx_Buf[2];				/* 计算缓冲区地址 */
    				 memcpy(sd_buf + bufaddr, &V24_Rx_Buf[3], 5);				/* 收到数据放入sd_buf */
    			break;
    			
    			case CMD_DATA_TRANS: 
    				 bufaddr = (V24_Rx_Buf[1] << 8) + V24_Rx_Buf[2];				/* 计算缓冲区地址 */ 
    				 memcpy(&V24_Rx_Buf[1], sd_buf + bufaddr, 7);				/* sd_buf数据放入rcv_buf */
    			break;  							
    	
    			default: break;
    		}
    		
    	    SendRxBuf();												/* 发送 rcv_buf */  		  		
        	V24_Inp_Ptr = 0;  													/* 接收标志清0  */
     	}
	}
   
	return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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