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

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

?? ch375hft.c

?? CH375這個經(jīng)典的芯片
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 2004.06.05
****************************************
**  Copyright  (C)  W.ch  1999-2004   **
**  Web:  http://www.winchiphead.com  **
****************************************
**  USB Host File Interface for CH375 **
**  TC2.0@PC, KC7.0@MCS51             **
****************************************
*/
/* CH375 主機文件系統(tǒng)接口 */
/* 支持: FAT12/FAT16/FAT32 */

/* MCS-51單片機C語言的U盤文件讀寫示例程序, 適用于ATMEL/PHILIPS/SST等具有1KB內(nèi)部RAM以及雙DPTR的單片機 */
/* 該程序?qū)盤中的/C51/CH375HFT.C文件中的每64字節(jié)的前4個字符顯示出來(顯示4字符,跳過60字符,顯示4字符...),
   如果找不到原文件CH375HFT.C, 那么該程序?qū)@示C51子目錄下所有以CH375開頭的文件名,
   如果找不到C51子目錄, 那么該程序?qū)@示根目錄下的所有文件名,
   最后新建文件"里面全0.TXT",文件內(nèi)容全部是字符0,如果有ADC,可以用ADC的數(shù)據(jù)替找字符0
*/
/* CH375的INT#引腳采用查詢方式處理, 磁盤數(shù)據(jù)復(fù)制方式為"雙DPTR復(fù)制", 文件數(shù)據(jù)復(fù)制方式為"外部子程序",
   本例使用512字節(jié)的外部RAM作為磁盤數(shù)據(jù)緩沖區(qū), 而沒有文件數(shù)據(jù)緩沖區(qū), 演示沒有外部RAM但是單片機的內(nèi)部RAM大于1K字節(jié)的應(yīng)用 */


/* C51   CH375HFT.C */
/* LX51  CH375HFT.OBJ , CH375HF4.LIB    如果將CH375HF4換成CH375HF6就可以支持FAT32 */
/* OHX51 CH375HFT */

#include <reg52.h>
#include <stdio.h>

/* 以下定義的詳細(xì)說明請看CH375HF6.H文件 */
#define LIB_CFG_DISK_IO			2		/* 磁盤讀寫的數(shù)據(jù)的復(fù)制方式,1為"單DPTR復(fù)制",2為"雙DPTR復(fù)制",3為"單DPTR和P2+R0復(fù)制" */
#define LIB_CFG_FILE_IO			0		/* 文件讀寫的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"單DPTR復(fù)制",2為"雙DPTR復(fù)制",3為"單DPTR和P2+R0復(fù)制" */
#define LIB_CFG_INT_EN			0		/* CH375的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */
/*#define LIB_CFG_FILE_IO_DEFAULT	1*/		/* 使用CH375HF6.H提供的默認(rèn)"外部子程序" */

#define CH375_CMD_PORT_ADDR		0xBDF1	/* CH375命令端口的I/O地址 */
#define CH375_DAT_PORT_ADDR		0xBCF0	/* CH375數(shù)據(jù)端口的I/O地址 */
/* 只使用單片機內(nèi)置的1KB外部RAM: 0000H-01FFH 為磁盤讀寫緩沖區(qū), 沒有文件數(shù)據(jù)緩沖區(qū) */
#define	DISK_BASE_BUF_ADDR		0x0000	/* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長度為SECTOR_SIZE */
/* 由于單片機內(nèi)置的外部RAM只有1KB, 有些單片機還要去掉256字節(jié)內(nèi)部RAM, 只剩下768字節(jié)的外部RAM,
   其中前512字節(jié)由CH375子程序用于磁盤數(shù)據(jù)緩沖, 由于"外部子程序"處理文件數(shù)據(jù)復(fù)制, 所以沒有文件數(shù)據(jù)緩沖區(qū) */
#define FILE_DATA_BUF_LEN		0x0200	/* 外部RAM的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長度不小于一次讀寫的數(shù)據(jù)長度,使用"外部子程序"時該定義沒有意義 */
/* 如果準(zhǔn)備使用雙緩沖區(qū)交替讀寫,那么不要定義FILE_DATA_BUF_LEN,而是在參數(shù)中指定緩沖區(qū)起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */

