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

📄 main.c

📁 c51读写SD卡原代码,c51编写,串口接收
💻 C
字号:
#include "common.H"
#include "DEVICE.H"
#include "HAL.H"
#include "HPI.H"
#include "FAT.H"
#include "FAT32.H"
#include "HPI32.H"

FLAGS bdata bFlags;
extern unsigned char xdata DBUF[];//BUFFER_LENGTH];
/////////////////////////////////////////////////
extern unsigned long xdata DirStartCluster,DirStartCluster32;
extern unsigned char xdata UARTBUF[];//UARTBUF_LENGTH];
extern Command_Def xdata Command;
extern SYS_INFO_BLOCK xdata DeviceInfo;	
extern FILE_INFO xdata ThisFile;
//////////////////////////////////////////


void Init_Port()
{
	P0 = 0xFF;
	P1 = 0xFF;
	P2 = 0xFF;
	P3 = 0xFF;
}

/*Serial Port */
/*Mode            = 1  /8-bit UART
  Serial Port Interrupt    = Disabled         */
/*Receive         = Enabled   */
/*Auto Addressing    = Disabled   */
void Init_COMM(void)
{
	SCON = 0x53;
	PCON = 0x80 | PCON;
	T2CON=0x30;
	RCAP2H=0xFF;		// 57600 @ 21.1184MHz: 24000000/(32*(65536-(RCAP2H,RCAP2L)))
	RCAP2L=0xF4;
	TI=0;
	RI=0;
	TR2=1;
	ES = 1;
}

//*******************************************
char code test_data[]={1,2,4,8,0x10,0x20,0x40,0x80,0x55,0xaa,0xa5,0x00,0xff};
//*******************************************
bit TestSRAM()
{
 bit f=1;
 char i;
 unsigned char xdata *p;
 i=0;
 for(p=0;p<0x8000;p++)
  {
   *p=test_data[i];
   if(++i >= sizeof(test_data)) i=0;
  }
 i=0;
 for(p=0;p<0x8000;p++)
  {
   if(*p != test_data[i]) f=0;
   if(++i >= sizeof(test_data)) i=0;
  }
 return f;
}
//*******************************************
void main(void)
{
	unsigned char temp;
	unsigned int i;
	unsigned long xdata time_count;

	Init_Port();
    Init_COMM(); 

   if(!TestSRAM())	//test
    {
     for(temp=0;temp<20;temp++)
      {
       MCU_LED1=!MCU_LED1;
       for(i=0;i<0x8fff;i++) ;
      }
    }
    MCU_LED1 = 1;

	bFlags.bits.bUartInDone=0;	
	DirStartCluster=0;
	DirStartCluster32=0;

	for(temp=0;temp<64;temp++)
		DBUF[temp]=0;  


	ENABLE_INTERRUPTS;
	
	while(TRUE)
	{
        time_count++;		
		if (time_count>1000)  // 过一段时间查询一下SD/MMC卡是否在线  www.mcusky.com
			{
 			DISABLE_INTERRUPTS;
			time_count = 0;
			ENABLE_INTERRUPTS;
	
			if(SdInit())			//初始化SD卡
		     {		   		
		      if(bFlags.bits.SLAVE_ONLINE == FALSE)
		   	  {bFlags.bits.SLAVE_FOUND=TRUE;
		   	   bFlags.bits.SLAVE_ONLINE =TRUE;
			  }
		     }
	        else 
			{	
	   		 if(bFlags.bits.SLAVE_ONLINE ==TRUE)
		   	   {bFlags.bits.SLAVE_REMOVED=TRUE;
		   	    bFlags.bits.SLAVE_ONLINE =FALSE;
			   }
		    }	
		 }
		if(bFlags.bits.SLAVE_FOUND){
			DISABLE_INTERRUPTS;
			bFlags.bits.SLAVE_FOUND=FALSE;

			   	bFlags.bits.SLAVE_ENUMERATED = TRUE;	
		   		DirStartCluster=0;
				DirStartCluster32=0;
				ThisFile.FatSectorPointer=0;
				DeviceInfo.LastFreeCluster=0;
				MCU_LED1=0;
				bFlags.bits.bMassDevice=TRUE;
			ENABLE_INTERRUPTS;	
			}
		if(bFlags.bits.SLAVE_REMOVED)
           {
			DISABLE_INTERRUPTS;
			bFlags.bits.SLAVE_REMOVED=FALSE;
			bFlags.bits.SLAVE_ENUMERATED = FALSE;
			bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
			MCU_LED1=1;MCU_LED2=1;
			ENABLE_INTERRUPTS;	
			}
		if(bFlags.bits.bUartInDone){
			DISABLE_INTERRUPTS;
			bFlags.bits.bUartInDone=0;

			if(DeviceInfo.FAT)	//FAT32
				UartHandler32();
			else
				UartHandler();	//FAT16
			
			ENABLE_INTERRUPTS;	
			}
		if(bFlags.bits.bMassDevice)
		  {
			DISABLE_INTERRUPTS;
			bFlags.bits.bMassDevice=FALSE;
			if(InitFileSystem())
				{
				bFlags.bits.SLAVE_IS_ATTACHED = TRUE;				
				MCU_LED2=0;	
				}
			else
				{				
				bFlags.bits.SLAVE_IS_ATTACHED = FALSE;				
				}		
				ENABLE_INTERRUPTS;	
			}	
		
	}
    	
}

⌨️ 快捷键说明

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