欢迎来到亿配芯城! | 免费注册
你的位置:高云半导体gowin高云FPGA芯片全系列-亿配芯城 > 芯片资讯 > 如何采用51单片机读写U盘
如何采用51单片机读写U盘
发布日期:2024-11-22 07:30     点击次数:179

51单片机读写U盘,一个前辈们都玩剩下的东东了,暑假在家没事干,大学嘛没有暑假作业的,呵呵。故索性也来玩玩如何用51单片机读写U盘,听着名 字真的觉得这么个东东有什么用呢,市场也没有,创新更不提了,但是我想劝诫学习单片机的朋友们,由于国内的方式看来,我们只要一步一步的来,玩他人剩下的 东东来进步本人,硬件改一下,程序优化一下都是改良或者能够说是改进吧, 亿配芯城 要兢兢业业,不要想着直接开发一个多么有前景的项目之类的空想了!

一个系统的学习能让你进步不少,依照硬件开发的根本流程来,这样学习采系统,每一个阶段都需求做一个这样的项目,才干逐步进步本人的独立开发水品!系统很简单,但是程序比拟复杂,呵呵硬件和软件是能够互相补偿的嘛,这一点童鞋们应该都晓得了吧。

如何采用51单片机读写U盘

#include “common.h”

#include “AT89X52.H”

#include “SL811.H”

#include “TPBULK.H”

#include “HAL.H”

#include “HPI.H”

//#include “common.h”

XXGFLAGS bdata bXXGFlags;

extern unsigned char xdata DBUF[BUFFER_LENGTH];

void Init_Timer0(void)

{

TMOD &= 0xF0; /* clear TImer 0 */

TMOD |= 0x1;

TL0 = 0x0; /* value set by user */

TH0 = 0x0; /* 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 = 0x53;

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;

ES = 1;

}

void main(void)

{

unsigned char temp;

Init_TImer0();

Init_SpecialInterrupts();

Init_Port();

Init_COMM();

MCU_LED0=1;

MCU_LED1=1;

MCU_LED2=1;

MCU_LED3=0;

//temp=SL811_GetRev();

//for(temp=0;temp《2;temp++)

DelayMs(254);

//temp=SL811Read(CtrlReg);

//SL811Write(CtrlReg,0);

//temp=SL811Read(CtrlReg);

//temp=SL811Read(IntStatus);

//SL811Write(IntStatus,INT_CLEAR);

//temp=SL811Read(IntStatus);

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.bCOM_ERR){

bXXGFlags.bits.bCOM_ERR=0;

ComErrRsp(COMERC_CMDERR);

}

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_LED0=0;

}

ENABLE_INTERRUPTS;

}

if(bXXGFlags.bits.SLAVE_REMOVED){

DISABLE_INTERRUPTS;

bXXGFlags.bits.SLAVE_REMOVED=FALSE;

MCU_LED0=1;

MCU_LED1=1;

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=0;

}

else

{

MCU_LED1=1;

bXXGFlags.bits.SLAVE_IS_ATTACHED = FALSE;

}

ENABLE_INTERRUPTS;

}

if(bXXGFlags.bits.bUartInDone){

DISABLE_INTERRUPTS;

bXXGFlags.bits.bUartInDone=0;

UartHandler();

ENABLE_INTERRUPTS;

}

}

}