×
单片机 > 单片机程序设计 > 详情

USB118a U盘读写51汇编测试程序

发布时间:2020-05-23 发布时间:
|

/************************************************************************************************ 

*  U盘文件读写模块 以字节为单位进行U盘文件读写。 
*  MCS-51 单片机 汇编示例程序  
*  硬件连接方式: 4线制串口(电源,地,输入,输出)  


*************************************************************************************************/ 

/*-------------------------------- 
    初始化程序 
---------------------------------*/ 
    ORG 0000H 
    AJMP MAIN 
    ORG 0100H 
/*-------------------------------- 
主函数 
---------------------------------*/ 
MAIN: 
     MOV   SP,  #60H        ;设置堆栈指针 
     MOV   TMOD,#20H        ;计数器1工作在方式2 
     MOV   TH1, #0F3H        ;晶振频率为24MHz,波特率为9600 
     MOV   TL1, #0F3H 
         
   ; MOV   TH1,  #0FAH         ;晶振频率为11.0592MHZ,波特率为9600 
   ; MOV   TL1,  #0FAH     

     MOV   PCON,#80H        ;smod为1 
    SETB  TR1            ;启动计时 
     MOV   SCON,#40H 

/*--------------------------------------------------------------------- 
   延时是由于本人所用的 单片机 和USB118A是同一电源供电, 
起初上电复位后由于USB118A要进行U盘检测,延时大约让检测完成即可发送指令         
----------------------------------------------------------------------*/ 
     MOV   R1,#10H        ;闪烁10次 
ML:     
    LCALL DELAY         
    LCALL DELAY        ;延时 
    LCALL DELAY 
    LCALL DELAY 
    DJNZ R1,ML 

//检测U盘是否连接正常 
USB_Detect:     
    CLR    EA            ;关闭中断 
    CLR    REN            ;关闭接收位 
     MOV     DPTR, #Detect ;检测U盘命令初址 
     MOV     R7,  #66        ;R7定义为将要发送的字节数 
    LCALL  SEND            ;调用发送子程序 
    SETB   REN            ;打开接收位 

    JNB    RI,$         ;等待接收到数据 
    CLR    RI 
     MOV     A,SBUF        ;接收应答码 
    CJNE   A,#04H,OUT1    ;04检测应答码,对则继续执行 判断是否成功执行 否则转错误处理 
  
    JNB    RI,$         ;等待接收到数据 
    CLR    RI 
     MOV     A,SBUF        ;接收应答信号 
    CJNE   A,#01H,OUT1    ;01判断是否成功执行,成功则继续执行 否则转错误处理 


//create file             
    LCALL  CRT 
    JNB    RI,$         ;等待接收到数据 
    CLR    RI 
     MOV     A,SBUF        ;接收应答码 
    CJNE   A,#0AH,OUT1    ;0A检测应答码,对则继续执行 判断是否成功执行 否则转错误处理 
  
    JNB    RI,$             ;等待接收到数据 
    CLR    RI 
     MOV     A,SBUF        ;接收应答信号 
    CJNE   A,#01H,OUT1    ;01判断是否成功执行,成功则继续执行 否则转错误处理 



//open file 
    LCALL OP 
    JNB    RI,$         ;等待接收到数据 
    CLR    RI 
     MOV     A,SBUF        ;接收应答码 
    CJNE   A,#0DH,OUT1    ;0D检测应答码,对则继续执行 判断是否成功执行 否则转错误处理 
  
    JNB    RI,$             ;等待接收到数据 
    CLR    RI 
     MOV     A,SBUF        ;接收应答信号 
    CJNE   A,#01H,OUT1    ;01判断是否成功执行,成功则继续执行 否则转错误处理 

//write data 
    LCALL  WRT 
    SJMP $       
     MOV     IE,#93H 
    RET 

/*---------------------------------------------- 
函数功能:当为检测到U盘时,从新发送指令检测 
-----------------------------------------------*/ 
OUT1:                     
     MOV  R7,#66          ;R7定义为将要发送的字节数 
    LJMP   USB_Detect ;检测到u盘未成功,重新检测 
    RET 


