找回密码
 立即注册
查看: 636|回复: 24

学习心得

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-2 17:29:38 | 显示全部楼层 |阅读模式
8051用了很多年,从很早时期的汇编语言就开始接触,那时的片内资源很少,要用专门的仿真器仿真做仿真,甚至在仿真机上敲过55,f6之类的代码,那时总是为了节省内存而殚精竭虑,程序是优化再优化,调试再调试、效率极低,这是我遇到的第一个痛点。

偶然的机会接触到C51,工作效率一下子提升了许多,但接下来又遇到新的问题,芯片要用专门的编程器来下载程序,每开发一个程序,都要把芯片从插座里拔出来,用编程器下载好再放回到插座上,有时甚至要拔下来几十上百次,芯片的管腿稍不留神就会折弯,甚至折断,而且,新出的单片机都是贴片的,根本没有办法取下来,这样就要错过很多新的芯片,这是我遇到的第二个痛点。

这个时候遇到了STC,下载程序只要断一下电就能下载了,于是就把所有的系统全部换成STC。但用着用着,又遇到STC的资源不够的问题,内存太小,资源不够丰富,好几次都用到了极限,再增加一个int变量就会溢出的情况,好不容易通过优化才解决了问题。在做另一个项目的时候,单片机里的计数器,中断也都使用殆尽,为了解决问题差一点就准备用双机来做了,好在也是通过优化完成了项目。但这个51系统资源少的问题成了一个心病,这是我遇到的第三个痛点。

同时在开发的过程中,也常常遇到I2C,SPI等,遇到ADDA问题,遇到图像采集问题,也遇到串口速度太慢的问题,正寻思下一步要不要换STM32的时候,得知STC有了AI8051U,它的管腿与8051几乎全部兼容,原来做的PCB板都能继续用,不断电就可下载程序,而且资源丰富,似乎可以解决我前面遇到的所有痛点,所以,不再犹豫,立即行动,加入试用行列!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-3 13:56:19 | 显示全部楼层
今天,到https://www.keil.com/download/product/下载了C51和C251程序,但在安装的过程中出了一点问题,C51安装成功,但C251没能成功。

经过论坛大神的指点,重新安装,最终取得了成功。

事后回顾,发现安装及第一次使用,都要用管理员身份进行操作,不知这是不是关键因素?另外Keygen生成lic的时候要注意选择C51或C251。

总之,现在安装成功了,如果其他人有安装不成功的情况,可以参考一下上面两个注意点。

还有,这次有信心来使用AI8051U,是因为遇到问题可以有论坛大神及时予以解答,免除了前面凡事都自己琢磨的困扰,感觉STC的服务非常好,特别适合开发者。

前面也遇到过一家产品很牛的公司,遇到问题直接给一个光盘,说所有的开发问题这里面都有答案,一个小问题就要去研读一整张光盘,这对我们普通开发者而言,也太恐怖了,最后只能放弃,相信这个过程很多开发者都遇到过。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:44
  • 最近打卡:2025-10-10 14:30:18

16

主题

133

回帖

1168

积分

版主

积分
1168
发表于 2025-9-3 16:55:12 | 显示全部楼层
推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-4 05:57:42 | 显示全部楼层
今天看了第一集 序言

开篇的“哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前”说的真是太好了。自己前面一直用的是8位机,32位机只是心中的一个梦想,不敢轻易尝试,我知道一个新的系统在开发过程中必定会遇到各种问题,如果都要从看手册开始,一步一步地进行,效率肯定不高,过程一定是极为辛苦的,这样的开发方式也是不适合AI时代的。现在好了,我们可以背靠强大的STC公司,有什么问题都可以找到优秀的工程师做技术支持,我想,这一次我们不用遍体鳞伤就可以实现8位向32位的跨越了。当然,这些都离不开STC公司长久以来不断的积极进取,不断地开发新的芯片以满足市场的需求,而且,技术支持服务做的特别好,愿STC公司的未来长盛不衰,我们也能跟着不断向前向前,一直向前。

曾经和人讨论过用什么工具的问题,当时我有一个观点就是尽量采用大公司的产品,外面市场竞争这么激烈,小公司说没就没了,后续的供货及服务肯定跟不上。这个观点在现在同样适用,看STC公司这么多年的发展,产品越来越多,性能越来越强,服务越来越好,我们就有足够的信心,靠着STC公司这颗大树,快速进入AI时代。

今天看到AI8051U的几个介绍,
1.屏幕显示和视频播放(flash编程器)
2.IIS录放音
3.PWM_DMA
4.频谱分析仪(上位机)
5.手写计算器
6.QSPI,PWM移相,硬件乘除,单精度浮点

