BritneyS 发表于 2025-9-13 16:23
第二集(下):硬件及工具介绍 (Hardware & Tools Intro)
1. 核心硬件 (以STC8H8K64U为例)
<h3><strong>第二集(上):点亮第一颗LED (Light Up the 1st LED)</strong></h3>
<h4><strong>1. 核心概念</strong></h4>
<ul>
<li><strong>电路回路</strong>: 电流必须从电源正极(VCC)流出,经过器件(LED),再流回电源负极(GND),形成一个闭合回路,LED才会亮。</li>
<li><strong>限流电阻</strong>: LED的工作电流很小(通常5-20mA),必须串联一个电阻(常用220Ω-1kΩ)限制电流,防止烧毁LED或单片机IO口。</li>
</ul>
<h4><strong>2. 工作原理 (How it Works)</strong></h4>
<ul>
<li><strong>灌电流方式 (推荐)</strong>:
<ol>
<li>LED正极接VCC。</li>
<li>LED负极串联一个电阻后,接到单片机IO口(如P1.0)。</li>
<li>当程序设置 <code>P1.0 = 0</code>(输出低电平)时,电流从VCC流经LED和电阻,<strong>流入</strong>单片机P1.0引脚,形成回路,LED点亮。</li>
<li>设置 <code>P1.0 = 1</code>(输出高电平)时,引脚电压与VCC几乎相等,无电流,LED熄灭。</li>
</ol>
</li>
</ul>
<h4><strong>3. 关键要点 (Key Points)</strong></h4>
<ul>
<li><strong>“Hello World”</strong>: 这是嵌入式开发的第一个程序,验证了整个开发环境(软件、硬件、下载工具)的正确性。</li>
<li><strong>代码流程</strong>:
<ol>
<li>包含头文件。</li>
<li>定义LED引脚(如 <code>sbit LED = P1^0;</code>)。</li>
<li>主函数 <code>main()</code> 中是一个 <code>while(1)</code> 死循环,在循环内控制LED亮灭。</li>
</ol>
</li>
</ul>
BritneyS 发表于 2025-9-13 16:24
第二集(上):点亮第一颗LED (Light Up the 1st LED)
1. 核心概念
<h3><strong>第四集:USB不停电下载 (USB ISP Download)</strong></h3>
<h4><strong>1. 核心概念</strong></h4>
<ul>
<li><strong>ISP (In-System Programming)</strong>: <strong>在系统编程</strong>,无需将芯片从板子上取下,即可直接烧录程序。</li>
<li><strong>冷启动</strong>: 传统下载方式,需要先<strong>断电 -> 点击下载 -> 再上电</strong>才能完成。</li>
<li><strong>不停电下载</strong>: 单片机在<strong>保持供电</strong>的状态下,通过串口指令触发其内置的<strong>系统引导程序 (Bootloader)</strong> 来接收和烧写新程序。</li>
</ul>
<h4><strong>2. 工作原理 (How it Works)</strong></h4>
<ol>
<li><strong>硬件基础</strong>: 开发板上的 <strong>USB转串口芯片 (如CH340)</strong> 将电脑的USB信号转换为单片机可识别的UART(TXD, RXD)信号。</li>
<li><strong>握手过程</strong>:
<ul>
<li>电脑端软件(如STC-ISP)通过串口持续发送下载指令。</li>
<li>单片机上电或复位时,会先运行一小段固化的Bootloader程序“监听”串口。</li>
<li>一旦收到正确指令,Bootloader就会接管控制权,开始接收电脑发送的 <code>.hex</code>文件数据并将其写入程序存储器(Flash)中。</li>
<li>烧写完成后,单片机自动复位,开始执行<strong>新程序</strong>。</li>
</ul>
</li>
</ol>
<h4><strong>3. 关键要点 (Key Points)</strong></h4>
<ul>
<li><strong>驱动 (Driver)</strong>: 必须为USB转串口芯片安装正确的驱动程序,电脑才能识别出COM口。</li>
<li><strong>波特率 (Baud Rate)</strong>: 下载时需选择正确的波特率,太高可能导致下载失败。</li>
<li><strong>常见问题</strong>: 如果下载失败,检查顺序:<strong>驱动 -> COM口选择 -> 单片机供电 -> TXD/RXD线是否接反</strong>。</li>
</ul>
<h1>第五集:C语言基础 (C Language Basics)</h1>
<h4><strong>1. 核心概念</strong></h4>
<ul>
<li><strong>变量 (Variable)</strong>: 程序中数据的基本存储单元,需先声明其<strong>数据类型</strong>和<strong>名称</strong>后才能使用。</li>
<li><strong>函数 (Function)</strong>: 完成特定功能的代码块,是程序模块化的基础。<code>main()</code>函数是程序的唯一入口。</li>
<li><strong>控制语句</strong>: <code>if/else</code>(条件判断)、<code>for/while</code>(循环)是程序流程控制的基石。</li>
</ul>
<h4><strong>2. 51单片机C语言特色</strong></h4>
<ul>
<li><strong>特殊数据类型</strong>:
<ul>
<li><code>bit</code>: 位变量,可直接定义和赋值(0或1),用于标志位。</li>
<li><code>sbit</code>: 可位寻址,用于定义特殊功能寄存器中的某一位。例如:<code>sbit LED = P1^0;</code> 将变量 <code>LED</code>与P1口的第0位绑定。</li>
</ul>
</li>
<li><strong>内存区域指定</strong>: 使用 <code>data / idata / xdata</code> 等关键字可将变量存放在不同的存储区域,以优化速度和空间。</li>
<li><strong>中断服务函数</strong>: 使用 <code>void FunctionName() interrupt 1</code> 格式定义,<code>interrupt</code> 后的数字代表中断号。</li>
</ul>
<h4><strong>3. 关键要点 (Key Points)</strong></h4>
<ul>
<li><strong>指针是地址</strong>: 指针变量存储的是另一个变量的内存地址,通过 <code>*</code> 操作符可以访问该地址的数据。</li>
<li><strong>头文件 (#include)</strong>: 包含头文件(如 <code>#include <REG51.H></code>)是为了告诉编译器特殊功能寄存器(如P1, TMOD)的地址定义。</li>
</ul>
BritneyS 发表于 2025-9-13 16:28
第五集:C语言基础 (C Language Basics)
1. 核心概念
<h3><strong>第六集:I/O输入输出 (GPIO Input/Output)</strong></h3>
<h4><strong>1. 核心概念</strong></h4>
<ul>
<li><strong>GPIO (General Purpose Input/Output)</strong>: <strong>通用输入/输出端口</strong>,是MCU与外部设备(如LED、按键)交互的引脚。</li>
<li><strong>输出 (Output)</strong>: MCU通过引脚向外<strong>输出高电平(5V/3.3V)或低电平(0V)</strong>,用以驱动设备(如点亮LED)。</li>
<li><strong>输入 (Input)</strong>: MCU通过引脚<strong>检测外部电压的高低</strong>,用以读取状态(如判断按键是否按下)。</li>
</ul>
<h4><strong>2. 工作原理 (How it Works)</strong></h4>
<ul>
<li><strong>输出模式</strong>:
<ul>
<li><strong>写1</strong>:引脚输出高电平(VCC)。</li>
<li><strong>写0</strong>:引脚输出低电平(GND)。</li>
</ul>
</li>
<li><strong>输入模式</strong>:
<ul>
<li>要读取引脚前,<strong>必须先向该引脚写1</strong>,使其处于高阻态,才能正确读取外部信号。</li>
<li><strong>读1</strong>:表示检测到高电平。</li>
<li><strong>读0</strong>:表示检测到低电平。</li>
</ul>
</li>
</ul>
<h4><strong>3. 关键要点 (Key Points)</strong></h4>
<ul>
<li><strong>驱动能力</strong>:MCU引脚输出电流有限(通常<20mA),驱动大功率设备(如电机)需加三极管或驱动芯片。</li>
<li><strong>上拉电阻</strong>:为保证输入状态稳定,常在按键电路中接入上拉电阻(如10kΩ),避免引脚悬空时电平不确定。STC单片机IO口内部大多已有上拉电阻,可软件开启。</li>
<li><strong>按键消抖</strong>:机械按键按下时会产生抖动,会导致MCU误判为多次按下。解决方法有<strong>硬件消抖</strong>(加电容)或<strong>软件消抖</strong>(检测到按下后延时10-20ms再判断一次)。</li>
</ul>
BritneyS 发表于 2025-9-13 16:30
第六集:I/O输入输出 (GPIO Input/Output)
1. 核心概念
<h3><strong>第七集:定时器中断 (Timer Interrupt)</strong></h3>
<h4><strong>1. 核心概念</strong></h4>
<ul>
<li><strong>定时器 (Timer)</strong>: 本质是一个<strong>16位加法计数器</strong>,对内部系统脉冲计数,用于计时。</li>
<li><strong>计数器 (Counter)</strong>: 对外部引脚(如T0, T1)的脉冲信号计数,用于计数事件。</li>
<li><strong>中断 (Interrupt)</strong>: 一种机制。当特定事件(如定时器溢出)发生时,CPU暂停当前程序,转去执行另一段程序(中断服务函数),执行完毕后返回原程序继续执行。</li>
</ul>
<h4><strong>2. 工作原理 (How it Works)</strong></h4>
<ol>
<li><strong>初始化配置</strong>:
<ul>
<li>设置 <code>TMOD</code> 寄存器,选择<strong>工作模式</strong>(如16位自动重载的模式2最常用)。</li>
<li>计算并给 <code>THx</code> 和 <code>TLx</code> 赋<strong>初值</strong>,决定定时/计数多久。</li>
<li>开启中断:使能总中断 <code>EA=1</code> 和定时器中断 <code>ETx=1</code>。</li>
<li>启动定时器:<code>TRx=1</code>。</li>
</ul>
</li>
<li><strong>运行流程</strong>:
<ul>
<li>定时器启动后,<code>THx/TLx</code> 从初值开始<strong>每来一个脉冲就加1</strong>。</li>
<li>当加到最大值(65535)后,再加一次就会<strong>溢出</strong>,硬件自动将溢出标志 <code>TFx</code> 置为1。</li>
<li>CPU检测到 <code>TFx=1</code> 后,<strong>自动跳转</strong>到预先定义好的<strong>中断服务函数 (ISR)</strong> 中执行代码。</li>
<li>执行完毕后,CPU返回主程序断点处继续执行。</li>
</ul>
</li>
</ol>
<h4><strong>3. 关键要点 (Key Points)</strong></h4>
<ul>
<li><strong>初值计算</strong>:<code>初值 = 65536 - (所需时间 / 机器周期)</code>。例如,用12MHz晶振定时1ms,初值为 <code>65536 - 1000 = 64536 (0xFC18)</code>。</li>
<li><strong>自动重载 vs. 手动重载</strong>:模式2(8位自动重载)在中断后无需在代码中重新赋值,效率更高。</li>
<li><strong>应用</strong>:<strong>精确延时</strong>、<strong>生成PWM波</strong>(控制电机、LED亮度)、<strong>测量脉冲宽度</strong>、<strong>实现多任务调度</strong>。</li>
</ul>
学习AI8051单片机 第二集:硬件及工具 - 学习内容与心得体会
一、 学习内容
第二集的核心是“认识武器”和“搭建战场”,即深入了解我们将要使用的AI8051单片机硬件平台以及学会配置软件开发环境。
1. 硬件核心:AI8051开发板剖析
主控芯片:认识了AI8051U芯片的核心地位。了解了它是基于增强型8051内核,兼容传统8051指令集,但性能更强(1T设计),外设更丰富(如USB、PWM、ADC等)。
最小系统:理解了构成单片机工作的最基本电路:
电源电路:如何供电(USB口或外部电源)、稳压芯片的作用。
时钟电路:外部晶振的作用,以及芯片内部振荡器的选项。
复位电路:复位按钮和复位电路的原理,如何让程序重新开始执行。
关键外设与接口:
GPIO(通用输入输出端口):认识了板载的LED灯、按键,它们是学习最基础输入输出的载体。
下载接口:重点学习了USB-Type C接口不仅用于供电,还直接用于程序下载和调试,这得益于芯片内置的USB控制器,简化了传统需要额外下载器的步骤。
串口:了解了通过USB实现的虚拟串口(CDC),用于单片机与电脑之间的数据通信,为后续调试和数据显示打下基础。
ADC电位器:看到了板载的可调电阻,是后续学习模拟信号采集的硬件基础。
扩展排针:认识到所有IO口都引出,便于后续连接其他传感器和执行模块(如LCD屏、电机驱动等)。
2. 软件工具:开发环境搭建
编译器/集成开发环境(IDE):学习了如何安装和配置Keil μVision for C51(或SDCC等开源编译器)。理解了IDE是写代码、编译代码、下载代码的一体化平台。
器件包(Device Pack):特别重要的一步是学会在Keil中安装Nuvoton(新唐)或AI8051系列的器件支持包,这样才能在创建新项目时正确选择AI8051U芯片型号。
驱动程序:学会了在电脑(Windows)上安装开发板USB驱动程序,确保电脑能正确识别设备(表现为CDC串口设备和调试设备)。
下载与调试工具:学习了如何配置Keil,选择“Nu-Link Debugger”或类似的调试方式,将编译生成的`.hex`或`.axf`文件下载到开发板中,并进行在线调试(单步执行、查看变量、设置断点)。
3. 第一个程序:点亮LED
在理论基础上,完成了最简单的实践:
在IDE中创建新项目,选择正确的芯片型号。
编写一段简单的C51代码,包含头文件,定义LED连接的引脚,在`while(1)`循环中控制引脚高低电平。
配置项目选项,正确设置输出hex文件。
编译代码,解决可能出现的语法错误。
连接开发板,点击下载/调试按钮,将程序烧录至单片机。
观察实验现象:LED灯被成功点亮或闪烁。
二、 学习心得体会
1.“工欲善其事,必先利其器”:这一集的学习让我深刻体会到这句话的含义。之前觉得软件安装、环境配置很繁琐,总想跳过直奔写代码。但现在明白,稳定、正确的开发环境是一切实验成功的基础。一次性的耐心配置,能为后续节省大量排查莫名其妙错误的时间。
2.硬件是软件的舞台:学习单片机不能只盯着代码。通过认识硬件,我才真正理解代码中`#define LED P1^1`这类语句的实际意义。知道了LED是共阳还是共阳极,才能写出正确的驱动代码(输出0点亮还是输出1点亮)。硬件和软件的结合,让抽象的代码变成了看得见、摸得着的物理现象,非常有成就感。
3.USB直接下载是巨大的便利:与传统51单片机需要昂贵的专用编程器/下载器相比,AI8051U凭借其内置USB功能,实现了“一线连”(仅用一根USB线)完成供电、编程和调试,极大地降低了学习门槛和成本,对初学者极其友好。
4.调试能力是关键:学习使用IDE的调试功能(哪怕只是最简单的单步运行),其意义不亚于学习语法。它让我能“看到”程序是如何一步步执行的,变量是如何变化的,这对于理解程序逻辑和排查隐藏的bug至关重要。从最开始只会“下载-看现象-猜问题”,到现在开始尝试使用调试器,是一个重要的进步。
5.从成功点亮第一个LED开始:这个看似简单的“Hello World”实验,其激励作用是不可估量的。它完成了从无到有的突破,验证了整个学习链条(硬件连接、软件配置、代码编写、下载流程)的正确性,为后续学习更复杂的内容建立了强大的信心。
总结:第二集的学习是理论走向实践的关键一步。它不仅是知识的学习,更是一套标准工作流程的建立。通过这集内容,我不仅认识了手中的开发板,更重要的是搭建起了与单片机“对话”的桥梁,为后续深入编程、学习各种外设打下了坚实的基础。
强烈支持国产单片机!!!
VSCODE 中如何设置成32位开发AI8051u
孙霸天 发表于 2025-9-12 20:22
单片机串口简单应用的学习心得
在接触串口前,我对单片机的数据传输仅停留在 “通过 IO 口单次发送信号 ...
您好,打卡是要在学习打卡板块单独发帖的哈,不是在本帖下面回复哦
BritneyS 发表于 2025-9-13 16:30
第七集:定时器中断 (Timer Interrupt)
1. 核心概念
您好,打卡是要在学习打卡板块单独发帖的哈,不是在本帖下面回复哦