找回密码
 立即注册
楼主: xionger

8051U学习打卡

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-08-07 10:55:38

4

主题

0

回帖

20

积分

新手上路

积分
20
发表于 2025-8-7 13:47:17 | 显示全部楼层

Ai8051U教学视频 USB不断电下载

本视频教会USB编译需要的库及需要源码的地方。学习容易。
回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 2025-8-7 13:48:00 | 显示全部楼层
尊敬的用户:

感谢您对国芯人工智能(GOCHEM AI)的关注与支持。关于您提到的“AI8051U教学视频”及“USB不断电下载”的相关内容,我们在此进行专业说明与补充。

AI8051U是基于8051架构的嵌入式微控制器,常用于教学、开发和工业控制等场景。其支持通过USB接口进行程序下载与调试,这一功能在教学过程中具有重要意义,能够提升学习效率与操作便捷性。

在使用USB进行程序下载时,通常需要安装相应的驱动程序与开发环境。例如,在Windows系统下,可能需要安装CH340、CP210x等USB转串口芯片的驱动,以确保设备能够被正确识别。此外,开发工具如Keil uVision、IAR Embedded Workbench或国产开发平台如GD32 MCU Studio等,均需配置正确的库文件与编译选项,以实现代码的正常编译与下载。

针对“USB不断电下载”的需求,建议在开发过程中保持USB连接稳定,避免因断电导致程序丢失或烧录失败。同时,可考虑使用带有电源管理功能的开发板,或在开发环境中设置自动保存与备份机制,以提高开发过程的可靠性。

国芯人工智能致力于提供高效、稳定的嵌入式开发解决方案,涵盖从硬件设计到软件开发的全链条技术支持。若您在使用AI8051U或其他嵌入式平台时遇到技术问题,欢迎随时联系我们的技术支持团队,我们将竭诚为您服务。

感谢您的关注,祝您学习顺利,开发愉快!

国芯人工智能 技术支持部  
2025年4月

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-08-22 12:52:14

8

主题

15

回帖

182

积分

注册会员

积分
182
发表于 2025-8-8 16:56:23 | 显示全部楼层

8051U学习打卡第三天:USB不停电烧录学习笔记

1.USB不停电烧录

1.1 AiCube生成不停电烧录最小代码(可直接查看规格书教程)

​\qquad 8051U内部自带高速晶振,并且系统时钟使用的晶振频率是根据 AiCube软件烧录 时选择的频率为准!!!如下图1所示,所以在进行项目配置时除非特殊情况,否则可以无需配置CLK项目,如下图2所示,全部是灰色

image.png

图1 系统运行时工作频率

image-1.png

图2 CLK配置界面

​\qquad 由于需要使用USB不停电烧录,所以需要使能USB外设,如下图3所示,其中USB协议推荐使用CDC而不是HID协议,虽然两者就是串口并且都可以进行USB不停电 烧录,但是CDC对比HID而言带宽高,支持大数据包传输,灵活性强,更适合进行程序的烧录;同时ISP下载命令可以自定义,不过这里如果自定义之后一定要记住!!!否则后面还是不能进行不停电烧录

image-2.png

图3 USB配置界面

​\qquad 完成以上配置之后既可生成代码,如果需要其他功能可自行添加,这里我就使用第一堂课的LED点灯!!!

1.2 AiCube不停电烧录配置

​\qquad 首先第一步就是要确保单片机进入烧录模式,并且电脑的串口链接到了单片机如下图4第一步;
​\qquad 第二步就是进入Aicube的“收到用户命令后复位到ISP监控程序区”,根据配置工程的USB进行配置,配置时选择的是CDC协议就选择CDC,配置时是HID就选择HID;同时需要根据配置项目时的下载命令更改此处的自定义命令,如果使用默认就直接默认烧录就行,如下图4第二步。同时由于8051U串口默认识别成HID设备和需要不停电烧录,所以也需要√上剩下两个命令!!!

image-3.png

图4 AiCube不停电烧录配置

2.生成的系统初始化代码简单说明

EnableAccessXFR();                  //使能访问扩展XFR
AccessCodeFastest();                //设置最快速度访问程序代码
AccessIXramFastest();               //设置最快速度访问内部XDATA
IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

​\qquad 这些就不进行说明了,同第一天学习里面的初始化,代码生成时也给出来简单注释,所有寄存器都可以在规格书找到

USBLIB_Init()                      //USB库初始化
{
    usb_init();                         //初始化USB模块
    USB_SetIntPriority(0);              //设置中断为最低优先级
    set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
}

