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

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

?? w5100.c

?? 韓國Wiznet公司的W5100芯片在keil c環境下的間接總線的例程。
?? C
?? 第 1 頁 / 共 2 頁
字號:
如果啟動連接后出現超時中斷,則與服務器連接失敗,需要重新調用該程序連接
該程序每調用一次,就與服務器產生一次連接
------------------------------------------------------------------------------*/
unsigned char Socket_Connect(SOCKET s)
{
	Write_W5100_Address(W5100_S0_MR+s*0x100);
	Write_W5100(S_MR_TCP);						/*設置socket為TCP模式 */

	Write_W5100_Address(W5100_S0_CR+s*0x100);
	Write_W5100(S_CR_OPEN);		/*打開Socket*/

	Write_W5100_Address(W5100_S0_SSR+s*0x100);
	if(Read_W5100()!=S_SSR_INIT)
	{
		Write_W5100_Address(W5100_S0_CR+s*0x100);
		Write_W5100(S_CR_CLOSE);	/*打開不成功,關閉Socket,然后返回*/
		return FALSE;
	}

	Write_W5100_Address(W5100_S0_CR+s*0x100);
	Write_W5100(S_CR_CONNECT);		/*設置Socket為Connect模式*/

	return TRUE;

	/*至此完成了Socket的打開連接工作,至于它是否與遠程服務器建立連接,則需要等待Socket中斷,
	以判斷Socket的連接是否成功。參考W5100數據手冊的Socket中斷狀態*/
}

/*-----------------------------------------------------------------------------
                           設置Socket作為服務器等待遠程主機的連接
當本機Socket工作在服務器模式時,引用該程序,等等遠程主機的連接
如果設置成功則返回true, 否則返回false
該程序只調用一次,就使W5100設置為服務器模式
-----------------------------------------------------------------------------*/
unsigned char Socket_Listen(SOCKET s)
{
	Write_W5100_Address(W5100_S0_MR+s*0x100);
	Write_W5100(S_MR_TCP);						/*設置socket為TCP模式 */

	Write_W5100_Address(W5100_S0_CR+s*0x100);
	Write_W5100(S_CR_OPEN);						/*打開Socket*/

	Write_W5100_Address(W5100_S0_SSR+s*0x100);
	if(Read_W5100()!=S_SSR_INIT)
	{
		Write_W5100_Address(W5100_S0_CR+s*0x100);
		Write_W5100(S_CR_CLOSE);	/*打開不成功,關閉Socket,然后返回*/
		return FALSE;
	}

	Write_W5100_Address(W5100_S0_CR+s*0x100);
	Write_W5100(S_CR_LISTEN);		/*設置Socket為偵聽模式*/

	Write_W5100_Address(W5100_S0_SSR+s*0x100);
	if(Read_W5100()!=S_SSR_LISTEN)
	{
		Write_W5100_Address(W5100_S0_CR+s*0x100);
		Write_W5100(S_CR_CLOSE);		/*設置不成功,關閉Socket,然后返回*/
		return FALSE;
	}

	return TRUE;

	/*至此完成了Socket的打開和設置偵聽工作,至于遠程客戶端是否與它建立連接,則需要等待Socket中斷,
	以判斷Socket的連接是否成功。參考W5100數據手冊的Socket中斷狀態
	在服務器偵聽模式不需要設置目的IP和目的端口號*/
}