单个芯片就能完成这些功能,真是强悍!希望通过后面的学习,进一步加深理解,尽早的用到自己的项目和产品中。

同时也见到了USB不停电的下载方式,这个功能确实很牛。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-5 09:51:04 | 显示全部楼层
Ai8051U学习笔记:

Ai8051U-LQFP48 ,RMB2.3
USB型32位8051,1T8051,支持32位8051指令集和8位8051指令集,比普通32位机强
1,Ai8051U有TFPU@120MHz, 算力比他强, uS级硬件三角函数/浮点运算器;
2,Ai8051U的抗干扰比他强;
3,Ai8051U的内部复位是专业级的复位电路,彻底省外部复位;
4,Ai8051U的内部时钟完全满足串口通信要求,4组串口;
5,Ai8051U-LQFP48有 QSPI, i8080/M6800-TFT 接口;
6,Ai8051U的PWM支持硬件移相@120MHz
7,Ai8051U是 34K SRAM, DMA 支持 外设直接到外设,P2P
8,Ai8051U是 自带硬件USB, 1个芯片就能直接USB连接电脑仿真/下载,全球唯一

第二集 硬件及工具介绍 学习笔记

Ai8051实验箱

连接线,短接帽

正面:两个USB接口,USB转双串口,TF卡插座,示波器输入,波形调整,立体声输出,话筒,显示屏接口,流水灯,数码管,TFT彩屏,掉电电压调节,红外接收,红外发射,矩阵键盘,ADC键盘,T0T1按键,中断0中断1按键,复位键,电源键,Flash芯片,LCD参编工调节,RTC电池

背面:无源晶振,24C02,DS18B20,蜂鸣器,SP3485,USB转双串口,TP2604S等

软件:KEILC51,KEILC251,ISP下载软件,头文件,中断拓展插件,代码包和手册

演示:选择芯片,插数据线,P32置0,上电,HID1设备通讯,P0口跑马灯,32位HEX,8位HEX,主频24MHz,下载,提示操作成功,此时就可以看到结果了

实验箱说明书:
新建项目,选择芯片,加入新的item,Alt+F7,在Option中勾选HEX,确认,按F7编译。
使用USB Link1D仿真实验箱:连接电脑,连接开发板,在仿真设置里选芯片,把芯片和头文件加入KEIL中,确定,注意频率一致,将所选目标单片机设置为仿真芯片,下载成功后,重上电即可仿真。在DEBUG页面,选251,在setting中选择串口/USB/SWD,确定。在Utility按1-8,点Download或F8下载,然后点Debug或Ctrl+F5,开始仿真。可复位,全速,单步,断点等,断点最多20个。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-8 06:55:14 | 显示全部楼层
第三集 点亮第一颗LED 学习笔记

新建工程:创建空工程(6.5章节),添加头文件(ISP生成,保存过来),输入代码并编译

KeilC251的使用
Configuration: C/C++ 选4个缩进,Encoding选GB2312
Option:Target选XSmall和Large,Output选HEX-80

ISP中用到
头文件:选AI8051U,Keil C格式另存到工作目录
I/O口配置工具:可以批量地定义IO口,然后复制到自己的程序中
封装脚位:随时可查管腿定义
范例程序:可以参考和借鉴

这些功能真是太方便了!

截图202509080657156908.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-9 00:29:30 | 显示全部楼层
第四集 USB不停电下载 学习笔记

原来要先手动按一下,使得P32置0,端口出现HID1,才可以下载

现在在“收到用户命令后复位一ISP监控程序区”这个页面,把三个都勾上,先下载一次,后面可以反复下载了。

1、  实验对比比演示
2、  下载所需文件(STC官网-软件工具-库函数-USB库文件)
3、  移植关键部分到工程
3.1、添加头文件
3.2、USB初始化函数(lib+.h库实现)
3.3、命令参数
3.4、打开P_SW2寄存器和IE2寄存器(只打开一个位)

CDC(稍微好用一点),HID,
选查询方式,把头文件及库文件拷过来

因下载的文件与老师的不大一样,且手边暂时没有硬件硬件可试,故具体的不断电下载情况后面再试

截图202509091925049679.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-9 22:18:11 | 显示全部楼层
第五集 C语言基础 学习笔记

一、C语言USB-CD串口之printf函数的实现

