##江科大51单片机学习
什么是单片机???
- 单片机,英文名,Micro Controller Unit,简称MCU(tips:有人会简称它为CPU,但不是如此,CPU其实被集成在MCU中)。
- 内部集成了CPU,RAM,ROM,定时器,中断系统,通讯接口等一系列电脑的常用硬件功能。
- 单片机的任务时信息采集(依靠传感器),处理(依靠CPU)和硬件设备(例如电机,LED等)的控制。
- 单片机跟计算机相比,单片机是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低,体积小,结构简单,在生活和工业控制领域大有所用。
单片机的应用领域:
1.智能仪表 2.实时工控 3.通讯设备 4.导航系统 5.家用电器
在加上单片机之后,该设备由单片机控制,从而变的更加智能。
设备配置---普中51---实验板
- 单片机型号:STC89C52RC
- 所属系列为:51单片机系列
- 公司:STC公司
- 位数:8位(8bit)
- RAM(随机存储器):256字节 (性质:掉电就丢---工作中的工厂) 类似电脑的内存条
- ROM(只读存储器):64KB (Flash) 掉电不丢失---仓库 类似于电脑的硬盘
- 工作频率:12MHZ (后面软件控制程序会用到)
所用到的软件程序:
1.Kell uVision5---用于底层代码编写
2.STC-ISP ---用于代码安装以及调试
对于MCU(单片机)上的标签解读
可以看到它整个为STC89C52RC 40I-PDIP 40 后面的为出厂编码
- 89:为系列 STC 12T/6T 8051
- C(这是第一个C) 工作电压 : 5.5V~3.8V
- 52:8K字节程序空间及512字节RAM空间
- 40:工作频率可达到40MHZ(赫兹)
- I:工作温度范围: 工业级: -40摄氏度-85摄氏度
- PDIP:封装类型 双电直插 插针
- 40:管脚数为40个
大体结构图:
具体细节图:
相关细节配件
- 中央处理器(CPU):CPU是8051体系结构的核心,主要负责执行程序指令,数据处理,中断处理等任务。程序的编写使用到C/C++语言或是汇编语言,通过编译器(Keil uVision)生成二进制可执行文件,然后通过下载工具(STC-ISP)将程序下载到STC89C52RC中。
- RAM:256字节的随机存储器。用来存储程序中的变量和中间结果。编程时,需要定义变量将器存储到RAM中,以便程序可以读写变量的值。
- ROM:64KB的Flash存储器,可以用来存储程序代码和数据。在编程时,需要将程序代码和数据存储到Flash中,使得单片机可以读取执行。
- 定时器/计时器(Timer):具有3个定时器/计数器;可以用来产生定时中断PWM波形输出等功能。在编程时,需要对定时器/计数器进行初始化配置,并编写中断服务程序来处理定时中断。
- 串口(UART):具有一个串口,可以用来进行与外部设备的通信,编程时,需要对串口进行初始化配置,并编写发送和接收函数来进行数据传输。
- I/O口:可以用来连接各种外部设备,如LED,LCD,按键,传感器等。在编程时,需要对I/O口进行初始化配置,并编写I/O口的读写函数来控制外部设备的状态。
- 中断控制器(INT):具有中断控制器;可以用来管理各种中断源和中断服务程序;编程时,需要对中断控制器进行初始化配置,并编写中断服务程序来处理中断事件。
STC89C52系列单片机最小应用系统
对此有:VCC为正极 Gnd为负极---这个图我们是要去记忆的
我有一个记忆法:左为1,3往下增;右为 0,2--0下加,2上加。
在了解单片机的初始构造后,我们来进行第一次的编辑吧。
1-1 点亮一个LED:
首先,我们了解一下,何为LED?
LED是何物?
- 中文名:发光二级管
- 外文名:Light Emitting Diode--->即为LED
- 简称:LED
- 用途:照明,广告灯,指引灯,屏幕(优点:省电,亮度高)
(画的图有点丑哈)
这里我们可以看到,中间的为D1-D8的LED灯就为下图所示
在左边我们可以看到,有P20-P27这些引脚,它们其实与MCU对应处相连接。
在LED灯左边的为VCC---正极。
那么,为何我要讲这个呢?
因为,LED其实是一个会发光的二极管,那么正极接正极时,负极接负极时则LED便可以发光;那么如果我们将一处接反了,则LED不可能再发光了。是的,这个就是我们的理论基础。
对单片机来说,是TTL型即 5V为正极 高电频 0V 为负极 低电频。
MCU(单片机)里面有CPU(中央处理器)--->寄存器--->驱动器--->引脚
寄存器(8位)里面可以存储二进制数,1可以被驱动器为高电频,0可以被驱动器为低电频;寄存器控制驱动器,来增大驱动能力。那么,我们想要二极管发光,只需要在我们想要发光的二极管所对应的寄存器的对应空间来设置为0,即可让对应的二极管发光,其它的二极管设置为1即可为熄灭。
Tips:CPU通过控制配置寄存器,来控制硬件电路来执行我们想要完成的功能。
使用Keil uVision
首先在桌面创建一个文件夹称为Keilproject,然后再创建一个文件夹叫为1-1点亮一个LED。
具体细节,请观看Keil uVision的文件创建和使用
#include <REGX52.H>
//引入头文件,使得P2该寄存器被定义
void main()
{
P2=0xFE;// 1111 1110
while(1){
}
/*这里P2 的P大写,并且0x是16进制的前缀,不可省略。
FE 转化为二进制为 1111 1110 可以看到最后一个为0
它对应着第一个LED灯,可以亮,其他是熄灭的状态。
}
只要while中()的不为0,其他整数都为真。
当我们码完了这些行代码,便可以进行下一步保存文件。
- 第一步:点击那个类似魔法棒的东西。
- 第二步:点击OutPut图标,来到现在此页面。
- 第三步:勾选住Creat Hex File---是为了创建HEX-80
- 第四步:点击OK,便创建成功。
最后记得调试一下再下载给单片机。
TC-ISP
这个软件是SCT公司针对其产品开发使用的。
那么,我们来具体使用。
后面,单片机可以的LED区的第一个灯便开始闪亮。至此,我们的第一个MCU(单片机)的第一次开发便成功了。
(Tips:一定要确定好型号,否则,单片机与我们的主机握手失败,单片机不能下载代码)
1-2 LED灯闪烁
基本创建流程和上图相同,便不再赘述。
我们来讲讲具体实现,相对于自己去写一个时缓代码,STC-ISP友好地提供了相应的代码,我们就不用再自己去造轮子了。
那么,我们来具体看看吧。
注意:8051指令集必须是STC-Y1,应为使用的型号适配这个。
#include <REGX52.H>
#include <INTRINS.H> //引入该头文件,为的是nop()合法化
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(){
while(1){
P2=0xFE;
Delay500ms();
P2=0xFF;
Delay500ms();
}
}
最后,按照以上的顺序再次执行即可看到反复闪烁的LED灯了。
最后,感谢你的观看,谢谢。