找回密码
 立即注册
查看: 278|回复: 8

【实验箱已收到】【AI8051U】学习打卡与心得

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-14 17:26:17 | 显示全部楼层 |阅读模式
【第一集】序言
详细的介绍了AI8051U芯片的功能;最大优点是兼容89C52RC,12C5A60S2
8051U的功能特点:
1。屏幕显示和视频播放
2.IIS录放音
3.PWM_DMA
4.频谱分析仪
5.手写计算器(8051最突出的功能)
6.QSPI,PWM移相,硬件乘除,单精度浮点

截图202505141725261122.jpg 截图202505141725589399.jpg
现在国产芯片也是越来越强大了



回复

使用道具 举报 送花

3

主题

714

回帖

139

积分

等待验证会员

积分
139
发表于 2025-5-14 17:28:00 | 显示全部楼层
AI8051U芯片技术解析与应用展望

作为新一代增强型8位微控制器,AI8051U在保持经典架构兼容性的基础上实现了多项技术创新。本技术分析将从架构特性、功能模块及系统级应用三个维度展开论述。

一、核心架构特性
AI8051U采用双核异构架构,在保持与Intel 8051指令集全兼容的基础上,创新性地整合了高速运算协处理器。其时钟频率最高可达48MHz,配合硬件乘除器(单周期32×32位乘法)和单精度浮点运算单元(FPU),使传统架构的运算性能提升达20倍以上。存储系统方面,提供64KB Flash+2KB EEPROM+4KB SRAM的灵活配置,支持在线编程(ISP)和在线调试(OCD)功能。

二、功能模块技术解析
1. 显示控制子系统
集成专用显示控制器,支持最大分辨率800×600的RGB接口输出。通过DMA通道实现显存自动刷新,配合硬件图层混合引擎,可同时处理4层图形叠加。视频解码模块支持H.264 Baseline Profile硬件解码,在12MHz主频下可实现30fps@QVGA视频播放。

2. 音频处理单元
内置I2S数字音频接口,支持最高192kHz/24bit音频流处理。配备专用语音编解码器,支持ADPCM、G.711等编码格式。通过双缓冲DMA架构实现零延迟音频采集与回放,信噪比(SNR)达到92dB。

3. 精密定时系统
16通道增强型PWM控制器支持:
移相控制精度:0.1°
频率分辨率:24位
死区时间可编程范围:0-65535ns
配合事件触发矩阵(ETM),可构建复杂电机控制时序。

4. 频谱分析加速器
硬件FFT协处理器支持1024点复数FFT运算仅需512时钟周期,较软件实现提速300倍以上。提供窗函数硬件加速(Hamming/Hanning/Blackman),动态范围达到96dB。

5. 人机交互创新
手写计算器功能基于专用触控接口实现,包含:
8点电容触控检测
笔迹预测算法(采样率200Hz)
公式识别引擎(支持LaTeX转换)
典型数学运算延迟

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-14 18:08:57 | 显示全部楼层
【第二集】硬件与工具介绍
介绍了Ai8051试验箱的硬件与硬件的功能;如何安装软件与工具;如何下载程序。
推荐用USB-Link 1D烧录程序。
截图202505141808516397.jpg 截图202505141808154487.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-14 19:10:37 | 显示全部楼层
【第三集】 点亮第一颗LED
1.新建工程
截图202505141947571037.jpg
需要配置的地方
截图202505141949219939.jpg 截图202505141952357442.jpg 截图202505141953483618.jpg 截图202505141954236180.jpg

硬件介绍
截图202505141957284412.jpg

I/O口配置
截图202505141958588742.jpg
。点亮第一个LED是梦到开始,从入门到入土。
张三和李四互殴笑死我了

代码与实物演示
截图202505181553597706.jpg
截图202505181656575742.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-14 19:41:40 | 显示全部楼层
【第四集】 USB不停电下载
本集摘要
截图202505142005208319.jpg
如何全局搜素
截图202505142008044728.jpg
配置寄存器
截图202505142010247699.jpg 截图202505142012084559.jpg
屏蔽未调用指令
截图202505142014403025.jpg
代码粘贴复制,Ctrl+C与Ctrl+V我只能说无解。


代码与实物演示
截图202505181752127016.jpg
截图202505181753004494.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-14 20:35:28 | 显示全部楼层
【第五集】C语言基础
本集摘要
截图202505142035557911.jpg

替换名替换被替换名
截图202505142040005281.jpg

Printf的用法
截图202505142041276143.jpg

转义说明简介
截图202505142044513384.jpg 截图202505142044074123.jpg

ASCII码标记一下
截图202505142046122361.jpg

变量类型
截图202505142047256416.jpg

运算符
截图202505142048179410.jpg 截图202505142049252199.jpg

这集需要了解C语言,不然听起来会很吃力。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-14 20:51:45 | 显示全部楼层
【第六集】I/O口输入输出

