gjl1111 发表于 2025-12-17 21:22:38

Ai8051U学习

学习了不停电下载,更加方便快捷了。

gjl1111 发表于 2025-12-17 21:29:43

Ai8051U学习

点亮第一颗灯清晰明了,学习效率高。

神农鼎 发表于 2025-12-17 21:38:49

要 做到 USB不停电下载;
要 尝试 AiCube 图形化自动配置生成程序工具;
推荐优先看的:
printf_usb("Hello World !\r\n")及
USB不停电下载, 演示视频链接:
https://www.stcaimcu.com/thread-19077-1-1.html

下载 最新的 AiCube-ISP-V6.96J 或以上版本软件 !
深圳国芯人工智能有限公司-工具软件

下载 最新的 USB库函数,永远用最新的 USB库函数 !
深圳国芯人工智能有限公司-库函数
下载 最新的 用户手册 !
下载 最新的 上机实践指导书 !

下载 最新的 Ai8051U 用户手册
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf

下载 最新的 Ai8051U 实验指导书,
有 AiCube 图形化自动配置生成程序工具使用说明
https://www.stcaimcu.com/data/do ... %AF%BC%E4%B9%A6.pdf

https://v.stcai.com/sv/1c5eec2-197fcd9b766/1c5eec2-197fcd9b766.mp4
上面是 小李 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成

https://v.stcai.com/sv/1fce8086-197cf2b9dd4/1fce8086-197cf2b9dd4.mp4
上面是 小赵 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成

芯映芯 发表于 2025-12-18 09:18:56

请勿重复开贴!!!学习打卡开一个帖子,在同一个帖子下面回复即可,以免被后台监测删除重复贴感谢配合!!!

gjl1111 发表于 2025-12-23 21:35:43

认真学习

gjl1111 发表于 2025-12-23 21:41:24

定时器学习,了解原理,用于控制led灯

gjl1111 发表于 2025-12-24 14:48:57


学习Ai8051U定时器中断,核心是吃透定时+中断的联动逻辑,关键在寄存器精准配置,且中断服务函数需轻量化。

从理论到实践,我深刻体会到:寄存器配置无小事,一个位的遗漏(如未开总中断)就会导致功能失效;中断服务函数不能冗余,否则会阻塞主程序,这两点是嵌入式定时功能实现的核心要点。
屏幕截图 2025-12-19 145901.png (181.35 KB, 下载次数: 0)
https://www.stcaimcu.com/data/attachment/forum/202512/19/150402daeakzgz35gp8l7k.png
屏幕截图 2025-12-19 145919.png (143.46 KB, 下载次数: 0)
https://www.stcaimcu.com/data/attachment/forum/202512/19/150409lkb26v6lkk9m9k7z.png


gjl1111 发表于 2025-12-24 14:51:11

第二课硬件学习

gjl1111 发表于 2025-12-24 14:53:52

学习AI8051U单片机定时器周期性调度任务,核心是掌握定时器模式配置、初值计算与中断服务函数编写。通过定时器中断替代软件延时,既能实现任务精准周期性调度,又能释放CPU资源处理其他事务,深刻体会到嵌入式系统“精准控时”与“高效运行”的设计逻辑。

gjl1111 发表于 2025-12-27 18:29:21


#include "config.h"                     //默认已包含stdio.h、intrins.h等头文件

u16 Bandgap;

//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
//<<AICUBE_USER_GLOBAL_DEFINE_END>>



////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码
    //<<AICUBE_USER_MAIN_INITIAL_END>>

        u16 vol;
    SYS_Init();

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {
      USBLIB_OUT_Done();            //查询方式处理USB接收的数据
                vol = ADC_Convert(0);                         // 调用自动生成的 ADC 转换函数
      Bandgap = ADC_Convert(15);                 // 读取内部基准 ADC(15通道)
      vol = (u16)((u32)vol * 119 / Bandgap); // 相对电压值计算
      printf_usb("Analog Voltage: %0.2fV\r\n",(float)vol/100); // 打印电压值
      delay_ms(500);
               
      //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
      // 在此添加主函数中用户主循环代码
      //<<AICUBE_USER_MAIN_LOOP_END>>
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    EnableAccessXFR();                  //使能访问扩展XFR
    AccessCodeFastest();                //设置最快速度访问程序代码
    AccessIXramFastest();               //设置最快速度访问内部XDATA
    IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

    //<<AICUBE_USER_PREINITIAL_CODE_BEGIN>>
    // 在此添加用户预初始化代码
    //<<AICUBE_USER_PREINITIAL_CODE_END>>

    P0M0 = 0x00; P0M1 = 0x00;         //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;         //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;         //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;         //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;         //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;         //初始化P5口为准双向口模式

    CLK_Init();                         //时钟模块初始化
    ADC_Init();                         //ADC初始化
    delay_ms(1);
    USBLIB_Init();                      //USB库初始化
    delay_ms(1);

    //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_INITIAL_CODE_END>>

    EnableGlobalInt();                  //使能全局中断
}

////////////////////////////////////////
// 微秒延时函数
// 入口参数: us (设置延时的微秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_us(uint16_t us)
{
    do
    {
      NOP(34);                        //(MAIN_Fosc + 500000) / 1000000 - 6
    } while (--us);
}


////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
    uint16_t i;

    do
    {
      i = MAIN_Fosc / 6000;
      while (--i);
    } while (--ms);
}


//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
页: [1] 2
查看完整版本: Ai8051U学习