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

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

?? main.c

?? 單片機(jī)和D12通訊的C程序.實(shí)現(xiàn)了單片機(jī)通過(guò)USB口和電腦通訊.
?? C
字號(hào):


#include "InsUsb.h"
#include <intrins.h>

#define _Debug_
//global structure variable
SYS_INFORMATION data sSysInformation;
//global array variable
unsigned char xdata mEp0OutBuffer[EP0_OUT_BUFFER_SIZE];
unsigned char data  mEp0InBuffer[EP0_IN_BUFFER_SIZE];
unsigned char data  mEp1OutBuffer[EP1_OUT_BUFFER_SIZE];			//store led status
unsigned char data  mEp1InBuffer[EP1_IN_BUFFER_SIZE];			//store switch status
unsigned char xdata mRamBuffer[RAM_BUFFER_SIZE];
unsigned char xdata  mSerialNumber[4];


void UsbBusReset(void);
extern void D12SetMode(unsigned char bConfiguration, unsigned char bClockkDivision);
extern void D12SetAddressEnable(unsigned char bAddress, unsigned char bEnable);
extern void D12SetEndpointStatus(unsigned char bEndpointIndex, unsigned char bStalled);
extern void D12WriteBuffer(unsigned char bEndpointIndex,unsigned char bLength, unsigned char * pBuffer);
extern void D12SetEndpointEnable(unsigned char bEndpointEnable);
extern void D12SetDMA(unsigned char bValue);
extern void D12SendResume(void);
extern void UsbIsr(void);
extern void UsbSetUpDeal(void);
extern void ControlOutDealWith(void);

//
//*************************************************************************
//	Paremeter:
//		In : None
//		Out: None
//	Function:
//		On PDIUSBD12 Develop Board,the interrupt pin of PDIUSBD12 is connected
//		to INT0 of P89C51RD2.When interrupt has happened,this function
//		will call UsbIsr(),which will deal with USB interrupt

void UsbInterrupt(void) interrupt 0
{
	#ifdef _INT_MODE_
	UsbIsr();	//USB interrupt service routine
	#endif
}

//
//*************************************************************************
//	Paremeter:
//		In : None
//		Out: None
//	Function:
//		This interrupt is use to refresh LED and switch status
void Timer0Interrupt(void) interrupt 1
{
	static unsigned char data bTimer0Tiems = 0x00;

	if ((++bTimer0Tiems) >= 5) 	//5*65535*6*(1/18.432)=107ms
	{
		sSysInformation.bTimer0 = TRUE;
		bTimer0Tiems = 0x00;
	}

	TH0 = 0x00;
	TL0 = 0x00;
	
}

