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

📄 main.c

📁 采用811芯片实现单片机读写U盘的源代码
💻 C
字号:
#define MAIN_FILE
#include "include.h"

//XXGFLAGS bdata bXXGFlags;
//extern unsigned char xdata DBUF[BUFFER_LENGTH];

void Init_Timer0(void)
{
	TMOD &= 0xF0;      /* clear Timer 0   */
	TMOD  |= 0x1;
	TL0 = 0xf0;         /* value set by user    *//*定时器0时间,5ms*/
	TH0 = 0xd8;         /* value set by user  */
	ET0 = 1;           /* IE.1*/
	TR0 = 1;           /* TCON.4 start timer  */
//	PT0 = 1;
}

void Init_SpecialInterrupts(void)
{
	IT0 = 0;
	EX0 = 1;
//	PX0 = 0;
}

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 = 0x50;
	PCON = 0x80 | PCON;
//	TMOD = 0x21;
//	TCON = 0x69;    /* TCON */
	//TH1 = 0xfa;		// 9600bps @ 11.0592MHz
	//TR1 = 0;
	T2CON=0x30;
	RCAP2H=0xFF;		// 57600 @ 24MHz: 24000000/(32*(65536-(RCAP2H,RCAP2L)))
	RCAP2L=0xF3;
//	TI=0;
//	RI=0;
	TR2=1;
	IP=0x35;
	ES = 1;
}

void disp_data(uint len,void *buf)
{
	#ifdef ZLH_DEBUG
	send_str(len,(uchar *)buf);
	wait_send_end();
	#endif	
}		

		
void main(void)
{
	uchar temp,error;
//	uchar buf[20],i;
	uchar cmd,package,para[1100];
	uint len;
	
//	DISABLE_INTERRUPTS;
	Init_Timer0();
	Init_SpecialInterrupts();
	Init_Port();
	Init_COMM();
	
	MCU_LED0=0;   //==0 点亮  ==1 熄灭
	MCU_LED1=1;
	
	DelayMs(110);
	
	#ifdef ZLH_DEBUG
//	ENABLE_INTERRUPTS;
//	while(1){
//		
//		error=rece_cmd(&cmd,&package,&len,para);
//		disp_data(2,"A3");
//		disp_data(1,&error);
//		disp_data(1,&cmd);
//		disp_data(1,&package);
//		disp_data(2,&len);
//		disp_data(len,para);
//		while(!getkey());
//	}	
//	while(1){
//		i=rece(10,buf);
//		if(!i) break;
//	}			
//	send_str(10,buf);
//	i=wait_send_end;
//	DISABLE_INTERRUPTS;	
	#endif
	
	bXXGFlags.bits.bUartInDone=0;	
	
	SL811_Init();
	
	for(temp=0;temp<64;temp++)
		DBUF[temp]=0;
	
	ENABLE_INTERRUPTS;
	
	while(TRUE)
	{
		if (bXXGFlags.bits.bTimer){
			DISABLE_INTERRUPTS;
			bXXGFlags.bits.bTimer = 0;
			ENABLE_INTERRUPTS;

			//if(bXXGFlags.bits.bConfiguration)
			check_key_LED();
			}
		if(bXXGFlags.bits.SLAVE_FOUND){
			DISABLE_INTERRUPTS;
			bXXGFlags.bits.SLAVE_FOUND=FALSE;
			//for(temp=0;temp<4;temp++)
			 	DelayMs(250);
			//DelayMs(50);
			if(EnumUsbDev(1))				// enumerate USB device, assign USB address = #1
			{
			   	bXXGFlags.bits.SLAVE_ENUMERATED = TRUE;	// Set slave USB device enumerated flag
			   	MCU_LED1=0;
			   	#ifdef ZLH_DEBUG
			   	disp_data(2,"A3");
			   	while(!getkey());
			   	#endif
			}

			#ifdef ZLH_DEBUG
			disp_data(2,"A2");
			#endif
			
			ENABLE_INTERRUPTS;
			}
		if(bXXGFlags.bits.SLAVE_REMOVED){
			DISABLE_INTERRUPTS;
			bXXGFlags.bits.SLAVE_REMOVED=FALSE;
			bXXGFlags.bits.SLAVE_ENUMERATED = FALSE;
			bXXGFlags.bits.SLAVE_IS_ATTACHED = FALSE;
			//bXXGFlags.bits.bMassDevice=TRUE;
			ENABLE_INTERRUPTS;
			}
		if(bXXGFlags.bits.bMassDevice){
			DISABLE_INTERRUPTS;
			bXXGFlags.bits.bMassDevice=FALSE;
			if(EnumMassDev())
				{
				bXXGFlags.bits.SLAVE_IS_ATTACHED = TRUE;
				MCU_LED1=1;
				}
			else
				{
//				MCU_LED1=1;
				bXXGFlags.bits.SLAVE_IS_ATTACHED = FALSE;
				}		
			ENABLE_INTERRUPTS;
		}
		error=rece_cmd(&cmd,&package,&len,para);
		if((error)&&(error!=OVER_TIME)){
			send_error(error);
		}
		if(!error){
			#ifdef ZLH_DEBUG
			disp_data(2,"A3");
			disp_data(1,&cmd);
//			disp_data(1,&package);
			disp_data(2,&len);
//			if(len)
//				disp_data(len,para);
			#endif
			MCU_LED1=0;
			UartHandler(cmd,package,len,para);
			MCU_LED1=1;
		}	
//		if(bXXGFlags.bits.bUartInDone){
//			DISABLE_INTERRUPTS;
//			bXXGFlags.bits.bUartInDone=0;	
//			UartHandler();
//			ENABLE_INTERRUPTS;	
//			}
		
	}
	
}

⌨️ 快捷键说明

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