www.pudn.com > usb_softpack.zip > Mainloop.c, change:2002-04-08,size:1864b


/* 
   //************************************************************************* 
   // 
   //                  		ZLGMCU 
   //				www.zlgmcu.com 
   // File Name:	MAINLOOP.C 
   // Revision:		V0.2(2002-04-08) 
   // Use Library:	USB51S.LIB 
   // Note:		USB51S.LIB不带DMA控制功能 
   //************************************************************************* 
   */ 
 
#include <stdio.h> 
#include <string.h> 
#include <reg51.h>                /* special function register declarations   */ 
#include "mainloop.h" 
#include "isr.h" 
 
/* 
//************************************************************************* 
//  Public static data 
//************************************************************************* 
*/ 
 
extern EPPFLAGS bEPPflags; 
extern unsigned char idata GenEpBuf[]; 
extern unsigned char idata EpBuf[]; 
 
 
//D12中断服务 
usb_isr() interrupt 0 
{ 
	DISABLE; 
	fn_usb_isr();//调用D12中断服务子程序 
	ENABLE; 
} 
 
void main(void) 
{ 
	P0 = 0xFF;//初始化I/O口 
	P1 = 0xFF; 
	P2 = 0xFF; 
	P3 = 0xFF; 
	MCU_D12CS = 0x0; 
	D12SUSPD = 0; 
 
	IT0 = 0;//初始化中断 
	EX0 = 1; 
	PX0 = 0; 
	EA = 1; 
 
	MCU_D12CS = 0x1; 
	MCU_D12CS = 0x0; 
	D12_SetDMA(0x0); 
	bEPPflags.value = 0; 
 
	reconnect_USB();//联接USB总线 
 
	/* Main program loop */ 
	while( TRUE ){ 
		if(bEPPflags.bits.configuration) 
			check_key_LED();//连接正常,调用按键和LED控制处理 
 
		usbserve();//USB服务数据处理 
 
	} // Main Loop 
} 
 
void check_key_LED(void) 
{ 
	static unsigned char c, last_key = 0xf; 
 
	c = MCU_SWM0 & MCU_SWM1; 
	c &= 0x0f; 
	if (c != last_key) { 
		D12_WriteEndpoint(3, 1, &c);//按键状态改变,发送信息给主机 
	} 
	last_key = c; 
 
	if(bEPPflags.bits.ep1_rxdone) { 
		DISABLE;//接收到主机发来的LED控制信息 
		bEPPflags.bits.ep1_rxdone = 0; 
		ENABLE; 
		MCU_LED0 = !(GenEpBuf[3] & 0x1);//控制LED状态 
		MCU_LED1 = !(GenEpBuf[3] & 0x2); 
	} 
}