/*-----------------------------------------------------------------------------
					設置Socket為UDP模式
如果Socket工作在UDP模式,引用該程序。在UDP模式下,Socket通信不需要建立連接
如果設置成功則返回true, 否則返回false
該程序只調用一次,就使W5100設置為UDP模式
-----------------------------------------------------------------------------*/
unsigned char Socket_UDP(SOCKET s)
{
	Write_W5100_Address(W5100_S0_MR+s*0x100);
	Write_W5100(S_MR_UDP);						/*設置Socket為UDP模式*/

	Write_W5100_Address(W5100_S0_CR+s*0x100);
	Write_W5100(S_CR_OPEN);						/*打開Socket*/

	Write_W5100_Address(W5100_S0_SSR+s*0x100);
	if(Read_W5100()!=S_SSR_UDP)
	{
		Write_W5100_Address(W5100_S0_CR+s*0x100);
		Write_W5100(S_CR_CLOSE);	/*打開不成功,關閉Socket,然后返回*/
		return FALSE;
	}
	else
		return TRUE;

	/*至此完成了Socket的打開和UDP模式設置,在這種模式下它不需要與遠程主機建立連接
	因為Socket不需要建立連接,所以在發送數據前都可以設置目的主機IP和目的Socket的端口號
	如果目的主機IP和目的Socket的端口號是固定的,在運行過程中沒有改變,那么也可以在這里設置*/
}


/******************************************************************************
                              處理Socket接收和發送的數據
******************************************************************************/
/*-----------------------------------------------------------------------------
如果Socket產生接收數據的中斷,則引用該程序進行處理
該程序將Socket的接收到的數據緩存到Rx_buffer數組中,并返回接收的數據字節數
-----------------------------------------------------------------------------*/
unsigned short S_rx_process(SOCKET s)
{
	unsigned short i,j;
	unsigned short rx_size,rx_offset;

	/*讀取接收數據的字節數*/
	Write_W5100_Address(W5100_S0_RX_RSR+s*0x100);
	rx_size=Read_W5100();
	rx_size*=256;
	rx_size+=Read_W5100();

	/*讀取接收緩沖區的偏移量 */
	Write_W5100_Address(W5100_S0_RX_RR+s*0x100);
	rx_offset=Read_W5100();
	rx_offset*=256;
	rx_offset+=Read_W5100();

	i=rx_offset/S_RX_SIZE;				/*計算實際的物理偏移量,S0_RX_SIZE需要在前面#define中定義*/
								/*注意S_RX_SIZE的值在W5100_Init()函數的W5100_RMSR中確定*/
	rx_offset=rx_offset-i*S_RX_SIZE;

	j=W5100_RX+s*S_RX_SIZE+rx_offset;		/*實際物理地址為W5100_RX+rx_offset*/
	Write_W5100_Address(j);
	for(i=0;i<rx_size;i++)
	{
		if(rx_offset>=S_RX_SIZE)
		{
			j=W5100_RX+s*S_RX_SIZE;
			Write_W5100_Address(j);
			rx_offset=0;
		}
		Rx_Buffer[i]=Read_W5100();		/*將數據緩存到Rx_buffer數組中*/
		j++;
		rx_offset++;
	}

	/*計算下一次偏移量 */
	Write_W5100_Address(W5100_S0_RX_RR+s*0x100);
	rx_offset=Read_W5100();
	rx_offset*=256;
	rx_offset+=Read_W5100();

	rx_offset+=rx_size;
	Write_W5100_Address(W5100_S0_RX_RR+s*0x100);
	Write_W5100(rx_offset/256);
	Write_W5100(rx_offset);

	Write_W5100_Address(W5100_S0_CR+s*0x100);
	Write_W5100(S_CR_RECV);			/*設置RECV命令,等等下一次接收*/

	return rx_size;								/*返回接收的數據字節數*/
}

