- 打卡等级:初来乍到
- 打卡总天数:9
- 最近打卡:2025-11-02 12:33:51
已绑定手机
注册会员
- 积分
- 111
|
今天实际操作了USB-CDC方式控制Ai8051U进行LED电灯
使用了文档中的代码和USB不停电下载的代码,在ISP软件中控制P2口LED灯的亮和灭,感觉打开了新世界的大门
#include <AI8051U.H> //包含AI8051U的头文件
#include "intrins.h" //使用_nop_()函数所必须要包含的头文件,
//否则延时函数中调用的_nop_()函数没有被头文件引用过来,
//会导致编译器找不到这个而函数而报错。
#include "stc32_stc8_usb.h" //不断电下载头文件
//char *USER_DEVICEDESC = NULL;
//char *USER_PRODUCTDESC = NULL;
//char *USER_STCISPCMD ="@STCISP#";
void Delay500ms(void) //延时函数,主频40MHz
{
unsigned long edata i; //定义变量
_nop_(); //空指令
_nop_();
i = 4999998UL; //变量初始化
while (i) i--; //循环等待
}
//上面延时函数部分代码可使用AIapp-ISP软件的“软件延时计算器”工具来生成。
void main(void)
{
BYTE dat; //定义变量保存接收的数据
EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//(32 位模式请使用这句,注释下一句)
// P_SW2 |= 0x80; //允许访问扩展的特殊寄存器,XFR
//(8位模式请使用这句,注释上一句)。
WTST = 0; //设置取程序代码等待时间,
//赋值为 0表示不等待,程序以最快速度运行
CKCON = 0; //设置访问片内的 xdata速度,
//赋值为 0表示用最快速度访问,不增加额外的等待时间
P0M0 = 0x00; P0M1 = 0x00; //设置P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //设置P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //设置P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //设置P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //设置P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //设置P5口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //设置P6口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //设置P7口为准双向口模式
//上面的将所有I/O口都初始化为准双向口工作模式的程序,
//可以使用AIapp-ISP软件的“I/O口配置工具”来生成。
usb_init(); //USB CDC 接口配置
IE2 |=0x80; //使能USB中断
EA = 1;
while (DeviceState != DEVSTATE_CONFIGURED);//等待USB完成配置
P40 = 0; //打开LED部分的供电
while(1)
{
if (bUsbOutReady)
{
//USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
dat = UsbOutBuffer[0]; //保存接收的数据
P2=dat; //讲接收的数据送到P0口显示
LED40_SetPort(0,dat); //使用AiCube-ISP软件菜单“调试仿真接口”中的
//“擎天柱-LED-DIP40”进行模拟显示P0口
usb_OUT_done();
}
//LED循环自动闪烁部分
// P20 = ~P20; //对P0端口取反
// P0 = ~P0; //对单个端口取反
// Delay500ms(); //调用延时函数,延时0.5s
}
}
|
|