/*----------------------------------------- 
函数功能:Create file 
-------------------------------------------*/ 
CRT: 
       CLR    REN          ;关闭接收位 
    LCALL  DELAY 
     MOV  R7, #66          ;R7定义为将要发送的字节数 
     MOV  DPTR,#Create  ;建立文件命令初址 
    LCALL SEND          ;调用发送子程序 
    NOP 
    NOP 
    NOP 
    SETB REN          ;打开接收位 
    RET 


/*---------------------------------------- 
函数功能:Open file 
------------------------------------------*/ 
OP: 
    CLR    REN         ;关闭接收位      
    LCALL  DELAY 
     MOV  R7, #66         ;R7定义为将要发送的字节数 
     MOV  DPTR,#Open     ;打开文件命令初址 
    LCALL SEND         ;调用发送子程序 
    NOP 
    NOP 
    NOP 
    SETB REN          ;打开接收位 
    RET 
     
/*----------------------------------------- 
函数功能:Write data 
-------------------------------------------*/ 
WRT:     
    CLR    REN             ;关闭接收位 
    LCALL  DELAY 
     MOV  R7,#66         ;R7定义为将要发送的字节数 
     MOV  DPTR,#Write     ;写文件命令初址     
    LCALL  SEND         ;发送数据 

     MOV  R7,#15         ;此处是将要发送的写入数据的字节数 
ON:     MOV  DPTR,#Date1     ;数据初地址 
    LCALL  SEND         ;发送数据 
    NOP 
    NOP 
    SETB REN        ;打开接收位 
    RET 

/*---------------------------------------------- 
函数功能:Re MOV e file 
------------------------------------------------*/ 
REM:     
    CLR   REN             ;关闭接收位 
    LCALL DELAY 
     MOV  DPTR,#Remove ;设置删除命令初址 
    LCALL  SEND         ;发送命令 
    NOP 
    NOP 
    NOP 
    SETB REN         ;打开接收位 
    RET 

/*-------------------------------------------------- 
函数功能:设置文件指针     
----------------------------------------------------*/     
SFP:     
    CLR REN                     ;关闭接收位 
    LCALL DELAY 
     MOV  R7,#66 
     MOV  DPTR,#SetFilePointer ;设置文件指针命令初址 
    LCALL SEND                  ;发送命令 
    NOP 
    NOP 
    NOP 
    SETB REN                   ;打开接收位 
    RET 

/*---------------------------------------------- 
函数功能:Read file 
-----------------------------------------------*/ 
RAD: 
    CLR REN              ;关闭接收位 
    LCALL DELAY 
     MOV  R7,#66 
     MOV  DPTR,#Read      ;设置读命令初址 
    LCALL SEND          ;发送命令 
    NOP 
    NOP 
    NOP 
    SETB REN          ;打开接收位 
    RET 
/*-------------------------------------------------- 
函数功能:Make  dir 
---------------------------------------------------*/ 
MDIR: 
    CLR  REN            ;关闭接收位 
    LCALL DELAY 
     MOV  R7, #66 
     MOV  DPTR, #MakeDir    ;设置建立目录初址 
    LCALL SEND            ;发送命令 
    NOP 
    NOP  
    NOP 
    SETB REN            ;打开接收位 
    RET 

/*-------------------------------------------------- 
函数功能:In dir 
---------------------------------------------------*/ 
IND: 
    CLR  REN          ;关闭接收位 
    LCALL DELAY 
     MOV  R7, #66 
     MOV  DPTR, #InDir   ;设置进入目录初址 
    LCALL SEND           ;发送命令 
    NOP 
    NOP  
    NOP 
    SETB REN            ;打开接收位 
    RET 

/*-------------------------------------------------- 
函数功能:Out dir 
---------------------------------------------------*/ 
OUTD: 
    CLR  REN            ;关闭接收位 
    LCALL DELAY 
     MOV  R7, #66 
     MOV  DPTR, #OutDir     ;设置返回目录初址 
    LCALL SEND             ;发送命令 
    NOP 
    NOP  
    NOP 
    SETB REN             ;打开接收位 
    RET 

