8H8K64U Printf_USB 打卡
实验一:printf_usb("Hello World !\r\n"), 第一个完整的C语言1.先下载库文件
2.新建工程,将stc_usb_cdc_8h_data_bl51.LIB复制到工程文件夹里,Source Group里添加C文件,库文件
3.成功编译,成功下载程序,串口助手接收区一直在打印HelloWorld!
程序如下:
#include "stc8h.h"
#include "ai_usb.h"
void main(void)
{
//EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
//CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
P_SW2 |= 0x80;//使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭
usb_init(); //初始化 USB 模块
EA = 1; //使能全局中断
while(1)
{
printf_usb("HelloWorld!\r\n");
}
}
实验二: 查询方式,查询到电脑命令后,printf_usb("Hello World !\r\n")或其他
1.先下载库文件
https://www.stcaimcu.com/data/attachment/forum/202504/27/133519muark303rpq0r78b.jpg
2.新建工程,将stc_usb_cdc_8h_data_bl51.LIB复制到工程文件夹里,Source Group里添加C文件,库文件
https://www.stcaimcu.com/data/attachment/forum/202504/27/133830htezlx7lbcl8wzll.jpg
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==6)
printf_usb("HelloWorld!\r\n");
//接收到的数据包的第 0 个字节是 6,打印“HelloWorld!”
else if(UsbOutBuffer==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 库函数内部会自动处理。
}
}
}
实验三: 中断方式,单片机USB中断接收服务函数收到命令后,printf_usb("Hello World !\r\n")或其他
1.先下载库文件
https://www.stcaimcu.com/data/attachment/forum/202504/27/133519muark303rpq0r78b.jpg
2.新建工程,将stc_usb_cdc_8h_data_bl51.LIB复制到工程文件夹里,Source Group里添加C文件,库文件
https://www.stcaimcu.com/data/attachment/forum/202504/27/133830htezlx7lbcl8wzll.jpg
3.成功编译,成功下载程序,发送6时接收HelloWorld!,发送7时接收China!
程序如下:
#include "ai8051u.h"
#include "ai_usb.h"
void USBLIB_OUT_Callback(void)
{
//用户希望 USB 库函数,中断方式回调执行的用户自己编写的任务函数,简称回调函数
if(UsbOutBuffer == 6)
printf_usb("Hello World !\r\n");
//接收到数据 6 后,直接打印输出“Hello World !”到主机相应软件的 USB【CDC/HID-串口助手】
// \r 是回车,跳到行首,\n 是换行,就是换到下一行;\r\n 不要交换次序
else if(UsbOutBuffer == 7)
printf_usb("China !\r\n");
//接收到数据 7 后,直接打印输出 “China !” 到主机相应软件的 USB【CDC/HID-串口助手】”
}
void main(void)
{
//EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
//CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
P_SW2 |= 0x80;//使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭
usb_init(); //初始化 USB 模块
set_usb_OUT_callback(USBLIB_OUT_Callback); //设置 USB 中断服务程序可以调用的回调函数
//此处 USBLIB_OUT_Callback 是前面用户自己编写的任务函数的函数名/地址,供 USB 库函数回调
EA = 1; //使能全局中断
while (1);
}
页:
[1]