社区导航

 

搜索
查看: 131|回复: 0

[资料分享] 如何利用单片机读写U盘

[复制链接]

5677

TA的帖子

19

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-10-9 15:03 | 显示全部楼层 |阅读模式

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

      一个系统的学习能让你提高不少,按照硬件开发的基本流程来,这样学习采系统,每一个阶段都需要做一个这样的项目,才能逐渐提高自己的独立开发水品!系统很简单,但是程序比较复杂,呵呵硬件和软件是可以相互弥补的嘛,这一点童鞋们应该都知道了吧。

360截图20191009150249558.jpg

#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;

}

}

}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-11-16 08:04 , Processed in 0.079841 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表