​\qquad 此处的USBLIB_Init();函数是对USB进行初始化,使得支持USB不停电烧录,里面的函数只有这几个,

  1. 首先是usb_init();函数,这个函数在stc_usb_cdc_32g.lib文件里面,暂时还没有学到,等到了USB_CDC章节再做笔记;
  2. USB_SetIntPriority(0);备注说明了是根据形参设置中断优先级的函数;
  3. set_usb_ispcmd("@STCISP#");这里面的参数就是配置自定义下载命令的命令,即使生成完成项目之后,依然可以回到Aicube或者直接在工程里面更改不停电烧录命令,同时也需要在Aicube烧录配置那里同时更改。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-08-22 12:52:14

8

主题

15

回帖

182

积分

注册会员

积分
182
发表于 2025-8-10 01:12:10 | 显示全部楼层

8051U学习打卡第四天:GPIO_INPUT and OUTPUT
昨天忙完了,今天弄完了都转钟了liulei liulei
说明:以后的实验均通过 AiCube生成代码 !!!

1.8051U的GPIO说明

1.1模式说明

\qquad 如下图1所示,8051U的GPIO一共有四种模式,分别是准双向、推挽输出、高阻输入、开漏;
一般使用最多的就是准双向和推挽输出,除非特别情况,否则一般准双向既可!!!具体的结构图可以看规格书

image.png

图1 IO口工作模式

1.2 施密特触发电气说明

\qquad 如下图2所示,此处我使用的VDD是3.3V,还有一个5V版本,施密特触发对IO引脚输入时差别不大,所谓施密特触发简单来说就是限制了一个触发范围,只有在范围之外的电压才能影响电平的状态,如图所示,VIL1和VIH1在打开施密特触发时的电平范围为0.99V~1.18V,中间有接近0.19V的电压误差范围,而没有打开施密特触发的只有0.02V的电压误差,这就可能导致当电压产生细微波动时电平状态会出现翻转
\qquad 如输入电平正常情况为1.5V,这种情况8051U认为是高电平1,但是电压不会一直这么稳定,会出现上下波动的情况,而打开施密特触发之后允许的误差范围更大,在没有突破VIL1的最大值时会稳定读取到高电平,使得引脚的读取也会更加稳定。

image-1.png

图2 IO口施密特触发电气说明

2.IO口的读取和输出实验

\qquad 由于擎天柱出厂的时候只搭配了2个按键和7个LED灯光,所以就使用这2个按键进行IO读取,7个LED进行功能演示;
实验效果说明:

  1. P32按键负责切换LED显示模式,P33负责翻转LED效果;

  2. 所有IO引脚均配置成为准双向IO;
    实验视频效果如下

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-08-22 12:52:14

8

主题

15

回帖

182

积分

注册会员

积分
182
发表于 2025-8-11 13:32:59 | 显示全部楼层

z8051U学习打卡第五集:IO定时器中断(AiCube版本)

1.Ai8051U中断

1.1.中断系统

\qquad 各个外设的中断优先级和中断所需寄存器如下图1所示,和C52没有什么区别,在代码编写方面也一样

image.png

图1.中断系统

1.2.定时器中断

\qquad 这里以定时器0进行学习,如下图2所示,定时器0正常发生中断所需要配置的寄存器

  1. 当AUXR7/T0x12=0时,就是进行12倍分频,也就是AiCube配置时的12T模式;同理,当AUXR7/T0x12=1时就是1T模式;
  2. 当C/T=0时,定时/计数器处于定时模式,C/T=1时,定时/计数器处于计数模式;
  3. 同时TR0、GATE、INT0/P32共同配合控制是否开启定时/计数器;
  4. (RL)TH0、(RL)TL0共同实现了16位自动重装载定时器;
  5. TF0就是中断溢出标志位,当它为1时就会产生中断标志位;
  6. 当T0CLK=1时,P35引脚就会产生时钟频率输出;

image.png

图2.定时器0配置

2.电子木鱼任务

2.1.Aicube配置

\qquad 重点是进行Timer外设的配置,其余的根据需求更改,如下图3所示,我们只需要重点关注框选的地方

  1. 时钟输出,就是上面所说的P35引脚,一般可以不需要开启;
  2. 定时器模式选择最方便的模式——16位自动重装载+8位预分频;
  3. 定时器周期这里可以根据自己需求配置,软件会自动帮我们计算所需要参数,我们只需要根据需要的中断时间更改周期和单位;
  4. 是否使能中断一定要开启,否则无法进行中断;

image.png

2.2.效果显示

image.png

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-08-22 12:52:14

8

主题

15

回帖

182

积分

注册会员

积分
182
发表于 2025-8-11 17:01:17 | 显示全部楼层

8051U学习打卡第六集:定时器任务调度实验

1. 定时器任务调度讲解

这一节课的内容就和RTOS挂一点钩了,对于学习过FreeRTOS的人表示很友好touxiao touxiao

