找回密码
 立即注册
查看: 38|回复: 2

8H8K64U Printf_USB 打卡

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 4 天前 | 显示全部楼层 |阅读模式
实验一:printf_usb("Hello World !\r\n"), 第一个完整的C语言

1.先下载库文件
截图202504271335196383.jpg
2.新建工程,将stc_usb_cdc_8h_data_bl51.LIB复制到工程文件夹里,Source Group里添加C文件,库文件
截图202504271338304603.jpg
截图202504271339226411.jpg
截图202504271340078668.jpg
截图202504271343149656.jpg
截图202504271428408533.jpg
截图202504271403442688.jpg
截图202504271351197341.jpg
3.成功编译,成功下载程序,串口助手接收区一直在打印HelloWorld!
截图202504271400108110.jpg
截图202504271353164167.jpg
程序如下:
  1. #include "stc8h.h"
  2. #include "ai_usb.h"
  3. void main(void)
  4. {
  5.     //EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
  6.     //WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
  7.     //CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
  8.     P_SW2 |= 0x80;  //使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭
  9.     usb_init(); //初始化 USB 模块
  10.     EA = 1; //使能全局中断
  11.     while(1)
  12.     {
  13.         printf_usb("HelloWorld!\r\n");
  14.     }
  15. }
复制代码
printf_test1.zip (67.44 KB, 下载次数: 1)


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 4 天前 | 显示全部楼层
实验二: 查询方式,查询到电脑命令后,printf_usb("Hello World !\r\n")或其他
1.先下载库文件

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

截图202504271437402800.jpg
截图202504271439094516.jpg
截图202504271441017295.jpg
截图202504271441594933.jpg
截图202504271443152081.jpg
截图202504271448222653.jpg
3.成功编译,成功下载程序,发送6时接收HelloWorld!,发送7时接收China!
截图202504271450283685.jpg
截图202504271451314873.jpg

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 4 天前 | 显示全部楼层
实验三: 中断方式,单片机USB中断接收服务函数收到命令后,printf_usb("Hello World !\r\n")或其他
1.先下载库文件

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

截图202504271501258833.jpg
截图202504271501578807.jpg
截图202504271503141184.jpg
截图202504271504023588.jpg
截图202504271507003343.jpg
截图202504271510476755.jpg
3.成功编译,成功下载程序,发送6时接收HelloWorld!,发送7时接收China!
截图202504271511314524.jpg
截图202504271512459538.jpg
程序如下:
  1. #include "ai8051u.h"
  2. #include "ai_usb.h"
  3. void USBLIB_OUT_Callback(void)
  4. {
  5.     //用户希望 USB 库函数,中断方式回调执行的用户自己编写的任务函数,简称回调函数
  6.     if(UsbOutBuffer[0] == 6)
  7.         printf_usb("Hello World !\r\n");
  8.         //接收到数据 6 后,直接打印输出“Hello World !”到主机相应软件的 USB【CDC/HID-串口助手】
  9.         // \r 是回车,跳到行首,\n 是换行,就是换到下一行;\r\n 不要交换次序
  10.     else if(UsbOutBuffer[0] == 7)
  11.         printf_usb("China !\r\n");
  12.         //接收到数据 7 后,直接打印输出 “China !” 到主机相应软件的 USB【CDC/HID-串口助手】”
  13. }
  14. void main(void)
  15. {
  16.     //EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
  17.     //WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
  18.     //CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
  19.     P_SW2 |= 0x80;//使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭        
  20.     usb_init(); //初始化 USB 模块
  21.     set_usb_OUT_callback(USBLIB_OUT_Callback); //设置 USB 中断服务程序可以调用的回调函数
  22.     //此处 USBLIB_OUT_Callback 是前面用户自己编写的任务函数的函数名/地址,供 USB 库函数回调
  23.     EA = 1; //使能全局中断
  24.     while (1);
  25. }
复制代码
printf_test3.zip (67.94 KB, 下载次数: 0)
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 21:58 , Processed in 0.130537 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表