/*-----------------------------------------------------------------------------
如果要通過Socket發送數據,則引用該程序
要發送的數據緩存在Tx_buffer中, size則是要發送的字節長度
-----------------------------------------------------------------------------*/
unsigned char S_tx_process(SOCKET s, unsigned int size)
{
	unsigned short i,j;
	unsigned short tx_free_size,tx_offset;

	/*如果是UDP模式,可以在此設置目的主機的IP和端口號*/
	Write_W5100_Address(W5100_S0_MR+s*0x100);
	if((Read_W5100()&0x0f)==0x02)
	{
		Write_W5100_Address(W5100_S0_DIPR+s*0x100+i);
		for(i=0;i<4;i++)			/* 設置目的主機IP*/
			Write_W5100(UDP_DIPR[i]);

		Write_W5100_Address(W5100_S0_DPORT+s*0x100);
		Write_W5100(UDP_DPORT[0]);
		Write_W5100(UDP_DPORT[1]);
	}

	/*讀取緩沖區剩余的長度*/
	Write_W5100_Address(W5100_S0_TX_FSR+s*0x100);
	tx_free_size=Read_W5100();
	tx_free_size*=256;
	tx_free_size+=Read_W5100();
	if(tx_free_size<size)						/*如果剩余的字節長度小于發送字節長度,則返回*/
		return FALSE;

	/*讀取發送緩沖區的偏移量*/
	Write_W5100_Address(W5100_S0_TX_WR+s*0x100);
	tx_offset=Read_W5100();
	tx_offset*=256;
	tx_offset+=Read_W5100();

	i=tx_offset/S_TX_SIZE;					/*計算實際的物理偏移量,S0_TX_SIZE需要在前面#define中定義*/
									/*注意S0_TX_SIZE的值在W5100_Init()函數的W5100_TMSR中確定*/
	tx_offset=tx_offset-i*S_TX_SIZE;
	j=W5100_TX+s*S_TX_SIZE+tx_offset;			/*實際物理地址為W5100_TX+tx_offset*/
	Write_W5100_Address(j);
	for(i=0;i<size;i++)
	{
		if(tx_offset>=S_TX_SIZE)
		{
			j=W5100_TX+s*S_TX_SIZE;
			Write_W5100_Address(j);
			tx_offset=0;
		}
		Write_W5100(Tx_Buffer[i]);						/*將Tx_buffer緩沖區中的數據寫入到發送緩沖區*/
		j++;
		tx_offset++;
	}

	/*計算下一次的偏移量 */
	Write_W5100_Address(W5100_S0_TX_WR+s*0x100);
	tx_offset=Read_W5100();
	tx_offset*=256;
	tx_offset+=Read_W5100();


	tx_offset+=size;
	Write_W5100_Address(W5100_S0_TX_WR+s*0x100);
	Write_W5100(tx_offset/256);
	Write_W5100(tx_offset);

	Write_W5100_Address(W5100_S0_CR+s*0x100);
	Write_W5100(S_CR_SEND);			/*設置SEND命令,啟動發送*/

	return TRUE;								/*返回成功*/
}


