亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ch375hms.asm

?? 是關于C8051系列的各個模塊的代碼
?? ASM
字號:
; /* 2004.06.05
; ****************************************
; **  Copyright  (C)  W.ch  1999-2004   **
; **  Web:  http://www.winchiphead.com  **
; ****************************************
; **  USB Host File Module      @CH375  **
; ****************************************
; */
; /* U盤文件讀寫模塊, 連接方式: 3線制串口+查詢 */
; /* MCS-51單片機ASM語言示例程序 */
; /* 因為使用U盤文件讀寫模塊而不是使用U盤文件級子程序庫,所以占用較少的單片機資源,可以使用89C51單片機測試 */
; /* 以字節為單位進行U盤文件讀寫,單片機的RAM只需要幾十個字節,不需要外部RAM */
; 
;$include	(REG51.INC)
$include	(..\CH375HM.INC)

; 電路連接方式,只需要連接3根線,使用串口同步碼啟動操作
;   單片機    模塊
;    TXD   =  SIN
;    RXD   =  SOUT
;             STA# 懸空或接高電平
;             INT# 接地或接低電平
;    GND   =  GND

LED_OUT			BIT		P1.4			;P1.4 低電平驅動LED顯示,用于監控演示程序的進度

; 命令參數結構, 長度為20到60字節
mCmdParam		DATA	20H				;默認情況下該結構將占用64字節的RAM,可以修改MAX_PATH_LEN常量,當修改為32時,只占用32字節的RAM
NEW_SIZE_HIGH	DATA	1EH				;文件長度的高字節
NEW_SIZE_LOW	DATA	1FH				;文件長度的低字節

				ORG		0000H
				LJMP	MAIN
;
; 程序數據起始地址
				ORG		0100H
STR_FILE_NAME1:	DB		'\C51\CH375HFT.C',00H	;文件名,該文件在C51子目錄下
STR_FILE_DATA1:	DB		'Note: ',0DH,0AH,'這個程序是以字節為單位進行U盤文件讀寫,',00H
STR_FILE_DATA2:	DB		'單片機只需要有幾十字節的RAM就可以了',0DH,0AH,00
STR_FILE_NAME2:	DB		'\雙擊我吧.TXT',00H		;新文件名,在根目錄下

; 從程序空間復制字符串到內部RAM緩沖區,源字符串必須以00H作為結束標志,長度不能超過255
; 入口:   DPTR 指向源字符串的起始地址, R0 目標緩沖區的起始地址
; 出口:   R7 返回字符串的長度(含字符串結束符00H)
; 使用:   DPTR, R0, R7
CopyString:		MOV		R7,#00H
CopyStringChar:	MOV		A,R7
				INC		R7
				MOVC	A,@A+DPTR
				MOV		@R0,A
				INC		R0
				JNZ		CopyStringChar		;不是字符串結束符00H,繼續復制
				RET
;
; 延時100毫秒,不精確
; 使用:   R6, R7
mDelay100mS:	MOV  	R7,#0C8H
mDelay100mS_1:	MOV  	R6,#0C8H
mDelay100mS_2:	NOP
				NOP
				NOP
				DJNZ 	R6,mDelay100mS_2
				DJNZ 	R7,mDelay100mS_1
				RET  	

; 發送一個字節數據給CH375模塊
; 入口:   ACC 準備發送的數據
mSendByte:		CLR     TI
				MOV     SBUF,A
				JNB     TI,$
				RET

; 從CH375模塊接收一個字節數據
; 出口:   ACC 已經接收的數據
mRecvByte:		JNB     RI,$
				MOV     A,SBUF
				CLR     RI
				RET

; 執行命令
; 輸入命令碼和輸入參數長度,返回操作狀態碼,輸入參數和返回參數都在CMD_PARAM結構中
; 入口:   R7 命令碼, R5 參數長度
; 出口:   R7 狀態碼, R5 返回結果的長度
; 使用:   R0, R5, R6, R7
ExecCommand:	MOV     A,#SER_SYNC_CODE1	;發送串口同步碼通知模塊,說明命令碼開始發送,請求開始執行命令
				LCALL   mSendByte
				MOV     A,#SER_SYNC_CODE2	;用兩個串口同步碼代替STA#的下降沿
				LCALL   mSendByte			;上面兩個串口同步碼應該連續發送,如果不連續,那么間隔時間不能超過20mS,否則命令無效
				CLR     RI
				MOV     A,R7
				LCALL   mSendByte			;寫入命令碼
				MOV     A,R5
				LCALL   mSendByte			;寫入后續參數的長度
				MOV     A,R5
				JZ      ExecCommand_Wait	;沒有參數
				MOV     R0,#mCmdParam		;指向輸入參數的起始地址
