USB118a U盤讀寫51匯編測試程序
/************************************************************************************************
*
*U盤文件讀寫模塊以字節(jié)為單位進行U盤文件讀寫。
*MCS-51單片機匯編示例程序
*硬件連接方式:4線制串口(電源,地,輸入,輸出)
*
*************************************************************************************************/
/*--------------------------------
初始化程序
---------------------------------*/
ORG0000H
AJMPMAIN
ORG0100H
/*--------------------------------
主函數(shù)
---------------------------------*/
MAIN:
MOV SP,#60H;設(shè)置堆棧指針
MOV TMOD,#20H;計數(shù)器1工作在方式2
MOV TH1,#0F3H;晶振頻率為24MHz,波特率為9600
MOV TL1,#0F3H
; MOV TH1,#0FAH;晶振頻率為11.0592MHZ,波特率為9600
; MOV TL1,#0FAH
MOV PCON,#80H;smod為1
SETBTR1;啟動計時
MOV SCON,#40H
/*---------------------------------------------------------------------
延時是由于本人所用的 單片機 和USB118A是同一電源供電,
起初上電復位后由于USB118A要進行U盤檢測,延時大約讓檢測完成即可發(fā)送指令
----------------------------------------------------------------------*/
MOV R1,#10H;閃爍10次
ML:
LCALLDELAY
LCALLDELAY;延時
LCALLDELAY
LCALLDELAY
DJNZR1,ML
//檢測U盤是否連接正常
USB_Detect:
CLREA;關(guān)閉中斷
CLRREN;關(guān)閉接收位
MOV DPTR,#Detect;檢測U盤命令初址
MOV R7,#66;R7定義為將要發(fā)送的字節(jié)數(shù)
LCALLSEND;調(diào)用發(fā)送子程序
SETBREN;打開接收位
JNBRI,$;等待接收到數(shù)據(jù)
CLRRI
MOV A,SBUF;接收應(yīng)答碼
CJNEA,#04H,OUT1;04檢測應(yīng)答碼,對則繼續(xù)執(zhí)行判斷是否成功執(zhí)行否則轉(zhuǎn)錯誤處理
JNBRI,$;等待接收到數(shù)據(jù)
CLRRI
MOV A,SBUF;接收應(yīng)答信號
CJNEA,#01H,OUT1;01判斷是否成功執(zhí)行,成功則繼續(xù)執(zhí)行否則轉(zhuǎn)錯誤處理
//createfile
LCALLCRT
JNBRI,$;等待接收到數(shù)據(jù)
CLRRI
MOV A,SBUF;接收應(yīng)答碼
CJNEA,#0AH,OUT1;0A檢測應(yīng)答碼,對則繼續(xù)執(zhí)行判斷是否成功執(zhí)行否則轉(zhuǎn)錯誤處理
JNBRI,$;等待接收到數(shù)據(jù)
CLRRI
MOV A,SBUF;接收應(yīng)答信號
CJNEA,#01H,OUT1;01判斷是否成功執(zhí)行,成功則繼續(xù)執(zhí)行否則轉(zhuǎn)錯誤處理
//openfile
LCALLOP
JNBRI,$;等待接收到數(shù)據(jù)
CLRRI
MOV A,SBUF;接收應(yīng)答碼
CJNEA,#0DH,OUT1;0D檢測應(yīng)答碼,對則繼續(xù)執(zhí)行判斷是否成功執(zhí)行否則轉(zhuǎn)錯誤處理
JNBRI,$;等待接收到數(shù)據(jù)
CLRRI
MOV A,SBUF;接收應(yīng)答信號
CJNEA,#01H,OUT1;01判斷是否成功執(zhí)行,成功則繼續(xù)執(zhí)行否則轉(zhuǎn)錯誤處理
//writedata
LCALLWRT
SJMP$
MOV IE,#93H
RET
/*----------------------------------------------
函數(shù)功能:當為檢測到U盤時,從新發(fā)送指令檢測
-----------------------------------------------*/
OUT1:
MOV R7,#66;R7定義為將要發(fā)送的字節(jié)數(shù)
LJMPUSB_Detect;檢測到u盤未成功,重新檢測
RET
/*-----------------------------------------
函數(shù)功能:Createfile
-------------------------------------------*/
CRT:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66;R7定義為將要發(fā)送的字節(jié)數(shù)
MOV DPTR,#Create;建立文件命令初址
LCALLSEND;調(diào)用發(fā)送子程序
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*----------------------------------------
函數(shù)功能:Openfile
------------------------------------------*/
OP:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66;R7定義為將要發(fā)送的字節(jié)數(shù)
MOV DPTR,#Open;打開文件命令初址
LCALLSEND;調(diào)用發(fā)送子程序
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*-----------------------------------------
函數(shù)功能:Writedata
-------------------------------------------*/
WRT:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66;R7定義為將要發(fā)送的字節(jié)數(shù)
MOV DPTR,#Write;寫文件命令初址
LCALLSEND;發(fā)送數(shù)據(jù)
MOV R7,#15;此處是將要發(fā)送的寫入數(shù)據(jù)的字節(jié)數(shù)
ON: MOV DPTR,#Date1;數(shù)據(jù)初地址
LCALLSEND;發(fā)送數(shù)據(jù)
NOP
NOP
SETBREN;打開接收位
RET
/*----------------------------------------------
函數(shù)功能:Re MOV efile
------------------------------------------------*/
REM:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV DPTR,#Remove;設(shè)置刪除命令初址
LCALLSEND;發(fā)送命令
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*--------------------------------------------------
函數(shù)功能:設(shè)置文件指針
----------------------------------------------------*/
SFP:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66
MOV DPTR,#SetFilePointer;設(shè)置文件指針命令初址
LCALLSEND;發(fā)送命令
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*----------------------------------------------
函數(shù)功能:Readfile
-----------------------------------------------*/
RAD:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66
MOV DPTR,#Read;設(shè)置讀命令初址
LCALLSEND;發(fā)送命令
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*--------------------------------------------------
函數(shù)功能:Makedir
---------------------------------------------------*/
MDIR:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66
MOV DPTR,#MakeDir;設(shè)置建立目錄初址
LCALLSEND;發(fā)送命令
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*--------------------------------------------------
函數(shù)功能:Indir
---------------------------------------------------*/
IND:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66
MOV DPTR,#InDir;設(shè)置進入目錄初址
LCALLSEND;發(fā)送命令
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*--------------------------------------------------
函數(shù)功能:Outdir
---------------------------------------------------*/
OUTD:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66
MOV DPTR,#OutDir;設(shè)置返回目錄初址
LCALLSEND;發(fā)送命令
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*--------------------------------------------------
函數(shù)功能:Rootdir
---------------------------------------------------*/
ROOTD:
CLRREN;關(guān)閉接收位
LCALLDELAY
MOV R7,#66
MOV DPTR,#RootDir;設(shè)置返回根目錄初址
LCALLSEND;發(fā)送命令
NOP
NOP
NOP
SETBREN;打開接收位
RET
/*-------------------------------------------------
函數(shù)功能:Senddata
--------------------------------------------------*/
SEND:
MOV R0,#00H;計數(shù)
LOOP:
MOV A,R0
MOV CA,@A+DPTR;查表得到要發(fā)送的數(shù)據(jù)
MOV SBUF,A;發(fā)送數(shù)據(jù)
JNBTI,$;等待發(fā)送完畢
CLRTI
INCR0
DJNZR7,LOOP;R7發(fā)送字節(jié)數(shù)
RET
/*---------------------------------------------------
函數(shù)功能:延時子程序
-----------------------------------------------------*/
DELAY:
MOV R5,#0FFH
LOOP2:
MOV R4,#0FFH
LOOP1:
NOP
NOP
DJNZR4,LOOP1
DJNZR5,LOOP2
RET
/*------------------------------------------------------------------------------------
說明:以下是要發(fā)送的命令和數(shù)據(jù)
-------------------------------------------------------------------------------------*/
Detect:;檢測u盤命令
DB0AAH,0BBH,01H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
Create:;建立TEST.TXT文件命令
DB0AAH,0BBH,07H
DB54H,45H,53H,54H,20H,20H,20H,20H;Createfilename
DB54H,58H,54H;Filetype
DB20H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB63H,4FH,0FDH,32H;Createandrevisefiletime
DB00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H
Open:;打開文件命令
DB0AAH,0BBH,06H
DB54H,45H,53H,54H,20H,20H,20H,20H;Openfilename
DB54H,58H,54H;Filetype
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
Write:;寫文件命令
DB0AAH,0BBH,09H,00H
DB0FH,00H;Writebytenumber
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
Read:;讀文件命令
DB0AAH,0BBH,08H
DB08H,00H;Readfilelength
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
Re MOV e:;刪除文件命令
DB0AAH,0BBH,11H,00H
DB54H,45H,53H,54H,20H,20H,20H,20H;Deletefilename
DB54H,58H,54H;Filetype
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H
SetFilePointer:;設(shè)置文件指針命令
DB0AAH,0BBH,15H,00H
DB148,02H,00H,00H;設(shè)置指針位置
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
MakeDir:;建立TEST目錄
DB0AAH,0BBH,32H
DB54H,45H,53H,54H,20H,20H,20H,20H,20H,20H,20H,10H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0E3H,7EH,0FH,33H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H
InDir:;進入TEST目錄
DB0AAH,0BBH,54H,45H,53H,54H,20H,20H,20H,20H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H
OutDir:;返回上一層目錄
DB0AAH,0BBH,34H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H
RootDir:;返回根目錄
DB0AAH,0BBH,35H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB00H,00H
Date1:;數(shù)據(jù)1
DB41H,42H,43H,44H,45H,46H,47H,48H,49H,50H,61H,62H,63H,64H,65H
DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,61H,62H,63H,64H,65H
DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,61H,62H,63H,64H,65H
DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,61H,62H,63H,64H,65H
DB30H,31H,32H,33H,0DH,0AH
END