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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ch375hms.c

?? USB驅(qū)動芯片簡介及驅(qū)動源程序
?? C
字號:
/* 2004.06.05
****************************************
**  Copyright  (C)  W.ch  1999-2004   **
**  Web:  http://www.winchiphead.com  **
****************************************
**  USB Host File Module      @CH375  **
**  TC2.0@PC, KC7.0@MCS51             **
****************************************
*/
/* U盤文件讀寫模塊, 連接方式: 3線制串口+查詢 */
/* MCS-51單片機C語言示例程序 */
/* 因為使用U盤文件讀寫模塊而不是使用U盤文件級子程序庫,所以占用較少的單片機資源,可以使用89C51單片機測試 */
/* 本程序用于演示處理文件目錄項,例如:修改文件名,設(shè)置文件的創(chuàng)建日期和時間等 */

#include <reg51.h>
#include <absacc.h>
#include <string.h>
#include <stdio.h>

#define MAX_PATH_LEN			40		/* 最大路徑長度,含所有斜杠分隔符和小數(shù)點間隔符以及路徑結(jié)束符00H,CH375模塊支持的最大值是62,最小值是13 */
/* 為了處理文件目錄項,MAX_PATH_LEN至少為36,sizeof( mCmdParam.FileDirInfo ) */
#include "..\CH375HM.H"

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

CMD_PARAM	idata	mCmdParam;			/* 默認(rèn)情況下該結(jié)構(gòu)將占用60字節(jié)的RAM,可以修改MAX_PATH_LEN常量,當(dāng)修改為32時,只占用32字節(jié)的RAM */

sbit	LED_OUT		=	P1^4;			/* P1.4 低電平驅(qū)動LED顯示,用于監(jiān)控演示程序的進(jìn)度 */

/* 以毫秒為單位延時,適用于24MHz時鐘 */
void	mDelaymS( unsigned char delay )
{
	unsigned char	i, j, c;
	for ( i = delay; i != 0; i -- ) {
		for ( j = 200; j != 0; j -- ) c += 3;  /* 在24MHz時鐘下延時500uS */
		for ( j = 200; j != 0; j -- ) c += 3;  /* 在24MHz時鐘下延時500uS */
	}
}

/* 發(fā)送一個字節(jié)數(shù)據(jù)給CH375模塊 */
void	mSendByte( unsigned char c )
{
	TI = 0;
	SBUF = c;
	while ( TI == 0 );
}

/* 從CH375模塊接收一個字節(jié)數(shù)據(jù) */
unsigned char	mRecvByte( )
{
	unsigned char	c;
	while ( RI == 0 );
	c = SBUF;
	RI = 0;
	return( c );
}

