今天正式开启了单片机的学习之路,作为嵌入式领域的入门必修课,51单片机虽然架构古老,但胜在资料丰富、成本低,非常适合新手建立硬件思维。整理了一下今天的笔记,顺便聊聊踩过的坑,给同样刚入门的小伙伴做个参考。
一、先搞懂几个核心概念
刚开始学最容易混淆的就是各种缩写,今天先把基础名词捋清楚了:
-
MCU(微控制器):也就是我们常说的单片机,把CPU、RAM、ROM、定时器、GPIO、中断、UART这些功能全部集成在一块芯片里,成本低,专门用来做简单的控制场景,比如家电控制、传感器采集这类活儿。
-
CPU vs MCU:CPU是中央处理器,主要负责指令处理和数据运算;而MCU是"打包好的全家桶",更适合嵌入式场景。
-
ROM/RAM的区别:ROM是只读存储器,掉电数据不丢,用来存我们烧进去的程序、代码;RAM是随机存储器,掉电就清空,用来存程序运行时的变量。
-
处理器架构:今天接触的主要是8051(8位),另外常见的还有x86/x64(电脑端)、ARM(32位,现在智能设备用得多)。
二、51单片机的常见"选手"
市面上51内核的单片机型号很多,今天老师介绍了几个常用的:
-
Atmel的AT89C51:经典款,很多教材的例程都是基于它的。
-
飞利浦的P89V51:属于增强型,外设资源更丰富。
-
STC的STC89C51/52系列:国产性价比之王,烧录简单,现在入门用的最多,我们今天实操用的就是STC89C52RC。
三、时钟频率:单片机的"心跳"
晶振是单片机的心脏,我们今天用的开发板晶振是12.000MHz,也就是每秒振荡1200万次。
这里有个容易算错的知识点:时钟周期=1/晶振频率。比如12MHz的晶振,一个时钟周期就是1/12000000秒≈83ns。后面写延时函数、配置定时器的时候,这个参数非常重要,算错了时序全乱。
四、GPIO操作:从点灯开始
今天实操的第一个内容是IO口操作,51单片机的IO口一般分成P0、P1、P2、P3四组,每组8个引脚。
比如我们要给P2口的第一个引脚赋值高电平,代码可以写成P2 = 0x01;(十六进制0x01对应二进制00000001,就是把P2.0拉高)。
这里还学了位运算的小技巧:
-
置某一位为1:
P2 |= (1 << 0);(左移0位,对应第一个引脚) -
置某一位为0:
P2 &= ~(1 << 0);刚开始很容易搞混左移位数和引脚编号的对应关系,写错了灯就不亮,调试的时候拿万用表测电压才发现是位搞反了😂
五、踩坑小总结
-
第一次烧录程序的时候忘了选对单片机型号,STC89C52和STC89C51的ROM大小不一样,选错了直接烧录失败。
-
数码管的动态显示还没完全搞懂,视觉暂留的原理大概明白了,但延时函数的参数调整还需要多练,今天显示的闪烁问题还没解决,明天继续啃。
-
位运算的优先级容易搞混,最好多用括号明确运算顺序,不然debug能找半小时。
六、明日计划
明天打算把按键检测、数码管动态显示啃下来,再试着写一个按键控制LED亮灭的小程序。
如果有同样在学51的小伙伴,欢迎一起交流呀!