//
//*************************************************************************
//	Paremeter:
//		In : None
//		Out: None
//	Function:
//		After system power on reset finished,this function will initialize
//		system,include reset PDIUSBD12,initialize all variable,test innteral
//		RAM of P89C51RD2,and set UART,set LED,Switch
void SysInitialize(void)
{

	unsigned int data i;
	unsigned char xdata * data pInnerRam = &MCU_INNER_RAM;

	D12_RESET = 0;							//reset PDIUSBD12
	LED_ADDRESS	= 0xFF;						//all led will turn off

	sSysInformation.bRamError = FALSE;	//no error
	sSysInformation.bTimer0	=FALSE;			//bTimer0
	sSysInformation.bBusReset = FALSE;
	sSysInformation.bSuspendChange = FALSE;
	sSysInformation.bInSuspend = FALSE;	
	sSysInformation.bRemoteWakeUpEnable = FALSE;
	sSysInformation.bD12ConfigurationValue = 0x00;	
	sSysInformation.bSetup = FALSE;
	sSysInformation.bUsbStatus = IDLE;

	sSysInformation.sUsbSetUpDealwith.wRemaindLength = 0;
	sSysInformation.sUsbSetUpDealwith.bControlOutDataComplete = TRUE; 
	sSysInformation.sUsbSetUpDealwith.bControOutCommandIsPending = FALSE;

	sSysInformation.sRamControl.bRamCommand = RAM_COMMAND_LOOPBACK;
	sSysInformation.sRamControl.bRamRwStatus = IDLE;
	sSysInformation.sRamControl.iRamStartAddress = &mRamBuffer;
	sSysInformation.sRamControl.iRamRwLength = 0;
	sSysInformation.sRamControl.iRamRemaindLength = 0;

	//check internal ram of P89C51RD2,it has a internal ram which size is 768 byte.
	//first write 0x5a to all ram unit ,then read and compare,if error happened,
	//set bRamError flag
	for (i=0;i<768;i++) 
	{
		*pInnerRam = 0x5A;					//all inner ram is written to 0x5a
		pInnerRam++;
	}
	pInnerRam = &MCU_INNER_RAM;
	for (i=0;i<768;i++) 
	{
		if (*pInnerRam != 0x5A) 			//read back from high address of inner ram
		{
			sSysInformation.bRamError = TRUE;		//if not equal to 0x5a,error happened
			break;									//and exit from this cycle
		}
		pInnerRam++;

	}
	//second write 0xa5 to all ram unit ,then read and compare,if error happened,
	//set bRamError flag
	pInnerRam = &MCU_INNER_RAM;
	if (sSysInformation.bRamError==FALSE)//test inner ram the second time,write 0xa5
	{
		for (i=0;i<768;i++) 
		{
			*pInnerRam = 0xA5;
			pInnerRam++;
		}
		pInnerRam = &MCU_INNER_RAM;
		for (i=1;i<768;i++) 
		{
			if (*pInnerRam != 0xA5) 
			{
				sSysInformation.bRamError = TRUE;
				break;
			}
			pInnerRam++;
		}
	}	
	//if no ram error found,initialize all ram unit to 0xFF
	pInnerRam = &MCU_INNER_RAM;
	for (i=0;i<768;i++) 
	{
		*pInnerRam = 0xFF;	
		pInnerRam++;
	}


	//Timer1 set,used as UART baud rate generator

	TMOD = 0x20;						
	SCON = 0x50;
	PCON = 0x80;
	TH1	 = 0xFB; 			//OSC is 18.432MHz,MCU is 6 clock mode,then BaudRate will be 38400
	TL1	 = 0xFB;
	TI=1;
	TR1=1;

	//INT0 set,interrupt source is PDIUSBD12
	#ifdef _INT_MODE_
	IT0 = 0;				//low level trigle
	EX0 = 1;
	PX0 = 0;
	#endif

	//Timer0 set, used as switch and led refresh timing
	TMOD &=	0XF0;		
	TMOD  |= 0X1;
	TL0 = 0X0;		    
	TH0 = 0X0;		    
	ET0 = 1;			
	TR0 = 1;			
	PT0 = 1;

	D12_RESET = 1;	//release PDIUSBD12 reset
}