ExecCmdParam:	MOV     A,@R0
				LCALL   mSendByte			;依次寫入參數
				INC     R0
				DJNZ    R5,ExecCmdParam
ExecCommand_Wait:							;處理數據傳輸,直到操作完成才退出
				LCALL   mRecvByte			;等待模塊完成操作并返回操作狀態
				MOV     R7,A				;狀態碼
				XRL     A,#ERR_SUCCESS
				JNZ		ExecCmdStatus1		;不是操作成功狀態,需要進一步分析
				LCALL   mRecvByte			;操作成功,則返回結果數據的長度
				MOV     R5,A				;結果數據的長度
				JZ      ExecCmdRet			;沒有結果數據,操作成功返回
				MOV     R6,A
				MOV     R0,#mCmdParam		;指向輸出參數的起始地址
ExecCmdResult:	LCALL   mRecvByte			;接收結果數據并保存到參數結構中
				MOV     @R0,A
				INC     R0
				DJNZ    R6,ExecCmdResult
				SJMP    ExecCmdRet			;有結果數據,操作成功返回
ExecCmdStatus1:	CJNE	R7,#USB_INT_DISK_READ,ExecCmdStatus2	;正在從U盤讀數據塊,請求數據讀出
				SJMP    ExecCmdRet			;本程序只使用以字節為單位的文件讀寫子程序,所以正常情況下不會收到該狀態碼,當作操作失敗返回
ExecCmdStatus2:	CJNE	R7,#USB_INT_DISK_WRITE,ExecCmdStatus3	;正在向U盤寫數據塊,請求數據寫入
				SJMP    ExecCmdRet			;本程序只使用以字節為單位的文件讀寫子程序,所以正常情況下不會收到該狀態碼,當作操作失敗返回
ExecCmdStatus3:	CJNE	R7,#USB_INT_DISK_RETRY,ExecCmdStatus4	;讀寫數據塊失敗重試
				SJMP    ExecCmdRet			;本程序只使用以字節為單位的文件讀寫子程序,所以正常情況下不會收到該狀態碼,當作操作失敗返回
ExecCmdStatus4:	CJNE    R7,#ERR_USB_CONNECT,ExecCmdStatus5
				LCALL   mDelay100mS			;U盤剛剛連接或者斷開,應該延時幾十毫秒再操作
				MOV     R7,#ERR_USB_CONNECT
ExecCmdStatus5:	SJMP    ExecCmdRet			;操作失敗
ExecCmdRet:		RET
; END OF ExecCommand

; 檢查操作狀態,如果錯誤則停機
; 輸入:   R7 為操作狀態碼
mStopIfError:	MOV		A,R7
				JNZ		mStopIfError_LED	;狀態碼是錯誤
				RET
mStopIfError_LED:							;LED閃爍
				CLR		A
				MOV		C,LED_OUT
				MOV		ACC.0,C
				XRL		A,#01H
				MOV		C,ACC.0
				MOV		LED_OUT,C
				LCALL	mDelay100mS
				SJMP	mStopIfError_LED
;
; 主程序
MAIN:			CLR		A
				MOV		PSW,A
				MOV		IE,A
				MOV		SP,#60H
				MOV		A,#0FFH
				MOV		P0,A
				MOV		P1,A
				MOV		P2,A
				MOV		P3,A
				CLR  	LED_OUT				;開機后LED亮一下以示工作
				LCALL	mDelay100mS			;延時100毫秒,CH375模塊上電后需要100毫秒左右的復位時間
				LCALL	mDelay100mS
				SETB 	LED_OUT
;其它電路初始化
;設置與CH375模塊通訊的串口
				MOV     SCON,#50H
				MOV     PCON,#80H
				MOV     TMOD,#20H
				MOV     TH1,#0E6H			;24MHz晶振, 4800bps
				SETB    TR1
;初始化完成
				NOP
MAIN_LOOP:									;主循環
;可以在打算讀寫U盤時再查詢,沒有必要一直連續不停地查詢,可以讓單片機做其它事,沒事可做就延時等待一會再查詢
				MOV		R5,#00H				;沒有命令參數
				MOV		R7,#CMD_QueryStatus	;使用查詢方式看U盤是否連接
				LCALL	ExecCommand			;查詢當前模塊的狀態
				LCALL	mStopIfError		;錯誤則停機
				MOV		A,mCmdParam+1		;Status.mDiskStatus
				CLR     C
				SUBB	A,#DISK_CONNECT
				JNC		MAIN_CONNECT		;U盤已經連接
				LCALL	mDelay100mS			;可以讓單片機做其它事,沒事可做就延時等待一會再查詢
				LCALL	mDelay100mS
				SJMP	MAIN_LOOP