/*-------------------------------------------------- 
函数功能:Root dir 
---------------------------------------------------*/ 
ROOTD: 
    CLR  REN            ;关闭接收位 
    LCALL DELAY 
     MOV  R7, #66 
     MOV  DPTR, #RootDir    ;设置返回根目录初址 
    LCALL SEND            ;发送命令 
    NOP 
    NOP  
    NOP 
    SETB REN            ;打开接收位 
    RET 

/*------------------------------------------------- 
函数功能:Send data 
--------------------------------------------------*/ 
SEND: 
     MOV     R0,#00H     ;计数 
LOOP: 
     MOV     A,R0 
     MOV C   A,@A+DPTR ;查表得到要发送的数据 
     MOV     SBUF,A     ;发送数据 
    JNB    TI,$         ;等待发送完毕 
    CLR    TI                 
    INC    R0 
    DJNZ   R7,LOOP     ;R7发送字节数 
    RET 
         
/*--------------------------------------------------- 
函数功能:延时子程序 
-----------------------------------------------------*/ 
DELAY:     
     MOV  R5,#0FFH 
LOOP2: 
     MOV  R4,#0FFH 
LOOP1: 
    NOP 
    NOP 
    DJNZ R4,LOOP1 
    DJNZ R5,LOOP2 
    RET 
                                                                        
/*------------------------------------------------------------------------------------ 
说明:以下是要发送的命令和数据 
-------------------------------------------------------------------------------------*/ 
Detect:                ;检测u盘命令 
    DB 0AAH,0BBH,01H     
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 

Create:                ;建立TEST.TXT文件命令 
    DB 0AAH,0BBH,07H     
    DB 54H,45H,53H,54H,20H,20H,20H,20H                        ;Create file name  
    DB 54H,58H,54H                                               ;File type 
    DB 20H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 63H,4FH,0FDH,32H                                     ;Create and  revise file time 
    DB 00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H  

Open:                ;打开文件命令 
    DB 0AAH,0BBH,06H                     
    DB 54H,45H,53H,54H,20H,20H,20H,20H                         ;Open file name 
    DB 54H,58H,54H                                             ;File type 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 

Write:                ;写文件命令     
    DB 0AAH,0BBH,09H,00H     
    DB 0FH,00H                                                  ;Write byte number 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 

Read:                ;读文件命令 
    DB 0AAH,0BBH,08H 
    DB 08H,00H                                                   ;Read file length 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 

Re MOV e:                ;删除文件命令 
    DB 0AAH,0BBH,11H,00H 
    DB 54H,45H,53H,54H,20H,20H,20H,20H                          ;Delete file name 
    DB 54H,58H,54H                                              ;File type 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H 

SetFilePointer:            ;设置文件指针命令 
    DB 0AAH,0BBH,15H,00H 
    DB 148,02H,00H,00H                                           ;设置指针位置 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 
    DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H 

MakeDir:            ;建立TEST目录 
    DB 0AAH,0BBH,32H 
    DB 54H,45H,53H,54H,20H,20H,20H,20H,20H,20H,20H,10H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0E3H,7EH,0FH,33H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H 

InDir:                ;进入TEST目录 
    DB 0AAH,0BBH,54H,45H,53H,54H,20H,20H,20H,20H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H 

OutDir:                ;返回上一层目录 
    DB 0AAH,0BBH,34H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H 

RootDir:            ;返回根目录 
    DB 0AAH,0BBH,35H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
    DB 00H,00H 

Date1:                ;数据1 
    DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,50H,61H,62H,63H,64H,65H 
    DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,61H,62H,63H,64H,65H 
    DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,61H,62H,63H,64H,65H 
    DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,61H,62H,63H,64H,65H 
    DB 30H,31H,32H,33H,0DH,0AH 
END 


关键字:USB118a  U盘读写  51汇编 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法