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

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

?? ch375hmi.c

?? U盤文件讀寫模塊(單片機系統大容量數據移動存儲解決方案)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 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盤文件讀寫模塊, 連接方式: 軟件模擬SPI時序+查詢 */
/* MCS-51單片機C語言示例程序 */
/* 因為使用U盤文件讀寫模塊而不是使用U盤文件級子程序庫,所以占用較少的單片機資源,可以使用89C51單片機測試 */

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

#define MAX_PATH_LEN			32		/* 最大路徑長度,含所有斜杠分隔符和小數點間隔符以及路徑結束符00H,CH375模塊支持的最大值是64,最小值是13 */
#include "..\CH375HM.H"

/* 電路連接方式,4+1線SPI,除SCS外均可共用SPI總線
   單片機    模塊
    P1.0  =  SDI
    P1.1  =  SDO
    P1.2  =  SCK
    P1.3  =  SCS
    INT0  =  INT#  雖然連接到INT0,但是本程序只是查詢模塊的INT#的狀態,所以可以用P1口等普通I/O引腳代替INT0
*/
sbit	P10					=	P1^0;
sbit	P11					=	P1^1;
sbit	P12					=	P1^2;
sbit	P13					=	P1^3;
#define	CH375HM_SPI_SDI			P10		/* 假定CH375模塊的SDI引腳連接到單片機的P10引腳 */
#define	CH375HM_SPI_SDO			P11		/* 假定CH375模塊的SDO引腳連接到單片機的P11引腳 */
#define	CH375HM_SPI_SCK			P12		/* 假定CH375模塊的SCK引腳連接到單片機的P12引腳 */
#define	CH375HM_SPI_SCS			P13		/* 假定CH375模塊的SCS引腳連接到單片機的P13引腳 */
#define CH375HM_INT_WIRE		INT0	/* 假定CH375模塊的INT#引腳連接到單片機的INT0引腳 */

/* 假定文件數據緩沖區: ExtRAM: 0000H-7FFFH */
unsigned char xdata DATA_BUF[ 512 * 32 ] _at_ 0x0000;	/* 外部RAM的文件數據緩沖區,從該單元開始的緩沖區長度不小于一次讀寫的數據長度,最少為512字節 */

unsigned char xdata *buffer;			/* 數據緩沖區指針,用于讀寫數據塊 */

CMD_PARAM		mCmdParam;				/* 默認情況下該結構將占用64字節的RAM,可以修改MAX_PATH_LEN常量,當修改為32時,只占用32字節的RAM */

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

/* 以毫秒為單位延時,適用于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 */
	}
}

/* 發送一個字節數據給CH375模塊,同時接收一個字節,以SPI模式0方式(SPI_SCK默認為0) */
unsigned char	mSpiExchange( unsigned char c )
{
	unsigned char	i, d;
	d = 0;
	CH375HM_SPI_SCK = 0;
	for ( i = 8; i != 0; i -- ) {  /* 8個位 */
		if ( c & 0x80 ) CH375HM_SPI_SDI = 1;  /* 向模塊的SDI輸入引腳輸出數據 */
		else CH375HM_SPI_SDI = 0;
		d <<= 1;
		if ( CH375HM_SPI_SDO ) d ++;  /* 如果模塊的SDO輸出引腳為高電平則輸入位1 */
		CH375HM_SPI_SCK = 1;  /* SPI時鐘上升沿,模塊接收數據并輸出數據 */
		c <<= 1;
		CH375HM_SPI_SCK = 0;
	}
/* 如果單片機較快使該mSpiExchange子程序執行時間短于10uS,或者是大于1MHz的硬件SPI接口,那么此處應該加延時確保該子程序調用周期大于10uS */
/* 以上數據適用于模塊單片機晶振為18.432MHz的情況,如果模塊單片機晶振頻率加倍,那么上述時間要求應該減少一半 */
/* 普通MCS51單片機以軟件模擬的SPI接口較慢,無需任何延時 */
	return( d );
}