MAIN_CONNECT:	LCALL	mDelay100mS			;U盤已經連接,延時,可選操作,有的USB存儲器需要幾十毫秒的延時
				LCALL	mDelay100mS
				CLR  	LED_OUT				;LED亮說明U盤連接
; 檢查U盤是否準備好,大多數U盤不需要這一步,但是某些U盤必須要執行這一步才能工作
				MOV		R3,#05H
WAIT_READY:		LCALL	mDelay100mS
				MOV     R5,#00H
				MOV     R7,#CMD_DiskReady
				LCALL   ExecCommand			;查詢磁盤是否準備好
				MOV     A,R7
				JZ		DISK_IS_READY
				DJNZ	R3,WAIT_READY		;U盤尚未準備好
DISK_IS_READY:
;讀取原文件
				MOV		DPTR,#STR_FILE_NAME1
				MOV		R0,#mCmdParam		;Open.mPathName
				LCALL	CopyString			;復制文件名
				MOV		A,R7
				MOV		R5,A				;參數長度為文件名長度
				MOV		R7,#CMD_FileOpen	;打開文件
				LCALL	ExecCommand			;執行打開文件操作
				CJNE	R7,#ERR_MISS_DIR,MAIN_OPEN_J1
				SJMP	MAIN_OPEN_MISS		;ERR_MISS_DIR說明沒有找到C51子目錄
MAIN_OPEN_J1:	CJNE	R7,#ERR_MISS_FILE,MAIN_OPEN_J2
MAIN_OPEN_MISS:								;ERR_MISS_FILE說明沒有找到文件
				LJMP	MAIN_CREATE_NEW		;創建新文件
MAIN_OPEN_J2:	LCALL	mStopIfError		;源文件成功打開
;以字節為單位讀取原文件
READ_FILE_BYTE:	MOV		R2,#10H				;請求讀出16字節數據, 單次讀寫的長度不能超過 sizeof( mCmdParam.ByteWrite.mByteBuffer )
				MOV		mCmdParam+0,R2		;ByteRead.mByteCount
				MOV		R5,#01H				;只有一個輸入參數
				MOV		R7,#CMD_ByteRead	;從文件以字節為單位讀取數據塊
				LCALL	ExecCommand			;從文件讀取數據,如果文件比較大,一次讀不完,可以再用命令CMD_ByteRead繼續讀取,文件指針自動向后移動
				LCALL	mStopIfError
; 在mCmdParam+0單元是實際讀出的數據長度,從mCmdParam+1單元開始是讀出的數據塊
				MOV     A,mCmdParam+0		;ByteRead.mByteCount
				JZ      READ_FILE_END		;實際讀出的數據長度小于請求讀出的長度則說明文件結束
				MOV     R7,A
				MOV     R0,#mCmdParam+1		;ByteRead.mByteBuffer,從mCmdParam+1單元開始是讀出的數據塊
GET_READ_BYTE:	MOV     A,@R0
;				MOV     ?,A					;處理剛讀出的數據
				INC     R0
				DJNZ    R7,GET_READ_BYTE
				MOV     A,mCmdParam+0		;實際讀出的數據長度
				CLR     C
				SUBB    A,R2
				JC      READ_FILE_END		;實際讀出的數據長度小于請求讀出的長度則說明文件結束
				SJMP    READ_FILE_BYTE		;文件未結束,繼續讀出數據
READ_FILE_END:	MOV		A,#00H
				MOV		mCmdParam+0,A		;Close.mUpdateLen
				MOV		R5,#01H				;只有一個輸入參數
				MOV		R7,#CMD_FileClose	;關閉文件
				LCALL	ExecCommand			;關閉文件
				LCALL	mStopIfError
;產生新文件
MAIN_CREATE_NEW:
				MOV		DPTR,#STR_FILE_NAME2
				MOV		R0,#mCmdParam		;Create.mPathName
				LCALL	CopyString			;復制文件名
				MOV		A,R7
				MOV		R5,A				;參數長度為文件名長度
				MOV		R7,#CMD_FileCreate
				LCALL	ExecCommand			;新建文件并打開,如果文件已經存在則先刪除后再新建
				LCALL	mStopIfError
