这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何采用51单片机读写U盘

共7条 1/1 1 跳转至

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

高工
2019-10-03 23:28:30     打赏

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;

}

}

}




院士
2019-10-04 10:45:27     打赏
2楼

话说为什么要用51单片机去玩U盘啊

那么多的32位MCU可以使用


工程师
2019-10-04 21:42:35     打赏
3楼

用国产的沁恒 CH5XX 系列MCU不错,内置USB HOST ,低成本,高性价比!


工程师
2019-10-06 22:03:14     打赏
4楼

学习一下


工程师
2019-10-10 21:44:14     打赏
5楼

很不错的文章


工程师
2019-10-14 18:16:30     打赏
6楼

加菲猫提的意见蛮不错的


助工
2019-10-16 21:37:49     打赏
7楼

谢谢分享的代码


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]