#if 0
/* 發送一個字節數據給CH375模塊,同時接收一個字節,以SPI模式3方式(SPI_SCK默認為1) */
unsigned char	mSpiExchange3( unsigned char c )
{
	unsigned char	i, d;
	d = 0;
	for ( i = 8; i != 0; i -- ) {   /* 8個位 */
		CH375HM_SPI_SCK = 0;
		if ( c & 0x80 ) CH375HM_SPI_SDI = 1;  /* 向模塊的SDI輸入引腳輸出數據 */
		else CH375HM_SPI_SDI = 0;
		d <<= 1;
		if ( CH375HM_SPI_SDO ) d ++;  /* 如果模塊的SDO輸出引腳為高電平則輸入位1 */
		CH375HM_SPI_SCK = 1;  /* SPI時鐘上升沿,模塊接收數據并輸出數據 */
		c <<= 1;
	}
/* 時間要求同上面mSpiExchange子程序SPI模式0 */
	return( d );
}
#endif

/* 執行命令 */
unsigned char	ExecCommand( unsigned char cmd, unsigned char len )
/* 輸入命令碼和輸入參數長度,返回操作狀態碼,輸入參數和返回參數都在CMD_PARAM結構中 */
{
	unsigned char		i, j, status;
	CH375HM_SPI_SCS = 0;  /* 產生SPI片選 */
	mSpiExchange( cmd );  /* 寫入命令碼 */
	mSpiExchange( len );  /* 寫入后續參數的長度 */
	if ( len ) {  /* 有參數 */
		for ( i = 0; i != len; i ++ ) mSpiExchange( mCmdParam.Other.mBuffer[ i ] );  /* 依次寫入參數 */
	}
	CH375HM_SPI_SCS = 1;  /* 結束SPI片選 */
	while ( 1 ) {  /* 處理數據傳輸,直到操作完成才退出 */
		while ( CH375HM_INT_WIRE );  /* 等待模塊完成操作產生低電平中斷,最佳檢測方式是對模塊的INT#信號進行下降沿邊沿檢測 */
		CH375HM_SPI_SCS = 0;  /* 產生SPI片選 */
		status = mSpiExchange( 0xFF );  /* 寫入0xFF作為無效命令碼(不應該寫其它值),返回模塊操作狀態 */
#if 0
/* 如果未連接INT#引腳,去掉上面的while ( CH375HM_INT_WIRE ),那么可以使用下述程序進行SPI頻繁查詢 */
		if ( status == 0xFF ) {  /* 模塊操作尚未完成,也就是INT#沒有中斷產生 */
			CH375HM_SPI_SCS = 1;  /* 結束SPI片選 */
			mDelaymS( 1 );
			continue;  /* 繼續等待模塊完成操作 */
		}
#endif
		if ( status == ERR_SUCCESS ) {  /* 操作成功 */
			i = mSpiExchange( 0 );  /* 返回結果數據的長度,寫入0沒有意義,可以是任何值 */
			if ( i ) {  /* 有結果數據 */
				j = 0;
				do {  /* 使用do+while結構是因為其效率高于for */
					mCmdParam.Other.mBuffer[ j ] = mSpiExchange( 0 );  /* 接收結果數據并保存到參數結構中,寫入0沒有意義 */
					j ++;
				} while ( -- i );
			}
			CH375HM_SPI_SCS = 1;  /* 結束SPI片選 */
			break;  /* 操作成功返回 */
		}
		else if ( status == USB_INT_DISK_READ ) {  /* 正在從U盤讀數據塊,請求數據讀出 */
			i = 64;
			do {
				*buffer = mSpiExchange( 0 );  /* 依次接收64字節的數據 */
				buffer ++;  /* 接收的數據保存到外部緩沖區 */
			} while ( -- i );
		}
		else if ( status == USB_INT_DISK_WRITE ) {  /* 正在向U盤寫數據塊,請求數據寫入 */
			i = 64;
			do {
				mSpiExchange( *buffer );  /* 依次發送64字節的數據 */
				buffer ++;  /* 發送的數據來自外部緩沖區 */
			} while ( -- i );
		}
		else if ( status == USB_INT_DISK_RETRY ) {  /* 讀寫數據塊失敗重試,應該向回修改緩沖區指針 */
			i = mSpiExchange( 0 );  /* 大端模式下為回改指針字節數的高8位,如果是小端模式那么接收到的是回改指針字節數的低8位 */
			status = mSpiExchange( 0 );  /* 大端模式下為回改指針字節數的低8位,如果是小端模式那么接收到的是回改指針字節數的高8位 */
			buffer -= ( (unsigned short)i << 8 ) + status;  /* 這是大端模式下的回改指針,對于小端模式,應該是( (unsigned short)status << 8 ) + i */
		}
		else {  /* 操作失敗 */
			CH375HM_SPI_SCS = 1;  /* 結束SPI片選 */
			if ( status == ERR_DISK_DISCON || status == ERR_USB_CONNECT ) mDelaymS( 100 );  /* U盤剛剛連接或者斷開,應該延時幾十毫秒再操作 */
			break;  /* 操作失敗返回 */
		}
		CH375HM_SPI_SCS = 1;  /* 結束SPI片選 */
	}
	return( status );
}

