⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch375_slaver.c.bak

📁 使用ch375和stc 51写的usb鼠标的代码
💻 BAK
字号:
//CH375的slaver的程序 
/***************************************
**  USB 1.1 Slaver for CH375      **
****************************************/
#ifndef __MAIN_C__
#define __MAIN_C__
#endif

#include "head.h"
#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include "ch375inc.h"
#include "usbDef.h"
#include "uart.h"
#include "descriptor.h"
#include "mcuFun.h"
#include "ch375.h"

#define DELAY_START_value 1   		/* 根据单片机的时钟选择延时初值 */


#define DBG_MSK_0		(1<<0)
#define DBG_MSK_1		(1<<1)
#define DBG_MSK_2		(1<<2)
#define DBG_MSK_3		(1<<3)
uint8 eaCount, debug=0xff;
uint16 tCount;
unsigned char RECV_LEN;       		/* 刚接收到的数据的长度 */
unsigned char idata RECV_BUFFER[ CH375_MAX_DATA_LEN ];  /* 数据缓冲区,用于保存接收到的下传数据,长度为0到64字节 */
unsigned char idata *cmd_buf;
unsigned char idata *ret_buf;

typedef union _REQUEST_PACK
{
	unsigned char  buffer[8];
	struct
	{
		unsigned char  bmReuestType;     	//标准请求字
		unsigned char  bRequest;     			//请求代码
		unsigned int     wvalue; 					//特性选择高
		unsigned int     wIndx; 					//索引
		unsigned int     wLength; 				//数据长度
	}r;
} mREQUEST_PACKET, *mpREQUEST_PACKET;



unsigned char mVarSetupRequest; 		// USB请求码
unsigned char mVarSetupLength; 			// 后续数据长度
unsigned char code * VarSetupDescr; // 描述符偏移地址

unsigned char VarUsbAddress ; 			//USB设备地址
bit CH375FLAGERR; 									//错误清0
bit CH375CONFLAG; 									//配置标志

mREQUEST_PACKET  request;

//我的连接
//CH375			51
//D0-7			P0.0-7
//A0				P2.6
//RD				RD
//WR				WR
//CS				P2.7
//INT				INT0
//故
//0x7fff		命令端口, A0=1
//0x3fff		数据端口, A0=0

sbit led = P1^0; 
sbit CH375_INT_WIRE = P3^2; // CH375中断请求输出,低电平有效

void delay50ms(void);
void delay1s(void);
void flash_led(void);



void delay50ms(void)
{
unsigned char i, j;
for( i=200; i!=0; i-- )
for( j=250; j!=0; j-- );
}

void delay1s(void)
{
unsigned char i,j,k;

for( i=10; i!=0; i-- )
for( j=200; j!=0; j-- )
for( k=250; k!=0; k-- );
}
//-----------------------------
//led以2s的频率闪烁10s
//-----------------------------
void flash_led(void)
{
	unsigned char i;
	
	for( i=10;i>0;i-- )
	{
		led=!led;
		delay1s();
	}
}



//串行数据接收程序
void receive(void)
{
	unsigned int count;
	unsigned char buf;

	RECV_LEN=0;
	cmd_buf = RECV_BUFFER;  // 接收缓冲区 
	while( 1 )
	{
		RI=0;
		*cmd_buf = SBUF;
		cmd_buf++;
		RECV_LEN++;
		if( RECV_LEN == 64 )
		{
			while( 1 )
			{
				count=10000;
				while( RI==0 )
				{
					count--;
					if( count==0 )
						return;
				}
				RI=0;
				buf=SBUF;
			}
		}
		count=10000;
		while( RI==0 )
		{
			count--;
			if( count==0 )
				return;
		}
	}
}

void main(void)
{
	unsigned char length, cc;
	tOut t;
	eaCount=0;				//中断总是关闭的
	led = 0;
	ComInit();
	
	uartPutStr(__DATE__);
	uartPutStr("\n\r");
	uartPutStr(__TIME__);
	uartPutStr("\n\r");
//	delay1s(); 				// 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 
//	delay1s(); 
	CH375_Init( );  		// 初始化CH375 
	uartPrint("ch375 inited!\n\r", NULL, 0);
	uartPutStr(">>>>>>>>>>>>>>>>>\n\r");
	uartPrint("usb rec: %\n\r", &cc, 1);
	while ( 1 )
	{
		if(w(&t, 100))
		{
				reset(&t);
				led=!led;
		}		
		if( RI==1 ) 		// 从串口接收到的数据 
		{
			//led=1;
			receive();
			//led=0;
			uartPrint("uart rec!\n\r", NULL, 0);
			// 将从串口接收到的数据发送到USB设备 
			ret_buf = RECV_BUFFER;  // 接收缓冲区 
			length = RECV_LEN;  		// 刚接收到的数据长度 
			if( length!=0 )
			{
				CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 );  // 向USB端点2的发送缓冲区写入数据块 
				CH375_WR_DAT_PORT( length );  					// 首先写入后续数据长度 
				while( length-- )
				{
					CH375_WR_DAT_PORT( *ret_buf );  			// 数据 
					ret_buf++;
				}
			}
		}
	
		CH375_INT_WIRE=1;
		if( CH375_INT_WIRE==0 ) // 从USB设备接收到数据 
		{
			cc++;
			uartPrint("usb rec: %\n\r", &cc, 1);
			mCh375Interrupt();
			
			// 将从USB设备接收到的数据发送到串口 
			ret_buf = RECV_BUFFER;  // 接收缓冲区 
			length = RECV_LEN;  		// 刚接收到的数据长度 
			while( length-- )
			{
				SendChar( *ret_buf );
				ret_buf++;
			}
		}
	}
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -