实验二: 查询方式,查询到电脑命令后,printf_usb("Hello World !\r\n")或其他
1.先下载库文件

2.新建工程,将stc_usb_cdc_8h_data_bl51.LIB复制到工程文件夹里,Source Group里添加C文件,库文件

3.成功编译,成功下载程序,发送6时接收HelloWorld!,发送7时接收China!
程序如下:
- #include "ai8051u.h"
- #include "ai_usb.h"
-
- void main(void)
- {
- //EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
- //WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
- //CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
- P_SW2 |= 0x80;
- usb_init(); //初始化 USB 模块
- EA = 1; //使能全局中断
- while(1)
- {
- if(bUsbOutReady)
- {
- //查询方式:USB-Device 单片机查询是否有接收完成的 USB 主机送来的数据包
- //“bUsbOutReady”:主机发送给 HID/CDC 设备的数据状态标志。
- //USB 库中有定义 bUsbOutReady 位变量,查询方式必须调用一次“usb_OUT_done();”
- //状态位为 1 表示,主机发送给 HID/CDC 设备数据已完成,
- //设备已成功接收一包数据,等待对数据继续处理。
- if(UsbOutBuffer[0]==6)
- printf_usb("HelloWorld!\r\n");
- //接收到的数据包的第 0 个字节是 6,打印“HelloWorld!”
- else if(UsbOutBuffer[0]==7)
- printf_usb("China!\r\n");
- //接收到的数据包的第 0 个字节是 7 后,打印“China!”
- usb_OUT_done(); //USB 查询方式,Device 单片机通知【主机可以发下一个数据包】
- //当使用査询方式 if(bUsbOutReady),查询调用 USB 库函数时,在数据处理完成后,
- //必须调用一次“usb_OUT_done();”,这样才能接收下一包数据。
- //如果是使用中断方式调用 USB 库函数,用户程序不需要调用“usb_OUT_done();”
- //中断方式,USB 库函数内部会自动处理。
- }
- }
- }
复制代码
printf_test2.zip
(67.95 KB, 下载次数: 1)
|