/******************************************************************************
					W5100中斷處理程序框架
******************************************************************************/
void W5100_Interrupt_Process(void)
{
	unsigned char i,j;

	W5100_Interrupt=0;

	Write_W5100_Address(W5100_IR);
	i=Read_W5100();
	Write_W5100_Address(W5100_IR);
	Write_W5100(i&0xf0);					/*回寫清除中斷標志*/

	if((i & IR_CONFLICT) == IR_CONFLICT)	 	/*IP地址沖突異常處理,自己添加代碼*/
	{

	}

	if((i & IR_UNREACH) == IR_UNREACH)			/*UDP模式下地址無法到達異常處理,自己添加代碼*/

	{
	}

	/* Socket事件處理 */
	if((i & IR_S0_INT) == IR_S0_INT)
	{
		Write_W5100_Address(W5100_S0_IR);
		j=Read_W5100();
		Write_W5100_Address(W5100_S0_IR);
		Write_W5100(j);		/* 回寫清中斷標志 */

		if(j&S_IR_CON)				/* 在TCP模式下,Socket0成功連接 */
		{
			S0_State|=S_CONN;
		}
		if(j&S_IR_DISCON)				/* 在TCP模式下Socket斷開連接處理,自己添加代碼 */
		{
			Write_W5100_Address(W5100_S0_CR);
			Write_W5100(S_CR_CLOSE);		/* 關閉端口,等待重新打開連接 */
			S0_State=0;
		}
		if(j&S_IR_SENDOK)				/* Socket0數據發送完成,可以再次啟動S_tx_process()函數發送數據 */
		{
			S0_Data|=S_TRANSMITOK;
		}
		if(j&S_IR_RECV)				/* Socket接收到數據,可以啟動S_rx_process()函數 */
		{
			S0_Data|=S_RECEIVE;
		}
		if(j&S_IR_TIMEOUT)			/* Socket連接或數據傳輸超時處理 */
		{
			Write_W5100_Address(W5100_S0_CR);
			Write_W5100(S_CR_CLOSE);		/* 關閉端口,等待重新打開連接 */
			S0_State=0;
		}
	}

	/* Socket1事件處理 */
	if((i&IR_S1_INT)==IR_S1_INT)
	{
		Write_W5100_Address(W5100_S1_IR);
		j=Read_W5100();
		Write_W5100_Address(W5100_S1_IR);
		Write_W5100(j);				/* 回寫清中斷標志 */

		if(j&S_IR_CON)				/* 在TCP模式下,Socket1成功連接 */
		{
			S1_State|=S_CONN;
		}
		if(j&S_IR_DISCON)				/* 在TCP模式下Socket1斷開連接處理,自己添加代碼 */
		{
			Write_W5100_Address(W5100_S1_CR);
			Write_W5100(S_CR_CLOSE);		/* 關閉端口,等待重新打開連接 */
			S1_State=0;
		}
		if(j&S_IR_SENDOK)				/* Socket1數據發送完成,可以再次啟動S_tx_process()函數發送數據 */
		{
			S1_Data|=S_TRANSMITOK;
		}
		if(j&S_IR_RECV)	  			/* Socket1接收到數據,可以啟動S_rx_process()函數 */
		{
			S1_Data|=S_RECEIVE;
		}
		if(j&S_IR_TIMEOUT)			/* Socket1連接或數據傳輸超時處理 */
		{
			Write_W5100_Address(W5100_S1_CR);
			Write_W5100(S_CR_CLOSE);		/*關閉端口,等待重新打開連接 */
			S1_State=0;
		}
	}

	/* Socket2事件處理 */
	if((i&IR_S2_INT)==IR_S2_INT)
	{
		Write_W5100_Address(W5100_S2_IR);
		j=Read_W5100();
		Write_W5100_Address(W5100_S2_IR);
		Write_W5100(j);		/*回寫清中斷標志 */

		if(j&S_IR_CON)		/* 在TCP模式下,Socket2成功連接 */
		{
			S2_State|=S_CONN;
		}
		if(j&S_IR_DISCON)		/* 在TCP模式下Socket2斷開連接處理,自己添加代碼 */
		{
			Write_W5100_Address(W5100_S2_CR);
			Write_W5100(S_CR_CLOSE);		/* 關閉端口,等待重新打開連接 */
			S2_State=0;
		}
		if(j&S_IR_SENDOK)		/* Socket2數據發送完成,可以再次啟動S_tx_process()函	數發送數據 */
		{
			S2_Data|=S_TRANSMITOK;
		}
		if(j&S_IR_RECV)		/* Socket2接收到數據,可以啟動S_rx_process()函數 */
		{
			S2_Data|=S_RECEIVE;
		}
		if(j&S_IR_TIMEOUT)	/* Socket2連接或數據傳輸超時處理 */
		{
			Write_W5100_Address(W5100_S2_CR);
			Write_W5100(S_CR_CLOSE);		/*關閉端口,等待重新打開連接 */
			S2_State=0;
		}
	}

	/* Socket3事件處理 */
	if((i&IR_S3_INT)==IR_S3_INT)
	{
		Write_W5100_Address(W5100_S3_IR);
		j=Read_W5100();
		Write_W5100_Address(W5100_S3_IR);
		Write_W5100(j);		/* 回寫清中斷標志 */

		if(j&S_IR_CON)		/* 在TCP模式下,Socket3成功連接 */
		{
			S3_State|=S_CONN;
		}
		if(j&S_IR_DISCON)		/* 在TCP模式下Socket3斷開連接處理,自己添加代碼 */
		{
			Write_W5100_Address(W5100_S3_CR);
			Write_W5100(S_CR_CLOSE);		/* 關閉端口,等待重新打開連接 */
			S3_State=0;
		}
		if(j&S_IR_SENDOK)				/* Socket3數據發送完成,可以再次啟動S_tx_process()函數發送數據 */
		{
			S3_Data|=S_TRANSMITOK;
		}
		if(j&S_IR_RECV)		/* Socket3接收到數據,可以啟動S_rx_process()函數 */
		{
			S3_Data|=S_RECEIVE;
		}
		if(j&S_IR_TIMEOUT)	/* Socket3連接或數據傳輸超時處理 */
		{
			Write_W5100_Address(W5100_S3_CR);
			Write_W5100(S_CR_CLOSE);		/*關閉端口,等待重新打開連接 */
			S3_State=0;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品电影一区二区| 成人av电影免费观看| 欧美私模裸体表演在线观看| 久久精品国产成人一区二区三区| 色综合欧美在线视频区| 中文字幕亚洲综合久久菠萝蜜| 高清不卡一二三区| 1024精品合集| 欧美视频精品在线观看| 奇米影视7777精品一区二区| 日韩一卡二卡三卡四卡| 国产一区二区三区不卡在线观看 | 国产精品欧美极品| 91一区在线观看| 亚洲影视在线观看| 日韩一级成人av| 国产99精品视频| 亚洲黄色小说网站| 91精品国产综合久久国产大片| 久久99九九99精品| 国产精品嫩草99a| 欧美日韩国产精选| 国产一区二区三区精品欧美日韩一区二区三区 | 东方欧美亚洲色图在线| 亚洲精品成人在线| 欧美一级片在线| 成人一级视频在线观看| 亚洲午夜久久久久久久久电影网| 欧美一区二区三区四区视频| 粉嫩蜜臀av国产精品网站| 亚洲电影一区二区三区| 欧美电影免费观看高清完整版在线 | 丝袜美腿一区二区三区| 亚洲精品久久久蜜桃| 欧美日韩久久不卡| 国产激情一区二区三区桃花岛亚洲| 中文字幕日本乱码精品影院| 欧美久久久一区| 成人黄色av电影| 亚洲精品少妇30p| 久久亚洲捆绑美女| 色老综合老女人久久久| 激情图区综合网| 亚洲国产精品一区二区久久恐怖片 | 99精品视频在线播放观看| 日韩国产欧美在线播放| 亚洲欧美在线aaa| 久久亚洲一级片| 欧美伦理视频网站| 99国产精品久久久久久久久久久| 奇米777欧美一区二区| 亚洲精品视频免费看| 久久久久国产免费免费| 555夜色666亚洲国产免| 色综合色狠狠天天综合色| 国产精品99久久久久久宅男| 日本欧美在线看| 亚洲男人电影天堂| 国产精品不卡在线观看| 久久久久亚洲综合| 精品欧美一区二区三区精品久久| 欧美少妇一区二区| 91视频在线观看免费| 懂色av一区二区三区免费看| 免费观看成人av| 亚洲成人www| 亚洲二区视频在线| 亚洲激情六月丁香| 中文字幕视频一区二区三区久| 精品国产在天天线2019| 日韩欧美国产精品一区| 欧美精品三级在线观看| 欧美日韩你懂得| 欧美亚洲高清一区| 欧美在线不卡视频| 色播五月激情综合网| 一本一本大道香蕉久在线精品| www.亚洲免费av| 99re热这里只有精品视频| 成人app网站| 91在线精品秘密一区二区| 99re热视频这里只精品| 91香蕉视频污| 在线免费不卡视频| 欧美日韩一区二区三区高清| 欧美少妇一区二区| 91精品国产综合久久香蕉麻豆| 欧美猛男gaygay网站| 欧美日韩国产天堂| 日韩午夜在线影院| 26uuu成人网一区二区三区| 亚洲精品一区二区三区精华液 | 久久亚洲一区二区三区四区| 久久综合九色综合欧美就去吻| 2020日本不卡一区二区视频| 久久精品亚洲麻豆av一区二区| 国产日产亚洲精品系列| 中文字幕制服丝袜一区二区三区 | 色猫猫国产区一区二在线视频| 色婷婷综合五月| 国产日韩欧美精品综合| 国产精品乱码人人做人人爱| 自拍视频在线观看一区二区| 夜色激情一区二区| 奇米影视一区二区三区| 国产精品一二三四区| 91亚洲精品乱码久久久久久蜜桃| 在线一区二区三区四区五区| 在线观看91精品国产麻豆| 精品国产乱码久久久久久闺蜜 | 自拍偷在线精品自拍偷无码专区| 亚洲中国最大av网站| 久久激五月天综合精品| 成人午夜av在线| 在线观看亚洲精品视频| 日韩免费一区二区| 国产精品久久久久桃色tv| 午夜天堂影视香蕉久久| 国产一区二区精品久久| 色欧美片视频在线观看| 日韩午夜中文字幕| 亚洲色欲色欲www| 美腿丝袜亚洲色图| 99精品黄色片免费大全| 日韩一区二区三区四区五区六区| 亚洲国产高清aⅴ视频| 三级在线观看一区二区| 风间由美性色一区二区三区| 欧美理论片在线| 国产精品久线在线观看| 日本伊人色综合网| 91视频在线看| 久久奇米777| 天堂蜜桃91精品| 91在线国内视频| 久久综合丝袜日本网| 亚洲成在线观看| 不卡电影一区二区三区| 欧美大度的电影原声| 一区二区三区中文字幕精品精品| 麻豆极品一区二区三区| 欧美在线制服丝袜| 国产精品免费人成网站| 美女国产一区二区三区| 在线观看av不卡| 欧美国产综合一区二区| 精品一区二区av| 欧美日韩国产高清一区| 亚洲女与黑人做爰| 国产福利视频一区二区三区| 日韩一区二区精品葵司在线| 亚洲午夜一区二区三区| 色综合咪咪久久| 国产精品久久久久四虎| 欧美日韩不卡视频| 一区二区三区日韩欧美| 成人黄色免费短视频| 久久精品视频一区二区三区| 裸体一区二区三区| 91精品国产入口在线| 亚洲国产精品一区二区尤物区| 91亚洲精品乱码久久久久久蜜桃| 久久精品一区二区| 国产精品一区二区三区乱码| 精品乱码亚洲一区二区不卡| 日韩高清不卡一区| 欧美一级搡bbbb搡bbbb| 免费久久精品视频| 欧美www视频| 精品亚洲成a人| 久久亚洲一区二区三区四区| 国产麻豆一精品一av一免费| 亚洲精品在线电影| 国产精品538一区二区在线| 久久午夜色播影院免费高清 | 美女视频黄a大片欧美| 日韩精品一区二区三区中文精品| 日本中文字幕一区二区视频| 91精品国产欧美一区二区18| 日本aⅴ免费视频一区二区三区| 5月丁香婷婷综合| 久久精品国产999大香线蕉| 日韩亚洲欧美综合| 国产一区二区网址| 国产精品久久久久久福利一牛影视 | 欧美日韩一区不卡| 婷婷久久综合九色综合伊人色| 欧美精品自拍偷拍动漫精品| 蜜臂av日日欢夜夜爽一区| 久久久久久黄色| 成人黄页毛片网站| 一级日本不卡的影视| 日韩一区二区三区精品视频| 国产一区二区三区不卡在线观看 | 国产精品福利一区二区| 99re免费视频精品全部| 亚洲午夜精品网| 欧美精品一区二区在线观看| 国产成人在线视频播放| 一区二区三区日韩欧美精品|