📄 main.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 + -