#define CH375_INT_WIRE			INT0	/* P3.2, INT0, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài) */

#define NO_DEFAULT_CH375_F_ENUM		1		/* 未調(diào)用CH375FileEnumer程序故禁止以節(jié)約代碼 */
#define NO_DEFAULT_CH375_F_QUERY	1		/* 未調(diào)用CH375FileQuery程序故禁止以節(jié)約代碼 */

#include "..\CH375HF6.H"				/* 如果不需要支持FAT32,那么請選用CH375HF4.H */

UINT8X	mFileReadBuffer[ 64 ]	_at_ 0x0200;	/* 緩沖CH375讀文件的一次數(shù)據(jù)傳輸,長度為CH375_MAX_DATA_LEN */

void xWriteToExtBuf( UINT8 mLength )	/* 該子程序由CH375的子程序庫調(diào)用,用于從CH375讀取文件數(shù)據(jù)到外部緩沖區(qū),被CH375FileRead調(diào)用 */
{
	UINT8	i;
	PUINT8X	p;
	if ( mLength == 64 ) {
		p = mFileReadBuffer;
		do {  /* 根據(jù)長度讀取數(shù)據(jù),實際上長度總是CH375_MAX_DATA_LEN,也就是64 */
			*p = CH375_DAT_PORT;  /* 將U盤讀出數(shù)據(jù)暫存到內(nèi)部RAM緩沖區(qū),可以用這種方式將文件數(shù)據(jù)保存到單片機的各種串行存儲器中 */
			p ++;
		} while ( -- mLength );  /* 復(fù)制上述數(shù)據(jù)的總時間不得超過2mS */
/*	PutDataToDAC( mFileReadBuffer );  將mFileReadBuffer緩沖區(qū)中的數(shù)據(jù)輸出給DAC */
		for ( i = 0; i != 4; i ++ ) { while( TI == 0 ); TI = 0; SBUF = mFileReadBuffer[ i ]; }  /* 顯示前4個字符 */
	}
	else if ( mLength == 0 ) {  /* 重試,恢復(fù)緩沖區(qū)起址,如果將文件數(shù)據(jù)讀寫的緩沖區(qū)的當(dāng)前指針放在mCmdParam.ReadX.mDataBuffer中則會被自動恢復(fù),無需下面的兩行程序 */
//		(UINT16)mCmdParam.ReadX.mDataBuffer;  /* mDataBuffer中為負(fù)值,重試的字節(jié)數(shù) */
	}
}

UINT8 GetDataFromADC( )  /* 沒有ADC,所以總是模擬返回數(shù)據(jù)30H */
{
/*	while ( RI == 0 ); RI = 0; return( SBUF );  通過串口獲得數(shù)據(jù)或者從各種串行存儲器中取出數(shù)據(jù) */
	return( '0' );
}

void xReadFromExtBuf( UINT8 mLength )	/* 該子程序由CH375的子程序庫調(diào)用,用于從外部緩沖區(qū)讀取文件數(shù)據(jù)到CH375,被CH375FileWrite調(diào)用 */
{
	if ( mLength ) {
		while ( mLength ) {  /* 根據(jù)長度寫入數(shù)據(jù),實際上長度總是CH375_MAX_DATA_LEN,也就是64 */
			CH375_DAT_PORT = GetDataFromADC( );  /* 從ADC獲取一字節(jié)數(shù)據(jù)寫入U盤,可以用這種方式從單片機的各種串行存儲器中取出文件數(shù)據(jù) */
			mLength --;
		}  /* 復(fù)制上述數(shù)據(jù)的總時間不得超過2mS,如果超過2mS請參考下述方法 */
	}
	else {  /* 重試,恢復(fù)緩沖區(qū)起址,如果將文件數(shù)據(jù)讀寫的緩沖區(qū)的當(dāng)前指針放在mCmdParam.WriteX.mDataBuffer中則會被自動恢復(fù),無需下面的兩行程序 */
//		(UINT16)mCmdParam.WriteX.mDataBuffer;  /* mDataBuffer中為負(fù)值,重試的字節(jié)數(shù) */
	}
}

