历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2018年01月08日 | USB118a U盘读写51汇编测试程序

2018-01-08 来源:eefocus

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

*  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 


推荐阅读

史海拾趣

台湾固锝(GD)公司的发展小趣事
通过合理设计电路布局和元件选择来减少功耗和热量产生。
Fischer Elektronik公司的发展小趣事

为了更好地服务全球客户,Fischer Elektronik积极实施国际化战略。公司在全球范围内建立了多个生产基地和销售网络,以确保能够快速响应市场需求并提供高质量的产品和服务。通过多年的努力,Fischer Elektronik已经成功进入了众多国际市场,并与众多知名企业建立了长期合作关系。这些合作不仅提升了公司的品牌知名度,也为其带来了更多的商业机会和发展空间。

HOPERF公司的发展小趣事

在无线射频和传感器领域,HOPERF始终保持着技术创新的领先地位。公司独创的“NextGenRF”算法专利技术,填补了国内在该领域的空白,并获得了多项企业认证、发明专项和软件著作权。这些技术创新不仅推动了公司产品性能的持续提升,还引领了整个行业的发展方向。此外,HOPERF还积极参与国际标准制定,不断提升自身在全球行业中的话语权和影响力。

DURATOOL公司的发展小趣事

DURATOOL公司自成立以来,一直致力于电子工具的技术创新。在20世纪90年代,公司研发出了一款具有革命性的数字万用表,该产品在精确度、稳定性和操作便捷性方面均大幅超越当时的市场主流产品。这一创新不仅为DURATOOL公司赢得了大量忠实用户,也为其在电子测量工具市场树立了技术领先的形象。随后,DURATOOL公司不断加大研发投入,推出了一系列具有竞争力的新产品,逐步巩固了其在电子工具行业的领先地位。

Hittite Microwave(ADI)公司的发展小趣事

在电子行业,产品质量是企业生存和发展的基石。DURATOOL公司深知这一点,因此一直将品质管理作为企业发展的核心。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、包装等各个环节都进行严格把关。此外,DURATOOL公司还积极引入国际先进的质量管理理念和方法,不断提升产品质量水平。这些努力使得DURATOOL公司的产品在市场上享有良好的口碑和信誉,赢得了广大用户的信任和支持。

Electro-Optical Systems Inc公司的发展小趣事

作为一家有着高度社会责任感的企业,EOS始终关注环保和可持续发展问题。他们采用环保材料和绿色生产工艺,降低产品对环境的污染。同时,EOS还积极参与社会公益事业,捐资助学、扶贫济困等活动不断。这些举措不仅提升了企业的社会形象,也为公司的可持续发展奠定了坚实基础。

问答坊 | AI 解惑

三星753DFhe755DF显示器图

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 三星753DFhe755DF显示器图 …

查看全部问答>

protel 快速教程

protel 快速教程,見附件…

查看全部问答>

用CPLD实现结构简单的键盘控制器

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 用CPLD实现结构简单的键盘控制器  …

查看全部问答>

国半大师的经典巨著《Troubleshooting_Analog_Circuits》

本帖最后由 dontium 于 2015-1-23 11:34 编辑 国半大师的经典之作呃,详细讲了模拟电路的故障诊断。呵呵,我后来全部打印下来看了,国内翻译的不太好,英文原著还是相当的不错的撒,呵呵,分享下。 …

查看全部问答>

正激式开关电源变压器参数的计算 开关电源原理与设计(连载16)

1-6-3-2.正激式开关电源变压器参数的计算 正激式开关电源变压器参数的计算主要从这几个方面来考虑。一个是变压器初级线圈的匝数和伏秒容量,伏秒容量越大变压器的励磁电流就越小;另一个是变压器初、次级线圈的匝数比,以及变压器各个绕组的额定 ...…

查看全部问答>

S3C2440 WINCE 5.0上SD接口的WIFI驱动移植上去了,可以检测到网卡,但是搜不到网络

好不容易才把WIFI驱动移植进去,但是现在搜不到网络,但是用笔记本可以一下子搜到很多。 我的WIFI是接外置天线的,就是把一根比较长的天线焊在上面,我不知接之后是否还要考虑信号问题。 用的WIFI型号叫GM9601,是基于MARVELL 8686的。它的数据手 ...…

查看全部问答>

AT89C51与三菱D700变频器通讯

哪位高手有AT89C51与三菱D700变频器通讯的汇编程序.......…

查看全部问答>

【设计工具】ISE使用指导,适合初学者

初学者的ISE使用指导,希望对大家有所帮助.   …

查看全部问答>

驱动入门

驱动入门:一个简单的字符设备驱动            首先我要向大家推荐一下韦东山老师的视频,他在视频里讲解的非常的好,把代码分析的非常的透彻,而且他会在视频里现场写出每一个程序的代码,而不是从其他的地方拿一 ...…

查看全部问答>