本集摘要
截图202505142052466944.jpg


GPIO的定义
截图202505142053372429.jpg 截图202505142055398857.jpg

GPIO的四种模式
截图202505142054222896.jpg
按钮输入检测
截图202505142057576329.jpg

按键消抖
截图202505142059567401.jpg

生成延时代码
截图202505142102129871.jpg
主要要学习GPIO口的模式选择,和按键消抖。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-14 22:30:25 | 显示全部楼层
【第七集】定时中断
以问答的形式引出定时器中断
截图202505142235168877.jpg

重点:学会利用ISP软件生成定时函数
截图202505142238323569.jpg

定时器需要配置的地方
截图202505142240349124.jpg 截图202505142241064584.jpg 截图202505142242411936.jpg 截图202505142243046317.jpg 截图202505142243264565.jpg 截图202505142243528417.jpg
计算公式
截图202505142244464362.jpg

函数的定义声明和调用
截图202505142245439487.jpg 截图202505142246173230.jpg

这集的内容还是很重要的,慢慢开始变得有点难了,不仅配置的东西越来越多,还要计算。

代码内含《电子功德箱》

  1. #include "ai8051u.h"
  2. #include "stc32_stc8_usb.h"
  3. #include "math.h"
  4. #include "stdio.h"
  5. #define u8 unsigned char
  6. #define u16 unsigned int       
  7.        
  8. u8 state = 0;
  9. u16 flag = 0;
  10. u16 count =0;
  11. u8 bontten_State=0;
  12. /*void Timer0_Init(void)                //3秒@24.000MHz
  13. {
  14.         TM0PS = 0x5B;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  15.         AUXR &= 0x7F;                        //定时器时钟12T模式
  16.         TMOD &= 0xF0;                        //设置定时器模式
  17.         TL0 = 0x3F;                                //设置定时初始值
  18.         TH0 = 0x01;                                //设置定时初始值
  19.         TF0 = 0;                                //清除TF0标志
  20.         TR0 = 1;                                //定时器0开始计时
  21.         ET0 = 1;                                //使能定时器0中断
  22. }
  23. void Timer0_Init(void)                //500毫秒@24.000MHz
  24. {
  25.         TM0PS = 0x0F;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  26.         AUXR &= 0x7F;                        //定时器时钟12T模式
  27.         TMOD &= 0xF0;                        //设置定时器模式
  28.         TL0 = 0xDC;                                //设置定时初始值
  29.         TH0 = 0x0B;                                //设置定时初始值
  30.         TF0 = 0;                                //清除TF0标志
  31.         TR0 = 1;                                //定时器0开始计时
  32.         ET0 = 1;                                //使能定时器0中断
  33. }*/
  34. void Timer0_1sInit(void)                //1秒@24.000MHz
  35. {
  36.         TM0PS = 0x1E;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  37.         AUXR &= 0x7F;                        //定时器时钟12T模式
  38.         TMOD &= 0xF0;                        //设置定时器模式
  39.         TL0 = 0xFC;                                //设置定时初始值
  40.         TH0 = 0x03;                                //设置定时初始值
  41.         TF0 = 0;                                //清除TF0标志
  42.         TR0 = 1;                                //定时器0开始计时
  43.         ET0 = 1;                                //使能定时器0中断
  44. }
  45. void Timer1_2sInit(void)                //2秒@24.000MHz
  46. {
  47.         TM0PS = 0x3D;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  48.         AUXR &= 0x7F;                        //定时器时钟12T模式
  49.         TMOD &= 0xF0;                        //设置定时器模式
  50.         TL0 = 0xFC;                                //设置定时初始值
  51.         TH0 = 0x03;                                //设置定时初始值
  52.         TF0 = 0;                                //清除TF0标志
  53.         TR0 = 1;                                //定时器0开始计时
  54.         ET0 = 1;                                //使能定时器0中断
  55. }
  56. void Delay20ms(void)        //@24.000MHz
  57. {
  58.         unsigned long edata i;
  59.         _nop_();
  60.         _nop_();
  61.         i = 119998UL;
  62.         while (i) i--;
  63. }
  64. void main()
  65. {
  66.     WTST = 0;
  67.         EAXFR = 1;
  68.         CKCON = 0;
  69.        
  70.    
  71.     P0M1 = 0x00;   P0M0 = 0x00;
  72.     P1M1 = 0x00;   P1M0 = 0x00;
  73.     P2M1 = 0x00;   P2M0 = 0x00;
  74.     P3M1 = 0x00;   P3M0 = 0x00;
  75.     P4M1 = 0x00;   P4M0 = 0x00;
  76.     P5M1 = 0x00;   P5M0 = 0x00;
  77.     P6M1 = 0x00;   P6M0 = 0x00;
  78.     P7M1 = 0x00;   P7M0 = 0x00;
  79.    
  80.         P40=0;
  81.        
  82.     usb_init();                                     //USB CDC 接口配置
  83.   //Timer0_Init();
  84.    
  85.     EA = 1;
  86.     while (1)
  87.     {
  88.         if (bUsbOutReady)
  89.         {
  90. //            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  91.             printf_usb("1. Read Num:%d\n", OutNumber);
  92.             printf_usb("2. Read Num:%d\n", OutNumber);
  93.             printf_usb("3. Read Num:%d\n", OutNumber);
  94.             printf_usb("4. Read Num:%d\n", OutNumber);
  95.             
  96.             usb_OUT_done();
  97.         }
  98.             /*任务1:
  99.                 if(P32 == 0)
  100.                 {
  101.                         Delay20ms();
  102.                         if(P32 == 0)
  103.                         {
  104.                         while(P32 == 0);
  105.                         printf("按键按下次数\XFD:%d次\r\n",count++);
  106.                        
  107.                                
  108.                         }
  109.                 }
  110.              //任务2:灯按一下点亮三秒后熄灭。
  111.                 if(P32 == 0)
  112.                 {
  113.                         Delay20ms();
  114.                 if(P32 == 0)
  115.                 {
  116.                         P00 = 0;
  117.                         Timer0_Init();
  118.                         while(P32 == 0);
  119.                 }
  120.                
  121.                 }
  122.              //任务3:救护车灯控制器;按下报警按钮红蓝交替闪烁(LED0和LED1表示红灯和蓝灯),再按一下报警按钮,红蓝灯停止。
  123.                         if (P32 == 0)
  124.                         {
  125.                                 Delay20ms();
  126.                                 if (P32 == 0)
  127.                                 {
  128.                                         Run_State = !Run_State;
  129.                                         if (Run_State == 1 )
  130.                                         {
  131.                                           Timer0_Init();
  132.                                                
  133.                                         }
  134.                                         else
  135.                                         {
  136.                                                 TR0 = 0;
  137.                                                 P00 = 1;
  138.                                             P01 = 1;
  139.                                         }
  140.                                         while (P32 == 0);
  141.                                 }*/
  142.                           /*电子功德箱:
  143.                                 1.按下按钮1,串口显示“双倍功德时间”,再次按下显示“单倍功德时间”;
  144.                                 2.按下按钮2,双倍功德时间显示“功德+2 当前功德XXX”;
  145.                                 3.按下按钮3,单倍功德时间显示“功德+1 当前功德XXX”;
  146.                                 4.功德+1时,LED点亮1秒后熄灭表示功德成功点亮;
  147.                                 5.功德+2时,LED点亮2秒后熄灭表示功德成功点亮;
  148.                                 */
  149.                                 if (P32 == 0)
  150.                                 {
  151.                                         Delay20ms();
  152.                                         if (P32 == 0)
  153.                                         {
  154.                                                 bontten_State = !bontten_State;
  155.                                                 if( bontten_State == 1)
  156.                                                 {
  157.                                                         printf("双倍功德时间");
  158.                                                 }
  159.                                                 else
  160.                                                 {
  161.                                                         printf("单倍功德时间");
  162.                                                 }
  163.                                                 while(P32 == 0);
  164.                                                
  165.                                         }
  166.                                 }
  167.                                 if (P33 == 0)
  168.                                 {
  169.                                         Delay20ms();
  170.                                         if (P33 == 0)
  171.                                         {
  172.                                                 if(bontten_State ==1)
  173.                                                 {
  174.                                                         flag= flag+2;
  175.                                                         P00 = 0;
  176.                                                         Timer1_2sInit();               
  177.                                                 printf("功德+2 当前功德%d",flag);
  178.                                                 }
  179.                                                 else
  180.                                                 {
  181.                                                         flag= flag+1;
  182.                                                         P00 = 0;
  183.                                                         Timer0_1sInit();
  184.                                                 printf("功德+1 当前功德%d",flag);       
  185.                                                 }
  186.                                                 while(P33 == 0);
  187.                                         }
  188.                                 }
  189.                                
  190.                                
  191.                         }
  192.         }
  193. void Timer0_1sIsr(void) interrupt 1
  194. {
  195.     P00 = 1;
  196.         TR0 = 0;
  197. }
  198. void Timer1_2sIsr(void) interrupt 3
  199. {
  200.     P00 = 1;
  201.         TR0 = 0;
  202. }
复制代码



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:33
  • 最近打卡:2025-06-17 01:25:27
已绑定手机

1

主题

8

回帖

179

积分

注册会员

积分
179
发表于 2025-5-22 22:50:02 | 显示全部楼层
【第八集】 定时器周期性任务调度

截图202505261246284366.jpg
截图202505261247554773.jpg
截图202505261249223071.jpg
截图202505261249539619.jpg
截图202505261250162123.jpg
截图202505261250436765.jpg
截图202505261251148499.jpg

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 04:31 , Processed in 0.176090 second(s), 92 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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