/* 執(zhí)行命令 */
unsigned char	ExecCommand( unsigned char cmd, unsigned char len )
/* 輸入命令碼和輸入?yún)?shù)長度,返回操作狀態(tài)碼,輸入?yún)?shù)和返回參數(shù)都在CMD_PARAM結(jié)構(gòu)中 */
{
	unsigned char		i, j, status;
	mSendByte( SER_SYNC_CODE1 );  /* 發(fā)送串口同步碼通知模塊,說明命令碼開始發(fā)送,請求開始執(zhí)行命令 */
	mSendByte( SER_SYNC_CODE2 );  /* 用兩個串口同步碼代替STA#的下降沿 */
/* 上面兩個串口同步碼應(yīng)該連續(xù)發(fā)送,如果不連續(xù),那么間隔時間不能超過20mS,否則命令無效 */
	RI = 0;
	mSendByte( cmd );  /* 寫入命令碼 */
	mSendByte( len );  /* 寫入后續(xù)參數(shù)的長度 */
	if ( len ) {  /* 有參數(shù) */
		for ( i = 0; i != len; i ++ ) mSendByte( mCmdParam.Other.mBuffer[ i ] );  /* 依次寫入?yún)?shù) */
	}
	while ( 1 ) {  /* 處理數(shù)據(jù)傳輸,直到操作完成才退出 */
		status = mRecvByte( );  /* 等待模塊完成操作并返回操作狀態(tài) */
		if ( status == ERR_SUCCESS ) {  /* 操作成功 */
			i = mRecvByte( );  /* 返回結(jié)果數(shù)據(jù)的長度 */
			if ( i ) {  /* 有結(jié)果數(shù)據(jù) */
				j = 0;
				do {  /* 使用do+while結(jié)構(gòu)是因為其效率高于for */
					mCmdParam.Other.mBuffer[ j ] = mRecvByte( );  /* 接收結(jié)果數(shù)據(jù)并保存到參數(shù)結(jié)構(gòu)中 */
					j ++;
				} while ( -- i );
			}
			break;  /* 操作成功返回 */
		}
		else if ( status == USB_INT_DISK_READ || status == USB_INT_DISK_WRITE || status == USB_INT_DISK_RETRY ) {  /* 正在從U盤讀數(shù)據(jù)塊,請求數(shù)據(jù)讀出,正在向U盤寫數(shù)據(jù)塊,請求數(shù)據(jù)寫入,讀寫數(shù)據(jù)塊失敗重試 */
			break;  /* 本程序只使用以字節(jié)為單位的文件讀寫子程序,所以正常情況下不會收到該狀態(tài)碼,操作失敗返回 */
		}
		else {  /* 操作失敗 */
			if ( status == ERR_DISK_DISCON || status == ERR_USB_CONNECT ) mDelaymS( 100 );  /* U盤剛剛連接或者斷開,應(yīng)該延時幾十毫秒再操作 */
			break;  /* 操作失敗返回 */
		}
	}
	return( status );
}

/* 檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機,應(yīng)該替換為實際的處理措施 */
void	mStopIfError( unsigned char iError )
{
	unsigned char	led;
	if ( iError == ERR_SUCCESS ) return;  /* 操作成功 */
/*	printf( "Error: %02X\n", (unsigned short)iError );*/  /* 顯示錯誤 */
	led=0;
	while ( 1 ) {
		LED_OUT = led&1;  /* LED閃爍 */
		mDelaymS( 100 );
		led^=1;
	}
}

/* 大端與小端格式的數(shù)據(jù)處理 */
unsigned short	SwapUINT16( unsigned short d )
{
	return( ( d << 8 ) & 0xFF00 | ( d >> 8 ) & 0xFF );
}

