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

📄 main.c

📁 支持philips pdiusbd12 芯片进行usb通信的下位机源码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部 
**
**                                 http://www.zlgmcu.com
**
** 文   件   名: main.c
** 最后修改日期: 2004年11月15日
** 描        述: 用户应用程序
** 版	     本: V5.0
**********************************************************************************************************/

#include <reg52.h>
#include "D12Config.h"
#include "Descriptor.h"
#include "Chap_9.h"
#include "D12Driver.h"
#include "string.h"


/***********************************************************
			主函数			Main Function
************************************************************/

#define CMD_RECEIVE		0x01			/* 接收命令 */
#define CMD_TRANSMIT	0x02			/* 发送命令 */

INT8U xdata RecBuf[1024];				/* 缓冲区 */

void RxServe(void);

sfr AUXR = 0x8E;			 			/* 只用于TKS668 仿真器 */


/****************************************************************************
** 函数名称: void Init_Interrupt(void)
** 功能描述: 初始化MCU相关中断
*****************************************************************************/
void Init_Interrupt(void)
{
	EX0 = 1;							/* 开外部中断0 */
	PX0 = 0;							/* 设置外部中断0中断优先级 */
	EA = 1;								/* 开80C51总中断 */

	AUXR = 0;							/* 使能668芯片内部xdata */
}

/****************************************************************************
** 函数名称: main()
** 功能描述: 主函数
*****************************************************************************/
main()
{	
	if (Init_D12()!=0)					/* 初始化D12 */
 		return;							/* 如果初始化不成功,返回 */

	Init_Interrupt();					/* 实始化D12以后,才能使能相关中断 */
		
	while(1)
	{
		usbserve();						/* 处理USB事件 */

		if (bEPPflags.bits.ep2_rxdone == 1)					
		{											/* 从端点2收到数据 */
			RxServe();								/* 数据处理 */

			DISABLE();
			bEPPflags.bits.ep2_rxdone = 0;			/* 清空端点2收到数据标志 */
			ENABLE();
		}

	}

}

/****************************************************************************
** 函数名称: void RxServe(void)
** 功能描述: 对接收到的数据进行处理,并发送数据到PC机
*****************************************************************************/
void RxServe(void)
{
	INT8U ack = 0x01;			/* 应答字 */				
	INT8U command,len;
	INT16 offset;

	command = EpBuf[0];								//命令字
	offset = (INT16U)(EpBuf[1] << 8) + EpBuf[2];	//接收/发送 缓冲区地址
 	len = EpBuf[3];									//接收/发送 长度
	
	//接收数据命令
	if (command == CMD_RECEIVE)
	{
		memcpy(RecBuf + offset,&EpBuf[4],len);		
		D12_WriteEndpoint(5,1,&ack);				//应答PC机:我已收到你发来的数据!
	}	
	
	//发送数据命令
	if (command == CMD_TRANSMIT)	
	{
		if (len > 64)
		{														//要求发送数据大于64字节
			D12_WriteEndpoint(5,64,RecBuf + offset);			//写第一个发送缓冲区
			D12_WriteEndpoint(5,len - 64,RecBuf + offset + 64);	//写第二个发送缓冲区
		}
		else
			D12_WriteEndpoint(5,len,RecBuf + offset);			//只写第一个发送缓冲区
	}
}

⌨️ 快捷键说明

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