//
//*************************************************************************
//	Paremeter:
//		In : None
//		Out: None
//	Function:
//		This is main function of firmware.It is an infinate cycle and check 
//		sSysInformation,if any flag is set, call corresponding function to 
//		deal with it.
void main(void)
{
	unsigned char data i;
	unsigned int data j;


	EA = 0;	//MCU global interrupt is enabled

	SysInitialize();

	#ifdef _Debug_
	j = FIRMWARE_VERSION;
	printf("Interface Studio PDIUSBD12 USB1.1 Develop Board FirmWare V%x.\n,",j);
	#endif

	if (sSysInformation.bRamError == FALSE)
	{
		#ifdef _Debug_
		printf("On Chip XRAM tested,and no error.\n");
		#endif
	}
	else
	{
		#ifdef _Debug_
		printf("On Chip XRAM error.\n");
		#endif
		while(1);	//if on chip XRAM error,data transfer of bulk transfer will 
					//be error,so here is a dead cycle;
	}

	D12_SUSPEND = 0;					//pull down D12_SUSPEND pin for access it
	D12SetAddressEnable(USB_DEFAULT_DEVICE_ADDRESS,TRUE);		//after reset D12,use default address,namely endpoint0,address 0

	D12SetMode(0x00, 0x4B);
	D12SetDMA(0xC0);
	#ifdef _Debug_
		printf("Connecting to USB...");
	#else
		//we found that if here has no delay,PDIUSBD12 can not setup USB connection correctly!!
		for (j=0;j<1000;j++)	_nop_ ();
	#endif

	D12SetMode(0x10,0x4B);				//enable soft connect
	#ifdef _Debug_
	printf("Connection finished!\n");
	#endif

	for (j=0;j<10000;j++)	_nop_ ();


	mEp1InBuffer[0] = SWITCH_ADDRESS;

	EA = 1;	//MCU global interrupt is enabled

	//Main	program	loop
	while(1)
	{

		#ifndef _INT_MODE_
		if (U_INT!=1)
		{
			UsbIsr();	//USB interrupt service routine
		}
		#endif

		if (sSysInformation.bTimer0)
		{
			//if Host driver has successfully configed our device
			if (sSysInformation.bD12ConfigurationValue != 0x00)
			{
				i = SWITCH_ADDRESS;
				if (mEp1InBuffer[0] != i)
				{
					//Here we will write switch status to endpoint1-in buffer if switch status changed.
					//When interrupt IN token is received,this switch status will be transmit to Host 
					//automatically  by PDIUSBD12.Host software should transmit IN token periodly according
					//to the interval describled by endpoint descriptor.If no switch status change,
				 	//endpoint1-in buffer has no valid data and when Host transmit IN token,PDIUSBD12
					//will return NAK automatically.
					mEp1InBuffer[0] = i;
					D12WriteBuffer(D12_SELECT_ENDPOINT_ENDPOINT1_IN,0x01,&mEp1InBuffer[0]);
				
				}
				//refresh led status,always be executed periodly

				LED_ADDRESS = mEp1OutBuffer[0];
				sSysInformation.bTimer0 = FALSE;
			}
		}		


		if (sSysInformation.bSuspendChange) 
		{
			//According to USB specification,when Host request device enter suspend state,
			//device should draw no more than 500uA current.This requirement is very strict.
			//Interface studio USB1.1 develop board is self powered,so we can ignore this
			//requirement.We just set bInSuspend flag,but run our firmware as usual.

			#ifdef _Debug_
			printf("Suspend change.\n");
			#endif

			D12_SUSPEND = 1;			//release SUSPEND pin,if D12 enter SUSPEND state,
										//this pin will be drive high by D12;
										//else if D12 exit SUSPEND,this pin will be drive low by D12
			for (i=0;i<10;i++);			//delay for suspend pin is stable  driven by PDIUSBD12
			if(D12_SUSPEND == 1) 
			{
				D12_SUSPEND = 0;		//pull low to access D12
				LED_ADDRESS = 0xFF;		//close all led for save power
				sSysInformation.bSuspendChange = FALSE;	//clear suspend flag
				sSysInformation.bInSuspend = TRUE;	//set suspend flag,used for MCU is exit powrdown mode
				D12_SUSPEND = 1;
				#ifdef _Debug_
				printf("Enter suspend.\n");
				#endif

			}
			else
			{
				sSysInformation.bInSuspend = FALSE;	//set suspend flag,used for MCU is exit powrdown mode				
				sSysInformation.bSuspendChange = FALSE;	//clear suspend flag
				#ifdef _Debug_
				printf("Exit suspend.\n");
				#endif
			}
			
		} 

		if (sSysInformation.bBusReset) 
		{
			UsbBusReset();
			#ifdef _Debug_
			printf("Bus reset.\n");
			#endif
		}

		//if received a setup packet
		if (sSysInformation.bSetup)
		{
			EA = 0;
			#ifdef _Debug_
				printf("--------------------------------------------\n");
				printf("SetUp: bRequest code is :");
				printf("%x,%x,%x,%x,%x,\n",	(unsigned int)(sSysInformation.sUsbDeviceRequest.bmRequestType),
											(unsigned int)(sSysInformation.sUsbDeviceRequest.bRequest),
														  (sSysInformation.sUsbDeviceRequest.wValue),
														  (sSysInformation.sUsbDeviceRequest.wIndex),
														  (sSysInformation.sUsbDeviceRequest.wLength));
			#endif
			UsbSetUpDeal();
			sSysInformation.bSetup = FALSE;
			EA = 1;
		}
		//if there is a uncompleted control-out transfer
		if (sSysInformation.sUsbSetUpDealwith.bControOutCommandIsPending)
		{
			ControlOutDealWith();
		}

	} // Main Loop end

}


void UsbBusReset(void)
{
	//When first connect to Host, Host will always issue a bus reset command.
	//And if USB communication has error,host may issue bus reset command also.

	//When no USB cable connect between Host and PDIUSBD12,D+ and D- wire will be 
	//high impedance,and no USB event should be produced by PDIUSBD12;but unfortunately,
	//unsure state of D+/D- will make PDIUSBD12 produce error USB bus event to MCU.
	//To avoid this case,we can attach a 1Mohm pullup resistor to D-,and a 1Mohm 
	//pulldown resistor to D+,thus when there has no USB connection,PDIUSBD12 will
	//report a bus reset state to MCU.but this has no trouble to our application.

	
	//If Host transmit bus reset signal
	sSysInformation.bBusReset = FALSE;
	sSysInformation.bRemoteWakeUpEnable = FALSE;
	sSysInformation.bD12ConfigurationValue = 0x00;	
	sSysInformation.bSetup = FALSE;
	sSysInformation.bUsbStatus = IDLE;

	sSysInformation.sUsbSetUpDealwith.wRemaindLength = 0;
	sSysInformation.sUsbSetUpDealwith.bControlOutDataComplete = TRUE; 
	sSysInformation.sUsbSetUpDealwith.bControOutCommandIsPending = FALSE;

	sSysInformation.sRamControl.bRamCommand = RAM_COMMAND_LOOPBACK;
	sSysInformation.sRamControl.bRamRwStatus = IDLE;
	sSysInformation.sRamControl.iRamStartAddress = &mRamBuffer;
	sSysInformation.sRamControl.iRamRwLength = 0;
	sSysInformation.sRamControl.iRamRemaindLength = 0;

	D12SetAddressEnable(USB_DEFAULT_DEVICE_ADDRESS,TRUE);	//after reset D12,use default address,namely endpoint0,address 0
	D12SetEndpointEnable(0x00);								//disable generic/isochronous endpoint


}

