学习使用的开发板:STC89C52RC/LE52RC
编程软件:Keil5
烧录软件:stc-isp

开发板实图:
在这里插入图片描述

单片机介绍

单片机,英文Micro Controller Unit,简称MCU
内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能
单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制
单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用
同时,学习使用单片机是了解计算机原理与结构的最佳选择

基础信息
在这里插入图片描述

  • RAM(Random Access Memory):随机存取存储器,也叫主存/内存,是与CPU直接交换数据的内部存储器。断电数据失效
  • ROM(Read-Only Memory):只读存储器,常用于硬盘,断电数据也不会失效

在这里插入图片描述
例:STC89C52 35I-DIP40

  • STC是一家公司的简称
  • 8表示该芯片为8051内核芯片
  • 9表示内部含 FlashE²PROM 寄存器。还有如80C51中0表示内部含有 Mask Rom(掩模ROM)存储器;又如87C51中7表示内部含有EPROM存储器(紫外线可擦出除ROM)。
  • C表示工作电压为5.5V~3,8V
  • 52如图表示8K字节程序空间和512字节RAM空间
  • 35表示工作频率可达35MHz
  • I表示工作温度范围:工业级 -40~85
  • DIP表示封装类型
  • 40表示管脚数,即两侧突出的引脚

封装类型,就是外层的塑料壳
在这里插入图片描述

管脚
在这里插入图片描述
其中,Vcc表示正极,Gnd表示负极

LED灯介绍

如图,右侧用红线框出来的区域是LED,第一排为LED,第二排的RP9和RP7是两个电阻,用于限流,防止电压过高,烧坏LED
在这里插入图片描述
仔细看电阻上的字102,此处表示电阻为1000Ω = 1K

转换方式为:10 * 10 ^ 2 = 1000Ω = 1K
若为1003,则为 100 * 10 ^ 3 = 100000Ω = 100K
若为473,则为 47 * 10 ^ 3 = 47000Ω = 47K
若为680,则为 68 * 10 ^ 1 = 68Ω


在这里插入图片描述
注意点:

  • 图标中,类似箭头的图标是从正极指向负极,电路中要正极接正极,负极接负极才能通电
  • 实物图中,管中较细的部分是正极,较粗的部分是负极
  • 引脚更长的为正极,引脚较短的为负极

原理图如下:
在这里插入图片描述
注意点:

  • VCC代表电源正极,也正对接着LED的正极部分
  • 右侧的P20、P21为I/O口,表示接线,在其他部件中同样可以看到,相同编号表示线路连接
  • 因为该单片机位数为8位,所以一组线位8条

在这里插入图片描述

  • 在单片机核心中,我们可以看到P2系列的I/O口,这表明单片机和LED是线路连通的
  • 左下角的GND表示负极,右侧那个多个竖线的图标也表示负极,也可以表示接地

控制灯亮的原理
在这里插入图片描述

  • CPU往寄存器中写入0/1,然后通过驱动器形成电信号,形成高低电频。0为低电频,1为高电频
  • 因为LED灯一端已经接了VCC,即正极,另一端接了P2系列的I/O串口
  • 所以只要让P2的某一位为0,负极,那么电路就会被连通。相反为1则电路不会连通

练习

编程软件使用Keil5

创建第一个项目

首先介绍如何创建第一个程序

  1. 点击工具栏的"Project",选择新建项目
    在这里插入图片描述
  2. 选择项目目录,输入项目名称
    在这里插入图片描述
  3. 选择单片机类型。因为STC是中国公司,该软件并没有兼容,但是其中的AT89C52STC89C52几乎是一样的,我们可以选其作为替代
    在这里插入图片描述
  4. 选择是否生成STARTUP.A51文件,目前选择不生成
    在这里插入图片描述

STARTUP.A51 文件通常是用于8051系列微控制器的汇编启动代码。它的主要功能包括:

  • 初始化堆栈:设置堆栈指针,以便程序在执行过程中可以正确地进行函数调用和返回。
  • 全局变量初始化:在主程序开始运行之前,对静态和全局变量进行初始化,确保它们具有正确的初始值。
  • 中断向量表:设置中断服务例程的入口地址,确保在发生中断时能够正确响应。
  • 调用主函数:完成所有初始化后,跳转到主程序的入口点,开始执行主逻辑。