#if	0	/* 如果xReadFromExtBuf子程序執(zhí)行總時間超過1mS,那么應(yīng)該用下述方法避免CH375長時間等待數(shù)據(jù) */
UINT8X	mFileWriteBuffer[ 64 ]	_at_ 0x0240;	/* 緩沖CH375寫文件的一次數(shù)據(jù)傳輸,長度為CH375_MAX_DATA_LEN */
void xReadFromExtBuf( UINT8 mLength )	/* 該子程序由CH375的子程序庫調(diào)用,用于從外部緩沖區(qū)讀取文件數(shù)據(jù)到CH375,被CH375FileWrite調(diào)用 */
{
	UINT8	i;
	while ( mLength ) CH375_DAT_PORT = mLength --;  /* 由于CH375的命令必須在2mS之內(nèi)完成,所以先寫入無意義數(shù)據(jù)結(jié)束前一個命令 */
	for ( i = 0; i != 64; i ++ ) mFileWriteBuffer[ i ] = GetDataFromADC( );  /* 從ADC獲得數(shù)據(jù)暫存到臨時緩沖區(qū), 沒有時間限制 */
	CH375_CMD_PORT = CMD_WR_USB_DATA7;  /* 重新發(fā)出寫數(shù)據(jù)命令,向CH375的主機端點發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */
	if ( CH375IntStatus ) CH375IntStatus = 0;  /* 僅作延時,不短于2uS */
	CH375_DAT_PORT = 64;  /* 后續(xù)數(shù)據(jù)的長度,對于寫U盤必須是64 */
	for ( i = 0; i != 64; i ++ ) CH375_DAT_PORT = mFileWriteBuffer[ i ];  /* 將臨時緩沖區(qū)中的數(shù)據(jù)寫入CH375,覆蓋前面寫入的無意義數(shù)據(jù) */
}
#endif

/* 在P1.4連接一個LED用于監(jiān)控演示程序的進度,低電平LED亮,當(dāng)U盤插入后亮 */
sbit P1_4  = P1^4;
#define LED_OUT_INIT( )		{ P1_4 = 1; }	/* P1.4 高電平 */
#define LED_OUT_ACT( )		{ P1_4 = 0; }	/* P1.4 低電平驅(qū)動LED顯示 */
#define LED_OUT_INACT( )	{ P1_4 = 1; }	/* P1.4 低電平驅(qū)動LED顯示 */
sbit P1_5  = P1^5;
/* 在P1.5連接一個LED用于監(jiān)控演示程序的進度,低電平LED亮,當(dāng)對U盤操作時亮 */
#define LED_RUN_ACT( )		{ P1_5 = 0; }	/* P1.5 低電平驅(qū)動LED顯示 */
#define LED_RUN_INACT( )	{ P1_5 = 1; }	/* P1.5 低電平驅(qū)動LED顯示 */
sbit P1_6  = P1^6;
/* 在P1.6連接一個LED用于監(jiān)控演示程序的進度,低電平LED亮,當(dāng)對U盤寫操作時亮 */
#define LED_WR_ACT( )		{ P1_6 = 0; }	/* P1.6 低電平驅(qū)動LED顯示 */
#define LED_WR_INACT( )		{ P1_6 = 1; }	/* P1.6 低電平驅(qū)動LED顯示 */

/* 延時100毫秒,不精確 */
void	mDelay100mS( )
{
	UINT8	i, j, c;
	for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3;
}

/* 將程序空間的字符串復(fù)制到內(nèi)部RAM中,返回字符串長度 */
UINT8	mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource )
{
	UINT8	i = 0;
	while ( *iDestination = *iSource ) {
		iDestination ++;
		iSource ++;
		i ++;
	}
	return( i );
}