//
//*************************************************************************


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久三级| 婷婷六月综合网| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲天堂2014| 国产精品无码永久免费888| 2023国产精品| 日韩欧美国产电影| 日韩欧美国产三级| 欧美www视频| 久久女同精品一区二区| 久久新电视剧免费观看| 久久品道一品道久久精品| 久久久久9999亚洲精品| 国产欧美视频一区二区三区| 久久九九影视网| 中日韩av电影| 国产精品乱码人人做人人爱| 亚洲天堂2014| 亚洲电影你懂得| 视频一区二区国产| 免费不卡在线观看| 精品一区二区三区久久| 国产不卡视频一区二区三区| 成人精品一区二区三区中文字幕| 丰满亚洲少妇av| 色综合一个色综合亚洲| 91久久免费观看| 7777精品伊人久久久大香线蕉经典版下载| 91精品在线观看入口| 精品国产91乱码一区二区三区| 国产日韩欧美不卡在线| 亚洲视频小说图片| 亚欧色一区w666天堂| 黄色日韩网站视频| 成人av电影免费观看| 欧美三级电影在线看| 欧美成人一级视频| 国产精品天天看| 亚洲午夜激情网站| 久久99国产精品免费网站| 成人高清免费在线播放| 欧美在线观看一区二区| 日韩免费一区二区三区在线播放| 久久精品在线观看| 一区二区三国产精华液| 免费欧美日韩国产三级电影| 国产成人精品亚洲午夜麻豆| 色悠悠亚洲一区二区| 69堂国产成人免费视频| 国产亚洲污的网站| 亚洲高清免费观看高清完整版在线观看 | 久久久午夜精品| 亚洲老妇xxxxxx| 另类小说图片综合网| 91网站最新地址| 欧美一区二区三区视频| 中文字幕久久午夜不卡| 丁香另类激情小说| 色婷婷综合久久久中文一区二区 | 亚洲另类中文字| 日本va欧美va欧美va精品| 成人app软件下载大全免费| 欧美精品在线视频| 日本一区二区久久| 奇米777欧美一区二区| 99re热这里只有精品视频| 精品国产污污免费网站入口 | 免费在线观看不卡| 色婷婷久久久亚洲一区二区三区 | 亚洲视频一区在线| 国产乱码字幕精品高清av| 欧美情侣在线播放| 日韩一区有码在线| 国产自产视频一区二区三区| 欧美性videosxxxxx| 国产精品蜜臀在线观看| 久久国产视频网| 欧美性生活一区| 国产精品国产三级国产a| 极品少妇xxxx偷拍精品少妇| 欧美群妇大交群中文字幕| 亚洲色图一区二区| 国产精品一区二区免费不卡| 欧美一区二区在线观看| 亚洲一区二区三区不卡国产欧美| 国产高清不卡一区| 2欧美一区二区三区在线观看视频| 亚洲一区二区三区三| 91在线视频在线| 国产精品乱码人人做人人爱| 国产精品996| 精品成人在线观看| 麻豆91在线播放免费| 宅男噜噜噜66一区二区66| 亚洲一区欧美一区| 91影视在线播放| 中文字幕免费不卡在线| 国产成人精品免费视频网站| 精品国产免费一区二区三区四区 | 欧美色区777第一页| 亚洲欧美区自拍先锋| www.久久精品| 国产精品电影一区二区| 丰满岳乱妇一区二区三区| 欧美国产综合色视频| 精久久久久久久久久久| 精品成人一区二区三区| 国精品**一区二区三区在线蜜桃| 日韩精品一区二区三区四区视频| 欧美aaaaaa午夜精品| 日韩色视频在线观看| 免费av成人在线| 精品美女被调教视频大全网站| 另类小说图片综合网| 久久婷婷国产综合国色天香 | 制服丝袜在线91| 日本中文字幕一区| 日韩午夜激情视频| 另类中文字幕网| 久久久精品国产免大香伊 | 日韩一区二区三区电影在线观看 | 日韩一区二区精品| 久99久精品视频免费观看| 久久人人爽爽爽人久久久| 国产精品中文有码| 中文字幕一区二区视频| 91麻豆福利精品推荐| 亚洲国产视频一区二区| 日韩一区二区视频| 国产不卡视频在线播放| 亚洲免费在线电影| 欧美福利视频导航| 久久99热狠狠色一区二区| 国产偷v国产偷v亚洲高清| www.视频一区| 亚洲成人一区二区| 精品处破学生在线二十三| 波多野结衣亚洲一区| 一二三区精品福利视频| 日韩视频免费观看高清完整版| 国产成人精品免费看| 亚洲一区二区三区免费视频| 日韩小视频在线观看专区| 国产999精品久久久久久绿帽| 亚洲欧美日韩小说| 欧美一区二区三区视频| 不卡区在线中文字幕| 香蕉久久夜色精品国产使用方法| 日韩精品一区在线观看| 99久久久久久| 日韩高清在线一区| 国产精品丝袜91| 欧美精品久久99久久在免费线| 国产精品一区二区三区网站| 一区二区不卡在线视频 午夜欧美不卡在 | 老司机午夜精品99久久| 国产精品免费免费| 欧美一级久久久久久久大片| 成人免费视频视频在线观看免费| 亚洲综合丁香婷婷六月香| 26uuu国产电影一区二区| 色婷婷精品久久二区二区蜜臀av | ㊣最新国产の精品bt伙计久久| 欧美一区二区在线视频| 成人av网在线| 久久国产精品色| 夜夜嗨av一区二区三区| 国产三级三级三级精品8ⅰ区| 欧美私人免费视频| 高清av一区二区| 日韩av在线免费观看不卡| 亚洲三级小视频| 久久午夜电影网| 在线播放中文字幕一区| 91麻豆精品一区二区三区| 国产大陆亚洲精品国产| 免费观看30秒视频久久| 一区二区三区四区国产精品| 久久久99精品免费观看不卡| 在线综合+亚洲+欧美中文字幕| 色综合久久综合网欧美综合网 | 337p亚洲精品色噜噜| va亚洲va日韩不卡在线观看| 久久 天天综合| 婷婷中文字幕综合| 亚洲精品一二三区| 国产精品色婷婷久久58| 久久综合999| 日韩女优av电影| 欧美一区在线视频| 精品视频一区二区不卡| 91免费精品国自产拍在线不卡| 国产91精品一区二区麻豆网站| 久久精品免费看| 青娱乐精品视频| 日精品一区二区三区| 亚洲一区在线观看视频| 一区二区三区精品久久久| 亚洲欧美欧美一区二区三区| 中文字幕中文字幕中文字幕亚洲无线|