;以字節為單位寫入第一組數據塊
				MOV		DPTR,#STR_FILE_DATA1
				MOV		R0,#mCmdParam+1		;ByteWrite.mByteBuffer
				LCALL	CopyString			;復制數據塊
				MOV     A,R7
				MOV		mCmdParam+0,A		;ByteWrite.mByteCount
				INC     A
				MOV		R5,A				;輸入參數的長度為寫入數據塊的長度加一個長度單元
				MOV		R7,#CMD_ByteWrite	;以字節為單位向文件寫入數據
				LCALL	ExecCommand			;向文件寫入數據,如果文件比較大,一次寫不完,可以再用命令CMD_ByteWrite繼續寫入,文件指針自動向后移動
				LCALL	mStopIfError
;以字節為單位寫入第二組數據塊
				MOV		DPTR,#STR_FILE_DATA2
				MOV		R0,#mCmdParam+1		;ByteWrite.mByteBuffer
				LCALL	CopyString			;復制數據塊
				MOV     A,R7
				MOV		mCmdParam+0,A		;ByteWrite.mByteCount
				INC     A
				MOV		R5,A				;輸入參數的長度為寫入數據塊的長度加一個長度單元
				MOV		R7,#CMD_ByteWrite	;以字節為單位向文件寫入數據
				LCALL	ExecCommand			;向文件寫入數據,如果文件比較大,一次寫不完,可以再用命令CMD_ByteWrite繼續寫入,文件指針自動向后移動
				LCALL	mStopIfError
				MOV		A,#01H				;請求模塊自動計算文件長度
				MOV		mCmdParam+0,A		;Close.mUpdateLen
				MOV		R5,#01H				;只有一個輸入參數
				MOV		R7,#CMD_FileClose	;關閉文件
				LCALL	ExecCommand			;關閉文件
				LCALL	mStopIfError
;等待U盤斷開,僅作演示,實際應用中不必考慮U盤是否斷開
MAIN_TAKE_OUT:	MOV		R5,#00H				;沒有命令參數
				MOV		R7,#CMD_QueryStatus	;使用查詢方式看U盤是否斷開
				LCALL	ExecCommand			;查詢當前模塊的狀態
				LCALL	mStopIfError		;錯誤則停機
				MOV		A,mCmdParam+1		;Status.mDiskStatus
				XRL		A,#DISK_DISCONNECT
				JZ		MAIN_DISCONNECT		;U盤已經斷開
				LCALL	mDelay100mS			;延時等待一會再查詢
				LCALL	mDelay100mS
				SJMP	MAIN_TAKE_OUT
MAIN_DISCONNECT:	SETB	LED_OUT			;LED滅
				LJMP	MAIN_LOOP			;等待下一個U盤連接