/* 檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機 */
void	mStopIfError( UINT8 iError )
{
	if ( iError == ERR_SUCCESS ) return;  /* 操作成功 */
	printf( "Error: %02X\n", (UINT16)iError );  /* 顯示錯誤 */
	while ( 1 ) {
		LED_OUT_ACT( );  /* LED閃爍 */
		mDelay100mS( );
		LED_OUT_INACT( );
		mDelay100mS( );
	}
}

/* 為printf和getkey輸入輸出初始化串口 */
void	mInitSTDIO( )
{
	SCON = 0x50;
	PCON = 0x80;
	TMOD = 0x20;
	TH1 = 0xf3;  /* 24MHz晶振, 9600bps */
	TR1 = 1;
	TI = 1;
}

main( ) {
	UINT8	i, c, SecCount;
	UINT16	NewSize;  /* 因為演示板的RAM容量只有32KB,所以NewSize限制為16位,實際上如果文件大于32256字節(jié),應(yīng)該分幾次讀寫并且將NewSize改為UINT32以便累計 */
	UINT8	code *pCodeStr;
	LED_OUT_INIT( );
	LED_OUT_ACT( );  /* 開機后LED亮一下以示工作 */
	mDelay100mS( );  /* 延時100毫秒 */
	LED_OUT_INACT( );
	mInitSTDIO( );  /* 為了讓計算機通過串口監(jiān)控演示過程 */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美影视一区二区三区| 欧美日韩国产三级| 欧美偷拍一区二区| 久久先锋影音av| 亚洲综合色噜噜狠狠| 国产精品一区二区三区网站| 91久久精品一区二区三区| 久久久久久久久久美女| 天天色图综合网| 在线免费观看日本欧美| 国产精品系列在线| 韩国欧美国产一区| 91麻豆精品91久久久久同性| 亚洲精品亚洲人成人网在线播放| 国产电影一区二区三区| 精品处破学生在线二十三| 天堂精品中文字幕在线| 欧美日韩综合不卡| 一区二区三区小说| 91香蕉国产在线观看软件| 国产三级久久久| 国产高清久久久| 久久久久高清精品| 国产乱淫av一区二区三区| 欧美一区二区视频在线观看| 亚洲午夜电影在线观看| 欧美亚洲国产bt| 亚洲制服丝袜av| 欧美亚洲综合久久| 亚洲午夜在线视频| 欧美揉bbbbb揉bbbbb| 亚洲电影视频在线| 欧美日韩精品欧美日韩精品一 | 欧美日韩国产成人在线91| 亚洲欧美激情一区二区| www.日韩精品| 亚洲日本欧美天堂| 色婷婷av一区二区三区大白胸| 中文字幕欧美一区| 欧美无砖砖区免费| 日韩精品一卡二卡三卡四卡无卡| 欧美日韩一区三区| 蜜桃精品视频在线| 久久久精品影视| 91在线视频在线| 亚洲超碰97人人做人人爱| 91精品在线麻豆| 久久99精品久久久久久久久久久久| 日韩精品一区二| 成人毛片视频在线观看| 亚洲日本成人在线观看| 欧美日韩国产精选| 精品无人码麻豆乱码1区2区| 国产午夜精品在线观看| 91亚洲国产成人精品一区二三| 亚洲午夜一区二区| 欧美成人一区二区| 91在线视频网址| 日韩av一区二区在线影视| 精品99一区二区| 91久久奴性调教| 加勒比av一区二区| 自拍av一区二区三区| 欧美电影影音先锋| 成人aaaa免费全部观看| 婷婷久久综合九色综合绿巨人| 欧美岛国在线观看| 91香蕉视频污| 国产一区免费电影| 亚洲综合清纯丝袜自拍| 欧美精品一区二区三区四区| 91啪在线观看| 国产一区二区久久| 亚洲.国产.中文慕字在线| 久久蜜桃av一区二区天堂 | 中文字幕av一区二区三区| 国产精品国产三级国产专播品爱网 | 91丨porny丨户外露出| 亚洲va国产va欧美va观看| 欧美不卡一区二区| 欧洲一区二区三区在线| 久草这里只有精品视频| 亚洲最新在线观看| 久久久亚洲精品石原莉奈| 成人免费看的视频| 精品一区二区三区av| 一区二区三区四区不卡在线| 欧美激情一区二区| 日韩午夜小视频| 欧美色成人综合| 99久久er热在这里只有精品66| 免费看日韩a级影片| 亚洲精品第1页| 国产精品欧美久久久久无广告| 337p亚洲精品色噜噜噜| 色乱码一区二区三区88| 国产91精品一区二区| 韩国成人在线视频| 免费观看91视频大全| 亚洲3atv精品一区二区三区| 自拍视频在线观看一区二区| 中文久久乱码一区二区| 久久综合一区二区| 精品久久久久99| 欧美不卡一区二区三区| 欧美精品久久天天躁| 欧美三级一区二区| 欧美私模裸体表演在线观看| 99久久er热在这里只有精品15| 成人免费观看男女羞羞视频| 国产一区亚洲一区| 国产精品456露脸| 狠狠色丁香久久婷婷综合_中 | 欧美一级片在线| 精品视频123区在线观看| 欧美日韩在线播放三区| 欧美日本在线播放| 欧美一区二区三区婷婷月色| 日韩亚洲欧美一区| 日韩女优av电影| 久久久不卡网国产精品二区| 久久综合狠狠综合久久综合88| 精品久久久久久久久久久久久久久久久 | 91麻豆精品国产综合久久久久久| 欧美私模裸体表演在线观看| 欧美精品色一区二区三区| 欧美人成免费网站| 日韩亚洲欧美在线| 亚洲精品一区二区在线观看| 日韩精品资源二区在线| 精品久久久久久久久久久久久久久 | 成人激情校园春色| 色激情天天射综合网| 欧美人伦禁忌dvd放荡欲情| 欧美成人video| 久久久欧美精品sm网站| 国产精品剧情在线亚洲| 亚洲一区二区视频| 日韩av电影免费观看高清完整版| 久草这里只有精品视频| 大陆成人av片| 日本道精品一区二区三区| 欧美一区二区私人影院日本| 久久久久久久久久久久久久久99| 中文字幕日本乱码精品影院| 亚洲va欧美va人人爽| 国产精品小仙女| 色欧美88888久久久久久影院| 91精品一区二区三区久久久久久| 2020国产精品自拍| 亚洲综合一二区| 国产精品综合久久| 色先锋资源久久综合| 久久综合色播五月| 亚洲另类一区二区| 美女视频黄久久| 色婷婷国产精品久久包臀| 精品国产乱码久久久久久蜜臀 | 久久久精品免费网站| 亚洲乱码国产乱码精品精小说| 日韩av中文在线观看| 91老司机福利 在线| 日韩精品一区二区在线| 亚洲综合自拍偷拍| 成人黄色av网站在线| 日韩一区二区三区免费看| 亚洲免费资源在线播放| 韩国女主播成人在线观看| 欧美日韩一区在线| 国产精品久久久久永久免费观看 | 久久亚洲精华国产精华液 | 国产日韩欧美高清| 美女免费视频一区二区| 欧美亚洲国产一区二区三区va| 精品国产sm最大网站免费看| 亚洲一区二区在线免费看| 盗摄精品av一区二区三区| 欧美一级黄色片| 视频一区二区不卡| 在线视频亚洲一区| 国产精品网站在线观看| 国产一区二区三区综合 | 91黄色免费看| 国产精品免费久久久久| 国产精品一区二区男女羞羞无遮挡 | 欧美图片一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 激情文学综合插| 精品久久久久久综合日本欧美| 免费人成黄页网站在线一区二区| 在线观看精品一区| 一区二区久久久久久| 91视频在线观看| 日韩码欧中文字| 91老师片黄在线观看| 一区二区三区中文字幕电影| 91毛片在线观看| 亚洲宅男天堂在线观看无病毒 | 91啪在线观看| 夜夜嗨av一区二区三区四季av|