#if 0
/* CH375模塊的中斷服務程序,使用寄存器組1,建議為下降沿中斷 */
/* 如果啟用U盤插拔通知,那么可以在主程序空閑期間允許模塊中斷,由下面的中斷服務獲知U盤插拔事件,
   而在執行ExecCommand前先查詢是否中斷,有則處理,沒有則關閉模塊中斷,執行完成后在程序空閑時再允許中斷 */
#define CH375HM_INT_NO			0		/* CH375中斷號 */
unsigned char	IntStatus;
void	CH375HMInterrupt( ) interrupt CH375HM_INT_NO using 1
{
	CH375HM_SPI_SCS = 0;  /* 產生SPI片選 */
	IntStatus = mSpiExchange( 0xFF );  /* 寫入0xFF作為無效命令碼(不應該寫其它值),返回模塊操作狀態 */
	CH375HM_SPI_SCS = 1;  /* 結束SPI片選 */
}
#endif

/* 檢查操作狀態,如果錯誤則顯示錯誤代碼并停機,應該替換為實際的處理措施 */
void	mStopIfError( unsigned char iError )
{
	unsigned char	led;
	if ( iError == ERR_SUCCESS ) return;  /* 操作成功 */
	printf( "Error: %02X\n", (unsigned short)iError );  /* 顯示錯誤 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人都懂的| 亚洲色大成网站www久久九九| 高清不卡在线观看av| 亚洲成人一二三| 国产农村妇女毛片精品久久麻豆| 欧美色区777第一页| 成人精品视频一区二区三区 | 亚洲精品国产无天堂网2021| 欧美成人女星排名| 欧洲国内综合视频| 粉嫩av亚洲一区二区图片| 日本美女视频一区二区| 亚洲视频狠狠干| 国产精品热久久久久夜色精品三区| 在线成人午夜影院| 91极品视觉盛宴| av电影天堂一区二区在线观看| 久久精品国产精品亚洲综合| 亚洲欧美日韩精品久久久久| 中文字幕 久热精品 视频在线| 精品日韩成人av| 日韩欧美中文字幕一区| 欧美乱熟臀69xxxxxx| 欧美性极品少妇| 欧美性xxxxxxxx| 在线观看一区二区视频| 色综合一个色综合| 99精品视频一区二区三区| 高清久久久久久| 成人精品在线视频观看| 成人精品免费看| 成人在线视频一区二区| 福利一区福利二区| 成人性生交大片免费看中文| 国产99久久精品| 成人看片黄a免费看在线| 成人精品视频一区二区三区尤物| 国产精品1区2区3区| 国产成人免费视频一区| 国产福利91精品| 成人亚洲一区二区一| 99在线热播精品免费| 97se狠狠狠综合亚洲狠狠| 色999日韩国产欧美一区二区| 国产精品一区二区视频| 日本亚洲天堂网| 美女被吸乳得到大胸91| 美女视频黄 久久| 久久精品免费看| 国产剧情一区二区三区| 国产精品18久久久| 波多野结衣在线一区| 色综合咪咪久久| 欧美三级一区二区| 日韩视频免费直播| 久久夜色精品国产噜噜av| 欧美激情一区二区三区全黄| 1024成人网色www| 亚洲国产精品自拍| 麻豆精品视频在线观看免费| 国产乱码精品一区二区三区忘忧草| 国产乱码精品一区二区三区av | 91麻豆精品国产91久久久久久久久| 欧美精品在线观看播放| 日韩欧美综合一区| 国产三级三级三级精品8ⅰ区| 国产精品国产三级国产aⅴ中文| 亚洲一区在线观看视频| 精品一区二区精品| 9久草视频在线视频精品| 欧美日韩高清一区| 亚洲精品一区二区三区福利| 国产精品素人一区二区| 亚洲国产毛片aaaaa无费看| 久草这里只有精品视频| 成人av免费在线| 欧美久久久久久久久中文字幕| 26uuu欧美| 一级特黄大欧美久久久| 久久国产视频网| 一本大道久久a久久综合婷婷| 69堂精品视频| 国产精品国产三级国产aⅴ中文| 亚洲第一福利视频在线| 国产精品99久| 欧美日韩精品三区| 欧美激情一区在线观看| 婷婷丁香激情综合| 91网站最新网址| 久久亚洲私人国产精品va媚药| 亚洲男人的天堂网| 国产一区欧美日韩| 欧美在线免费观看亚洲| 国产欧美一区二区三区网站| 五月激情综合婷婷| 99久久99久久精品免费看蜜桃| 日韩天堂在线观看| 一区二区三区久久久| 国产不卡视频一区二区三区| 欧美日本乱大交xxxxx| 亚洲视频免费看| 高清久久久久久| 精品裸体舞一区二区三区| 亚洲一区二三区| 99国产精品久久久| 久久久.com| 精品中文字幕一区二区| 3751色影院一区二区三区| ...xxx性欧美| 国产91在线|亚洲| 精品三级在线看| 日本特黄久久久高潮| 在线观看日产精品| 国产精品久久久久9999吃药| 国产精品99久| www亚洲一区| 久久99精品国产91久久来源| 欧美伦理影视网| 日韩中文字幕亚洲一区二区va在线 | 久久九九久精品国产免费直播| 天天影视网天天综合色在线播放| 色婷婷一区二区| 最好看的中文字幕久久| 99久久精品一区二区| 亚洲国产精品传媒在线观看| 国产一区二区三区精品视频| 日韩限制级电影在线观看| 日日噜噜夜夜狠狠视频欧美人| 欧美日韩精品福利| 亚洲国产中文字幕| 欧美人妇做爰xxxⅹ性高电影| 夜夜揉揉日日人人青青一国产精品| av资源站一区| 亚洲男人的天堂一区二区| 91久久精品一区二区三| 一区av在线播放| 欧美美女bb生活片| 男人的天堂久久精品| 日韩一级片在线观看| 久久精品国产77777蜜臀| 精品日韩99亚洲| 国产一区二区久久| 国产欧美日韩精品一区| 91美女片黄在线观看91美女| 亚洲欧美另类小说| 欧美日本视频在线| 久久激五月天综合精品| 国产亚洲精品bt天堂精选| 成人中文字幕电影| 一区二区三区四区av| 欧美老肥妇做.爰bbww| 精品在线免费观看| 中文字幕欧美激情| 欧美视频在线一区| 青娱乐精品在线视频| 国产喷白浆一区二区三区| 91在线一区二区| 亚洲bt欧美bt精品| 欧美精品一区二区三区四区| 成人永久aaa| 亚洲午夜久久久久中文字幕久| 欧美高清视频不卡网| 国产一区二三区| 亚洲欧美日韩国产中文在线| 欧美精品乱人伦久久久久久| 国产最新精品精品你懂的| 国产精品国产三级国产三级人妇| 在线精品视频一区二区| 久久不见久久见免费视频7| 中文字幕在线免费不卡| 欧美性大战久久| 国产一区二区网址| 亚洲欧美aⅴ...| 日韩欧美的一区| 色婷婷久久一区二区三区麻豆| 日韩高清不卡在线| 国产精品视频一二三区| 欧美精品在欧美一区二区少妇| 国产成人在线看| 午夜精品一区在线观看| 日本一区二区视频在线观看| 欧美日韩在线播| 成人一区二区三区视频| 舔着乳尖日韩一区| 国产精品美女久久久久高潮| 欧美日本国产一区| 不卡一区中文字幕| 久久精品国产精品亚洲精品| 一区二区三区精品| 久久久久久电影| 9191久久久久久久久久久| 99久久综合99久久综合网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 中文字幕一区免费在线观看 | 一区二区三区视频在线观看| 精品久久久三级丝袜| 欧美日韩一区二区在线观看| 成人福利电影精品一区二区在线观看| 麻豆极品一区二区三区| 亚洲午夜免费电影|