如果不添加"startup.a51"文件,编译器就会自动加入一段初始化内存以及堆栈等的代码,这时的内存初始化部分你就无法去控制了,当然这在大部分情况下没什么关系。但是如果你想你的程序在复位后,内存里面的信息依然还保存着(所说的“热复位”),那么你就需要添加该启动文件,并且去里面修改内存初始化部分,不要初始化你需要保留的部分内存。

  1. 添加文件
    在这里插入图片描述
  2. 选择C语言文件
    在这里插入图片描述

如此就可以将代码编写在该文件中

点亮LED灯

上面我们说到,只要让LED灯对应的串口为0,就可以让灯亮,为1则让灯熄灭
为此,我们需要能操作P2系列的串口。
<REGX52.H>函数中,就包含了P2串口的地址,CPU可以通过地址访问该串口。
可以通过右键快速添加该头文件
在这里插入图片描述

8位操作数,对应8个LED灯,操作P2是一次性操作8个灯
在这里插入图片描述
代码如下:

//让灯亮
void test1()
{
	//P2寄存器连接LED的负极,设置二进制位为0则为亮灯
	P2 = 0xFE;//1111 1110
}

int main()
{
	test1();
	return 0;
}

代码编写完后,接下来就是要将代码下载到开发板上,这个过程称之为烧录
使用的烧录软件是STC-ISP

  1. 首先我们要生成项目,因为烧录需要.hex文件,Keil5生成目标文件默认不会生成.hex文件,需要在"控制生成文件"中设置
    在这里插入图片描述
  2. 设置生成.hex文件

在这里插入图片描述
3. 点击“生成项目”——Build
4. 打开STC-ISP
在这里插入图片描述

  • 首先选择“单片机型号”!!!!如果没有选择匹配,后续点击“下载/编程”后会一直显示“正在检测目标单片机···”
    在这里插入图片描述
  • 其次选择串口号,一般通过USB接口连接开发板和电脑时,会自动匹配(前提是驱动已经下载好)。也可以手动查看。设置 -> 设备管理器 -> 端口(需要连接开发板才会显示)
    在这里插入图片描述
  • 选择程序文件,该Project.hex就是Keil5点击Build生成的
    在这里插入图片描述
  • 点击下载/编程(保证已连接开发板和电脑),重启开发板——按下左下角的按键
    在这里插入图片描述
    先下载,再重启STC-ISP显示如下信息即为成功
    在这里插入图片描述
    如果一直显示"正在检测目标单片机···",大概率是单片机型号不匹配!如遇到其他问题,欢迎在评论区讨论
    D1成功点亮
    在这里插入图片描述

LED周期闪烁

要想实现周期闪烁,可以在亮起后等一段时间再熄灭,然后再等一段时间再亮起
即指定的P2先为0,等一段时间再为1,再等一段时间为0

STC-ISP不仅可以烧录程序,还可以生成一些方法
在这里插入图片描述

  • 选择“软件延时计算器”
  • 注意选择系统频率,STC89C52STC89C52RC都是12MHz
  • 定时长度单位有毫秒和微秒
  • 指令集一定要选对,右侧有显示该指令集适用于哪些单片机
  • 最后生成C代码,复制
  • 如图是生成延迟1ms的方法

PS:其他方法可能包含_nop_()方法,该方法是个空函数,也是用来延迟一定时间,使用该方法需要包含<INTRINS.H>这个头文件

我们可以延迟500ms,代码如下:

//等待500ms
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 test2()
{
	while(1)
	{
		P2 = 0xFE;//D1亮灯
		Delay500ms();//等待500毫秒,0.5秒
		P2 = 0xFF;//D1灭灯
		Delay500ms();//等待
	}
}

PS:有两个头文件<REG52.H><REGX52.H>,两者都包含P2等的地址信息,但后者还包含了P2_0、P2_1…允许我们操控单个串口
在这里插入图片描述
周期闪烁的代码可以改成如下代码:

void test2()
{
	while(1)
	{
		P2_0 = 0;//单独控制
		Delay500ms();//等待500毫秒,0.5秒
		P2_0 = 1;//灭灯
		Delay500ms();//等待
	}
}

以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