main( ) {
	unsigned char	i;
	unsigned short	FileCreateDate, FileCreateTime;
	unsigned char	*name;
	LED_OUT = 0;  /* 開機后LED亮一下以示工作 */
	mDelaymS( 100 );  /* 延時100毫秒,CH375模塊上電后需要100毫秒左右的復(fù)位時間 */
	mDelaymS( 100 );
	LED_OUT = 1;
/* 設(shè)置與CH375模塊通訊的串口 */
	SCON = 0x50;
	PCON = 0x80;
	TMOD = 0x20;
	TH1 = 0xE6;  /* 24MHz晶振, 4800bps */
	TR1 = 1;

/*	printf( "Start\n" );*/
	while ( 1 ) {  /* 主循環(huán) */
/*		printf( "Wait\n" );*/
		while ( 1 ) {  /* 使用查詢方式看U盤是否連接 */
			i = ExecCommand( CMD_QueryStatus, 0 );  /* 查詢當(dāng)前模塊的狀態(tài) */
			mStopIfError( i );
			if ( mCmdParam.Status.mDiskStatus >= DISK_CONNECT ) break;  /* U盤已經(jīng)連接 */
			mDelaymS( 100 );  /* 可以在打算讀寫U盤時再查詢,沒有必要一直連續(xù)不停地查詢,可以讓單片機做其它事,沒事可做就延時等待一會再查詢 */
		}
		mDelaymS( 200 );  /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */
		LED_OUT = 0;  /* LED亮 */
/* 檢查U盤是否準(zhǔn)備好,某些U盤必須要執(zhí)行這一步才能工作 */
		for ( i = 0; i < 3; i ++ ) {
			mDelaymS( 100 );
//			printf( "Ready ?\n" );
			if ( ExecCommand( CMD_DiskReady, 0 ) == ERR_SUCCESS ) break;  /* 查詢磁盤是否準(zhǔn)備好 */
		}
/* 將MY_ADC.TXT文件名修改為WY_ADC.C,并設(shè)置創(chuàng)建文件的日期和時間,首先打開原文件 */
		name = "/MY_ADC.TXT";  /* 文件名,斜杠說明是從根目錄開始 */
/*		printf( "Open\n" );*/
		strcpy( mCmdParam.Open.mPathName, name );  /* 原文件名 */
		i = ExecCommand( CMD_FileOpen, MAX_PATH_LEN );  /* 打開文件,輸入?yún)?shù)置為最大值,省得再計算參數(shù)長度 */
		if ( i == ERR_MISS_FILE ) mStopIfError( i );  /* 文件不存在,當(dāng)然無法修改文件目錄信息 */
		mStopIfError( i );
		/* 文件讀寫操作等... */

/*		printf( "Get file directory information\n" );*/
		mCmdParam.FileDirInfo.mAccessMode = 0;  /* 讀取文件目錄信息 */
		mCmdParam.FileDirInfo.mReserved[0] = mCmdParam.FileDirInfo.mReserved[1] = mCmdParam.FileDirInfo.mReserved[2] = 0;  /* 保留單元 */
		i = ExecCommand( CMD_FileDirInfo, 4 );  /* 存取當(dāng)前已打開文件的目錄信息 */
		mStopIfError( i );

/* 以下修改文件目錄信息中的文件名 */
		mCmdParam.FileDirInfo.mDir.DIR_Name[0] = 'W';  /* 修改文件名首字節(jié)為W */
		mCmdParam.FileDirInfo.mDir.DIR_Name[8] = 'C';  /* 修改文件擴展名為C */
		mCmdParam.FileDirInfo.mDir.DIR_Name[9] = ' ';
		mCmdParam.FileDirInfo.mDir.DIR_Name[10] = ' ';

/* 以下修改文件目錄信息中的文件創(chuàng)建時間,DIR_CrtTime是創(chuàng)建時間,DIR_WrtTime是修改時間 */
		FileCreateTime = MAKE_FILE_TIME( 16, 49, 28 );  /* 設(shè)置文件創(chuàng)建時間是16時49分28秒 */
//		mCmdParam.FileDirInfo.mDir.DIR_CrtTime = FileCreateTime;  /* 文件創(chuàng)建的時間,適用于小端格式 */
		mCmdParam.FileDirInfo.mDir.DIR_CrtTime = SwapUINT16( FileCreateTime );  /* MCS51單片機C語言是大端格式,所以必須轉(zhuǎn)換后輸出 */
		FileCreateDate = MAKE_FILE_DATE( 2004, 12, 8 );  /* 設(shè)置文件創(chuàng)建日期是2004年12月8日 */
//		mCmdParam.FileDirInfo.mDir.DIR_CrtDate = FileCreateDate;  /* 文件創(chuàng)建的日期,適用于小端格式 */
		mCmdParam.FileDirInfo.mDir.DIR_CrtDate = SwapUINT16( FileCreateDate );  /* MCS51單片機C語言是大端格式,所以必須轉(zhuǎn)換后輸出 */

//		mCmdParam.FileDirInfo.mDir.DIR_WrtTime = SwapUINT16( MAKE_FILE_TIME( 時, 分, 秒 ) );  /* 文件修改時間 */
//		mCmdParam.FileDirInfo.mDir.DIR_LstAccDate = SwapUINT16( MAKE_FILE_DATE( 年, 月, 日 ) );  /* 最近一次存取操作的日期 */

/* 以下將修改過的內(nèi)容真正刷新到U盤中 */
/*		printf( "Save new file directory information\n" );*/
		mCmdParam.FileDirInfo.mAccessMode = 0xF0;  /* 寫入/更新文件目錄信息 */
		i = ExecCommand( CMD_FileDirInfo, sizeof( mCmdParam.FileDirInfo ) );  /* 存取當(dāng)前已打開文件的目錄信息 */
		mStopIfError( i );

		/* 文件讀寫操作等... */
/*		printf( "Close\n" );*/
		mCmdParam.Close.mUpdateLen = 0;
		i = ExecCommand( CMD_FileClose, 1 );  /* 關(guān)閉文件 */
		mStopIfError( i );

/* 等待U盤斷開 */
/*		printf( "Take_out\n" );*/
		while ( 1 ) {  /* 使用查詢方式看U盤是否斷開 */
			i = ExecCommand( CMD_QueryStatus, 0 );  /* 查詢當(dāng)前模塊的狀態(tài) */
			mStopIfError( i );
			if ( mCmdParam.Status.mDiskStatus <= DISK_DISCONNECT ) break;  /* U盤已經(jīng)斷開 */
			mDelaymS( 100 );  /* 沒有必要一直連續(xù)不停地查詢,可以讓單片機做其它事,沒事可做就延時等待一會再查詢 */
		}
		LED_OUT = 1;  /* LED滅 */
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情图区综合网| 亚洲国产精品久久人人爱蜜臀| 国产一区二区三区四区五区美女 | 亚洲午夜av在线| 欧美日韩中字一区| 图片区小说区国产精品视频| 欧美日韩国产中文| 免费看欧美女人艹b| 久久精品欧美日韩精品| 国产a区久久久| 亚洲欧洲另类国产综合| 欧美综合在线视频| 午夜精品福利一区二区三区av| 在线成人小视频| 国内精品久久久久影院薰衣草| 久久久久99精品国产片| 99精品视频免费在线观看| 亚洲电影视频在线| 精品电影一区二区三区| 91丝袜国产在线播放| 亚洲尤物视频在线| 久久一区二区三区四区| 91亚洲男人天堂| 奇米色一区二区| 国产日产欧美一区| 欧美性高清videossexo| 国产又黄又大久久| 亚洲综合精品久久| 久久综合久久鬼色中文字| 99久久精品国产毛片| 日本亚洲天堂网| 欧美激情中文字幕| 6080国产精品一区二区| 丁香五精品蜜臀久久久久99网站 | 亚洲天天做日日做天天谢日日欢| 欧美视频一区二区三区| 国产成人免费9x9x人网站视频| 一区二区日韩av| 久久奇米777| 欧美精品vⅰdeose4hd| 粉嫩蜜臀av国产精品网站| 午夜免费欧美电影| 国产精品白丝在线| 久久久久97国产精华液好用吗| 欧美日本一区二区在线观看| voyeur盗摄精品| 日日欢夜夜爽一区| 综合久久国产九一剧情麻豆| 精品久久人人做人人爰| 欧美日韩1区2区| 91啪亚洲精品| 国产91在线看| 激情成人综合网| 日韩专区欧美专区| 亚洲精品日产精品乱码不卡| 精品国产乱码久久久久久1区2区| 欧美亚男人的天堂| 99国产一区二区三精品乱码| 国产精品一区二区91| 美女视频免费一区| 天堂蜜桃一区二区三区| 亚洲国产欧美在线| 亚洲欧美二区三区| 最新久久zyz资源站| 欧美国产精品一区| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲日本va在线观看| 久久天天做天天爱综合色| 日韩精品专区在线影院重磅| 欧美精品乱码久久久久久按摩| 在线视频国内自拍亚洲视频| 91精彩视频在线观看| 91性感美女视频| 99免费精品在线观看| 不卡的av网站| 99久久免费国产| 91亚洲精品乱码久久久久久蜜桃| 91在线精品一区二区三区| 99精品国产99久久久久久白柏| 不卡电影一区二区三区| 97精品久久久久中文字幕 | 国产成人自拍在线| 国产精品18久久久久| 国产一区二区不卡老阿姨| 激情av综合网| 成人动漫视频在线| 99精品欧美一区二区蜜桃免费 | 欧美伊人久久久久久久久影院 | 国产精品一二三区在线| 国产成人aaa| 91在线观看视频| 91国在线观看| 欧美日韩国产精品成人| 91精品国产aⅴ一区二区| 欧美va亚洲va国产综合| 国产视频一区二区在线观看| 国产精品网站在线播放| 中文字幕一区视频| 亚洲国产综合91精品麻豆| 日本三级亚洲精品| 国产精品一区二区在线观看不卡 | 午夜电影网一区| 毛片不卡一区二区| 成人综合婷婷国产精品久久| 不卡视频在线看| 欧美日韩免费高清一区色橹橹| 日韩欧美三级在线| 国产精品福利影院| 石原莉奈在线亚洲二区| 国产不卡视频在线观看| 日本福利一区二区| 精品日韩成人av| 成人欧美一区二区三区视频网页 | 美女一区二区久久| 成人污污视频在线观看| 欧美肥妇bbw| 国产精品久久久久永久免费观看| 亚洲6080在线| 春色校园综合激情亚洲| 4438x成人网最大色成网站| 国产欧美一区二区精品久导航 | 日韩免费看的电影| 国产精品人人做人人爽人人添| 亚洲成av人片一区二区| 丁香六月久久综合狠狠色| 在线综合视频播放| 中文字幕日韩一区| 久久99精品国产麻豆婷婷洗澡| 色婷婷综合久久久久中文| 欧美精品一区二区三区高清aⅴ | 美日韩黄色大片| 91玉足脚交白嫩脚丫在线播放| 精品国产乱码久久久久久夜甘婷婷| 亚洲欧洲日韩综合一区二区| 久久国产夜色精品鲁鲁99| 色哟哟一区二区在线观看| 欧美精品一区二区三区视频| 午夜精品福利一区二区蜜股av| 99久久久久久| 欧美极品少妇xxxxⅹ高跟鞋| 午夜激情久久久| 在线精品视频免费播放| 中文字幕高清一区| 狠狠色丁香久久婷婷综合丁香| 欧美日韩一级片在线观看| 中文字幕一区二区三| 国产精品自产自拍| 日韩欧美另类在线| 婷婷一区二区三区| 欧美日韩成人一区| 亚洲小说春色综合另类电影| 91蜜桃婷婷狠狠久久综合9色| 国产日韩精品一区二区三区| 理论电影国产精品| 在线播放日韩导航| 午夜视频在线观看一区| 91福利视频网站| 一区二区三区视频在线看| 成人动漫一区二区| 中文字幕视频一区二区三区久| 国产91丝袜在线播放九色| 日韩欧美国产一区二区在线播放| 亚洲成人精品在线观看| 欧美在线免费观看视频| 一区二区三区不卡视频在线观看| 成人国产精品免费网站| 国产精品网站导航| 99精品国产99久久久久久白柏| 国产精品伦一区| av电影在线观看一区| 亚洲色图一区二区三区| 91丨porny丨在线| 亚洲免费av网站| 欧美日韩中文一区| 日韩精品成人一区二区在线| 日韩一区二区三区av| 狠狠色狠狠色综合日日91app| 久久影音资源网| 风间由美中文字幕在线看视频国产欧美| 久久久久久综合| 成人午夜在线视频| 亚洲黄色小说网站| 欧美丰满一区二区免费视频| 日本vs亚洲vs韩国一区三区| 欧美va亚洲va国产综合| 成人av电影在线播放| 洋洋av久久久久久久一区| 5566中文字幕一区二区电影| 韩国一区二区视频| 国产精品国产三级国产aⅴ原创 | 成人激情文学综合网| 亚洲视频在线一区观看| 91精品福利视频| 日本不卡视频在线| 中日韩av电影| 欧美三级午夜理伦三级中视频| 麻豆精品在线播放| 国产精品女主播在线观看| 色婷婷亚洲婷婷| 日本女优在线视频一区二区|