USB-CDC读取按键状态并点亮LED灯实验
实验教程中的代码没法编译#include <AI8051U.H> //包含AI8051U的头文件#include "ai_usb.h"//使用usb所需要包含的头文件#include "intrins.h" char *USER_DEVICEDESC = NULL;//USB 库里预留的设备描述符,必须定义,但不要使用char *USER_PRODUCTDESC = NULL;//USB 库里预留的产品描述符,必须定义,但不要使用char *USER_STCISPCMD = "@STCISP#";//这里使用"@STCISP#"这个字符串当作不停电自动下载命令,用户只需要在这里定义好这个字符串,//后面添加的库文件的 USB 中断程序会自动判断从电脑端下传的数据是否和这个字符串一样,如果一样,//则会自动软复位到系统区等待 USB 下载,用户不需要进行额外的处理。 void Delay1ms(void) //@40.000MHz{ unsigned long edata i; _nop_(); _nop_(); _nop_(); i = 9998UL; while (i) i--;} void main(void){ EAXFR = 1; //允许访问扩展的特殊寄存器,XFR WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行 CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间 P0M0 = 0x38; P0M1 = 0x20;//设置P03、P04为推挽输出,P05为开漏输出,其余为准双向口模式 P1M0 = 0x00; P1M1 = 0x00; //设置 P1 口为准双向口模式 P2M0 = 0x00; P2M1 = 0x00; //设置 P2 口为准双向口模式P3M0 = 0x30; P3M1 = 0x3b; //P30、P31为高阻输入,P32为准双向口、P33为高阻输入、P34和P35为开漏输出P3PU |= 0x38; //打开P33、P34、P35的内部上拉电阻,并且仅修改这三个I/O的上拉电阻打开状态 //P3M0 = 0x00; P3M1 = 0x00; //设置 P3 口为准双向口模式 //P3M0 = 0x00; P3M1 = 0x3c; //设置P32、P33、P34、P35为高阻输入,其余引脚为准双向口模式 //P3PU = 0x3c; //需要同时开启对应端口的上拉电阻 P4M0 = 0x00; P4M1 = 0x00; //设置 P4 口为准双向口模式 P5M0 = 0x00; P5M1 = 0x00; //设置 P5 口为准双向口模式 P6M0 = 0x00; P6M1 = 0x00; //设置 P6 口为准双向口模式 P7M0 = 0x00; P7M1 = 0x00; //设置 P7 口为准双向口模式 Delay1ms();//延时1ms,等待IO口电平稳定,因为前面刚改变了模式 //立刻读可能会读到错误的电平,所以需要先等待电平变化稳定后再读 usb_init(); //USB 接口配置 EA = 1;//打开总中断 while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置 P40 = 0;//打开LED部分的供电 while(1) { //使用USB串口控制来手动控制LED部分 if(bUsbOutReady) { printf_usb("P3%d当前的状态为:%d\r\n",(int)UsbOutBuffer,(int)(P3>>UsbOutBuffer)&1); //传入hex的位号来标识需要读取哪个位的状态,读取后通过对整组IO口数据的移位操作读取到对应IO的状态 P0 = P3|0xc3;//同步端口状态,并将其他不需要的位置1(不显示) printf_usb("已将状态同步给LED0%d\r\n",(int)UsbOutBuffer);//显示同步完成 usb_OUT_done(); // 本包接收的数据处理完毕,准备接收下一包数据 } }}针对您提到的USB-CDC读取按键状态并点亮LED灯实验代码无法编译的问题,建议从以下几个方面进行排查:<br><br>1. **头文件路径**:确保`ai8051u.h`和`ai_usb.h`头文件路径正确,并在编译选项中添加了相应的包含路径。<br><br>2. **库文件链接**:检查是否已正确链接USB库文件,确保库文件与编译器版本兼容。<br><br>3. **宏定义**:确认`USER_DEVICEDESC`、`USER_PRODUCTDESC`和`USER_STCISPCMD`宏定义是否符合库的要求,虽然这些变量未被使用,但需确保其类型和值正确。<br><br>4. **编译器设置**:检查编译器设置是否正确,如芯片型号、时钟频率等是否与代码匹配。<br><br>5. **代码完整性**:确保实验代码完整,未遗漏关键函数或初始化代码,特别是USB初始化和按键LED控制部分。<br><br>通过以上步骤,应能解决编译问题。如仍有问题,建议参考官方文档或社区论坛获取更多帮助。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考] 编译通过的USB例程:
使用最新版ISP软件更新头文件
https://www.stcaimcu.com/data/download/Tools/AIapp-ISP-v6.95G.zip
页:
[1]