1、 打开USB库中的PRINTF_HID宏定义(去掉//)

2、 理解PRINTF的函数原型的定义
      普通字符原封不动,注意%s等
      打开ISP,USB-CDC/串口模式,三个勾都选,主频24M,
      下载后,增加了一个COM8 CDC,速度选择多了,本质上是USB
      更多设置按钮,把发送数据的勾去掉,发送数据就不显示了,其它的另行试验

二、数的进制:2进制,10进制,16进制

三、数据的基本类型

四、C语言常用运算符


截图202509092221154148.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-10 03:09:23 | 显示全部楼层
第六集 I/O输入输出 学习笔记

一、 什么是GPIO
四种模式:
1、 准双向口:传统51管腿,弱上拉,可吸入20mA,管腿可接330和开关到地
2、 推挽输出:强上拉,可输出20mA,要限流
3、 高阻输入:电流不入也不出
4、 开漏模式:断开内部上拉
判断高低还要考虑施密特触发器的设置,3.3V电源的判断线在1V左右

二、按键输入检测
任务1:按P32按钮灯亮,放开则灯灭
任务2:按P32按钮灯灭,放开则灯亮
任务3:按一下灯亮,再按灯灭,循环

三、课后小练
任务4:按P32按钮灯亮,按P33按钮灯灭
任务5:按P32按钮按一次一个灯亮,再按一次2个灯亮,直到所有的灯亮(变量+加法和乘法)

        //任务4:按P32按钮灯亮,按P33按钮灯灭

        if(P32 == 0 && P33 == 1)
        {
            Delay20ms();                //延时20ms消抖
            if(P32 == 0)
            {
                state = 0;
                P00 = state;
                printf("state:%d", (int)state);
                while(P32==0);
            }
        }

        else if(P32 == 1 && P33 == 0)
        {
            Delay20ms();                //延时20ms消抖
            if(P33 == 0)
            {
                state = 1;
                P00 = state;
                printf("state:%d", (int)state);
                while(P33==0);
            }
        }

        //任务5:按P32按钮按一次一个灯亮,再按一次2个灯亮,直到所有的灯亮(变量+加法和乘法)
        
        if(P32 == 0)
        {
            Delay20ms();                //延时20ms消抖
            if(P32 == 0)
            {
                switch(state)            //state初始值为0
                {
                    case 0:
                        P00 = 0;
                        break;
                    case 1:
                        P00 = P01 = 0;
                        break;
                    case 2:
                        P00 = P01 = P02 = 0;
                        break;
                    case 3:
                        P00 = P01 = P02 = P03 = 0;
                        break;
                    case 4:
                        P00 = P01 = P02 = P03 = P04 = 0;
                        break;
                    case 5:
                        P00 = P01 = P02 = P03 = P04 = P05 = 0;
                        break;
                    case 6:
                        P00 = P01 = P02 = P03 = P04 = P05 = P06 = 0;
                        break;
                    case 7:
                        P00 = P01 = P02 = P03 = P04 = P05 = P06 = P07 = 0;
                        break;
                    default:
                        break;                    
                }
               
                state++;
                printf("state:%d", (int)state);
                while(P32==0);
            }
        }   



截图202509100309207241.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-10-15 18:27:22
已绑定手机

1

主题

26

回帖

255

积分

中级会员

积分
255
发表于 2025-9-11 12:57:32 | 显示全部楼层
第七集 定时器中断 学习笔记

一、定时器的介绍
      定时器的作用
1、 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作

2、 替代长时间的Delay,提高程序的运行效率和处理速度(可打断主循环)


二、定时器的应用
任务1:LED灯三秒取反的一次,这期间任意时刻按下按钮,串口打印按键次数。
思路:主程序中做个按键检测,并打印输出按键次数
          开中断,TR0置1

          在3秒的中断程序中,做个LED=!LED


定时器模式,TM0PS,1T或12T,C/T,GATE,TR0,TF0,

三、函数的定义、声明、调用
返回值类型 函数名(入口参数)
{
        //函数体

        //函数执行的代码

        Return返回值;

}

任务2:灯按一下点亮,三秒后熄灭
思路:在主程序中做个按键检测,亮灯,
          开3秒的定时中断,TR0置1,

          在3秒的定时中断中把灯关掉,TR0置0


任务3:救护车控制器,按下报警按钮,红黄交替闪烁,再按一下报警按钮,红蓝灯关闭
思路:主程序中做个按键检测,红亮蓝灭
         开0.5秒定时中断,TR0置1,

         再接一个按键检测,红灭蓝灭,并把TR0置0

         在0.5秒的定时中断中把两个灯反转即可


课后思考:定时器一次只能定时一次,如果有多个定时任务怎么办?



截图202509111257286550.jpg
截图202509111327495004.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 05:38 , Processed in 0.129043 second(s), 95 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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