; END main
;
END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女免费在线| 国产精品久久久久久亚洲毛片 | 成人精品一区二区三区四区| 日韩福利电影在线| 亚洲一二三四在线| 亚洲尤物在线视频观看| 亚洲国产日韩精品| 亚洲亚洲精品在线观看| 亚洲成人一二三| 日韩高清中文字幕一区| 日韩av电影免费观看高清完整版 | 91视频www| 99久久国产综合精品麻豆| av在线不卡网| 日本韩国一区二区三区| 欧美综合久久久| 欧美日韩中字一区| 在线播放国产精品二区一二区四区| 色猫猫国产区一区二在线视频| 色综合亚洲欧洲| 欧美日韩小视频| 日韩一二三区不卡| 久久一区二区视频| 中文字幕制服丝袜一区二区三区| 亚洲三级在线免费观看| 亚洲福中文字幕伊人影院| 日韩—二三区免费观看av| 精一区二区三区| 成人伦理片在线| 在线看国产一区| 91精品国产色综合久久久蜜香臀| 日韩亚洲欧美在线观看| 欧美激情自拍偷拍| 一区二区日韩av| 经典一区二区三区| 91在线观看一区二区| 欧美日韩中文另类| 久久久天堂av| 亚洲福利视频导航| 国产剧情一区二区三区| 一本色道久久综合狠狠躁的推荐| 91麻豆精品国产自产在线观看一区| 精品国产伦一区二区三区观看方式 | 日产国产欧美视频一区精品 | 国产日产欧美一区| 一区二区国产视频| 国产精品羞羞答答xxdd| 一本到不卡免费一区二区| 日韩女优电影在线观看| 亚洲伦在线观看| 精品中文字幕一区二区| 欧美视频日韩视频| 国产日韩欧美精品一区| 日韩国产精品大片| 一本到高清视频免费精品| 久久九九全国免费| 免费观看日韩av| 欧美性猛交xxxx乱大交退制版 | 成人丝袜18视频在线观看| 91精品国产综合久久久蜜臀粉嫩| 亚洲视频在线观看一区| 国产成人综合亚洲91猫咪| 欧美日韩美女一区二区| 亚洲精品国产无天堂网2021| 成人精品国产一区二区4080| 精品美女一区二区三区| 亚洲一区中文在线| 色呦呦日韩精品| 亚洲日本va在线观看| 国产成人综合亚洲网站| 久久免费美女视频| 激情都市一区二区| 欧美xxxxx牲另类人与| 日韩精品色哟哟| 欧美日韩亚洲综合在线| 亚洲自拍与偷拍| 色欧美片视频在线观看| 亚洲欧美日韩系列| 日本二三区不卡| 亚洲欧洲精品成人久久奇米网| 国产精品一区二区久激情瑜伽| 久久影视一区二区| 国产精品1024久久| 国产精品久久久久久久久免费樱桃 | 亚洲精品v日韩精品| 色综合天天做天天爱| 夜夜精品视频一区二区| 欧美综合一区二区| 日韩国产精品久久久| 欧美sm极限捆绑bd| 国产成人av影院| 中文字幕一区二区三区不卡| 91在线云播放| 亚洲国产中文字幕| 日韩免费一区二区| 国产精品一级黄| 日韩美女视频19| 欧美性欧美巨大黑白大战| 人人精品人人爱| 精品国产区一区| 91女神在线视频| 亚洲成人av一区二区三区| 精品久久久久久久久久久久包黑料 | 亚洲第一电影网| 欧美成人一区二区| 成人午夜在线播放| 亚洲成人黄色影院| 久久久久国产精品人| 在线视频国内自拍亚洲视频| 亚洲电影中文字幕在线观看| 日韩欧美成人一区二区| 成人午夜精品在线| 日韩av一区二区在线影视| 久久久久国产精品厨房| 欧洲精品一区二区三区在线观看| 日日夜夜免费精品视频| 国产精品每日更新| 在线不卡a资源高清| 丁香婷婷综合网| 亚洲成av人片| 中文字幕亚洲区| 91精品久久久久久久久99蜜臂| 粉嫩av亚洲一区二区图片| 夜夜嗨av一区二区三区| 久久久美女艺术照精彩视频福利播放| av亚洲产国偷v产偷v自拍| 日本午夜一区二区| 一区二区三区四区av| 欧美国产日韩精品免费观看| 欧美精品在线一区二区三区| 不卡的av网站| 激情综合网天天干| 午夜免费久久看| 中文字幕中文字幕中文字幕亚洲无线 | 国产成人精品影视| 日韩精品欧美精品| 亚洲一区二区3| 国产精品久久久久毛片软件| 欧美www视频| 欧美一级午夜免费电影| 色哟哟一区二区三区| 不卡视频免费播放| 岛国一区二区在线观看| 韩国一区二区三区| 丝袜亚洲另类欧美| 亚洲一区二区精品久久av| 亚洲男同1069视频| 国产精品免费免费| 中文一区在线播放| 中文字幕免费观看一区| 久久久久成人黄色影片| 久久午夜国产精品| 国产三级精品视频| xfplay精品久久| 久久综合成人精品亚洲另类欧美| 日韩精品资源二区在线| 日韩手机在线导航| 精品日韩一区二区三区免费视频| 678五月天丁香亚洲综合网| 精品视频在线免费观看| 色噜噜久久综合| 欧美日韩在线电影| 91精品国产色综合久久不卡蜜臀| 91 com成人网| 欧美电视剧在线观看完整版| 欧美www视频| 久久精品人人爽人人爽| 国产精品美女久久久久久| 成人免费小视频| 亚洲夂夂婷婷色拍ww47| 日本在线播放一区二区三区| 久久成人免费网站| 国产精品456| 91免费看`日韩一区二区| 在线观看视频一区| 日韩一卡二卡三卡四卡| 久久亚洲精品小早川怜子| 国产精品美女www爽爽爽| 亚洲美女偷拍久久| 美女尤物国产一区| 成人理论电影网| 欧美日韩中文国产| 26uuu亚洲| 日韩一区在线看| 香港成人在线视频| 国产福利一区二区| 91福利视频网站| 欧美一区二区视频在线观看2022| 久久色在线视频| 夜色激情一区二区| 精品一区二区三区视频在线观看 | 亚洲网友自拍偷拍| 狠狠狠色丁香婷婷综合激情| 91色porny在线视频| 日韩视频免费观看高清完整版在线观看| 国产亚洲精久久久久久| 午夜精品久久久久久久99樱桃| 国产中文字幕精品| 欧美人体做爰大胆视频| 国产精品理论在线观看|