所谓任务调度,就是在你有多个需要定时任务,但是每个任务时间又不一样所需要用到的功能;

  • task0, 要求50ms执行一次
  • task1, 要求1s执行一次
  • task2, 要求10ms执行一次
  • .......

如上所示,有多个不同的任务并且定时时间还不一样,具体干什么我们先不管,当然,为了不计成本的完成任务情况下你也可以选择使用定时器多的MCU进行多定时器同时开启中断的方法来完成,如定时器0专门负责task0,定时器1专门负责task1,定时器2专门负责task2,以此类推......;但是这样就会导致成本高、代码维护困难、MCU功耗更高,所以采取了任务调度的方法来完成这个任务

任务调度最大优点就是可以节省单片机资源,达到节省功耗,提升运行效率的作用。还是上面的例子,任务调度可以使用一个定时器来完成多个任务,这比多定时器开启的资源消耗明显小很多。

2. STC官方Task文件代码

static TASK_COMPONENTS Task_Comps[] =
{
    //状态  计数  周期  函数
    {0, 500,  500,  Sample_LED0},       /* task 1 Period: 500ms */
    {0, 1000, 1000, Sample_LED2},       /* task 2 Period: 1000ms */
    {0, 2000, 2000, Sample_LED4},       /* task 3 Period: 2000ms */
    {0, 500, 500, 	Sample_RTC},        /* task 4 Period: 500ms */
    /* Add new task here */
};

如上面代码所示,一个结构体里面包含了一个任务所需要的全部元素,状态,计时时间,周期和函数名

//========================================================================
// 函数: Task_Handler_Callback
// 描述: 任务标记回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Marks_Handler_Callback(void)
{
    u8 i;
    for(i = 0; i < Tasks_Max; i++)
    {
        if(Task_Comps[i].TIMCount)      /* If the time is not 0 */
        {
            Task_Comps[i].TIMCount--;   /* Time counter decrement */
            if(Task_Comps[i].TIMCount == 0) /* If time arrives */
            {
                /*Resume the timer value and try again */
                Task_Comps[i].TIMCount = Task_Comps[i].TRITime;
                Task_Comps[i].Run = 1;      /* The task can be run */
            }
        }
    }
}

Task_Marks_Handler_Callback(void)函数官方说明的比较简单,根据代码可以知道这个函数的主要作用是让任务开始计时,以达到到固定时间任务可以运行和停止的效果,为了确保计时的准确性,一般将它放在**中断函数里面

//========================================================================
// 函数: Task_Pro_Handler_Callback
// 描述: 任务处理回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Pro_Handler_Callback(void)
{
    u8 i;
    for(i = 0; i < Tasks_Max; i++)
    {
        if(Task_Comps[i].Run) /* If task can be run */
        {
            Task_Comps[i].Run = 0;      /* Flag clear 0 */
            Task_Comps[i].TaskHook();   /* Run task */
        }
    }
}

Task_Pro_Handler_Callback()函数就比较容易理解,它只有两个作用,一个是运行任务,另一个就是将任务的运行标志位置零,防止重复运行;它一般放在主函数里面即可,因为如果放在中断函数里面,当中断函数运行任务时,再次触发中断可能会程序跑飞

3.效果

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-08-22 12:52:14

8

主题

15

回帖

182

积分

注册会员

积分
182
发表于 2025-8-11 18:18:43 | 显示全部楼层
8051U打卡第7集,虚拟LED和数码管
虚拟LED和数码管在前面的基础上主要是通过USB-CDC功能配合上ISP软件进行实现的
虚拟LED和数码管的硬件与现实中的硬件一样,只需要使用函数就可以正常点亮
在这一集的教学视频中我主要学习到了USB-CDC功能的强大,同时也体会到了Aicube功能之多,贴心的为没有实验箱的朋友准备了这一块内容用作学习
至于该使用什么代码来实现这些功能,在Aicube(ISP)->调试仿真接口->调试接口协议里面都为我们准备好了,有不同的封装、功能,都可以使用,这极大地帮助我们降低了开发的难度,不需要重新编写USB函数库
同时也在该章节重新复习了一遍ASCII码

虚拟LED功能函数

虚拟LED功能函数

虚拟数码管功能函数

虚拟数码管功能函数

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-08-22 12:52:14

8

主题

15

回帖

182

积分

注册会员

积分
182
发表于 5 天前 | 显示全部楼层
学习打卡No.8矩阵键盘


矩阵键盘采用思想是通过行列扫描的方式确定按下的按键的编号,这种方法在按键数量较少的时候(0~5个)不适用,因为此时2个IO口才能确定一个按键,4个IO才能确定4个按键;但是当按键数量超过5个时,如有6个按键时,通过行列扫描的方式,只需要5个IO就可以完成这个任务,随着按键数量的增多,这种优势会更加明显!!!
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-24 05:27 , Processed in 0.130216 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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