学习使用的开发板:STC89C52RC/LE52RC
编程软件:Keil5
烧录软件:stc-isp
开发板实图:
文章目录
- 单片机介绍
- LED灯介绍
- 练习
- 创建第一个项目
- 点亮LED灯
- LED周期闪烁
单片机介绍
单片机,英文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,8V52
如图表示8K字节程序空间和512字节RAM空间35
表示工作频率可达35MHzI
表示工作温度范围:工业级 -40~85DIP
表示封装类型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
创建第一个项目
首先介绍如何创建第一个程序
- 点击工具栏的"Project",选择新建项目
- 选择项目目录,输入项目名称
- 选择单片机类型。因为STC是中国公司,该软件并没有兼容,但是其中的
AT89C52
和STC89C52
几乎是一样的,我们可以选其作为替代
- 选择是否生成
STARTUP.A51文件
,目前选择不生成
STARTUP.A51 文件通常是用于8051系列微控制器的汇编启动代码。它的主要功能包括:
- 初始化堆栈:设置堆栈指针,以便程序在执行过程中可以正确地进行函数调用和返回。
- 全局变量初始化:在主程序开始运行之前,对静态和全局变量进行初始化,确保它们具有正确的初始值。
- 中断向量表:设置中断服务例程的入口地址,确保在发生中断时能够正确响应。
- 调用主函数:完成所有初始化后,跳转到主程序的入口点,开始执行主逻辑。
如果不添加"startup.a51"文件,编译器就会自动加入一段初始化内存以及堆栈等的代码,这时的内存初始化部分你就无法去控制了,当然这在大部分情况下没什么关系。但是如果你想你的程序在复位后,内存里面的信息依然还保存着(所说的“热复位”),那么你就需要添加该启动文件,并且去里面修改内存初始化部分,不要初始化你需要保留的部分内存。
- 添加文件
- 选择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
- 首先我们要生成项目,因为烧录需要
.hex文件
,Keil5生成目标文件默认不会生成.hex文件,需要在"控制生成文件"中设置
- 设置生成
.hex
文件
3. 点击“生成项目”——Build
4. 打开STC-ISP
- 首先选择“单片机型号”!!!!如果没有选择匹配,后续点击“下载/编程”后会一直显示“正在检测目标单片机···”
- 其次选择串口号,一般通过USB接口连接开发板和电脑时,会自动匹配(前提是驱动已经下载好)。也可以手动查看。设置 -> 设备管理器 -> 端口(
需要连接开发板才会显示
)
- 选择程序文件,该
Project.hex
就是Keil5点击Build生成的
- 点击下载/编程(保证已连接开发板和电脑),重启开发板——按下左下角的按键
先下载,再重启
,STC-ISP
显示如下信息即为成功
如果一直显示"正在检测目标单片机···",大概率是单片机型号不匹配!如遇到其他问题,欢迎在评论区讨论
D1成功点亮
LED周期闪烁
要想实现周期闪烁,可以在亮起后等一段时间再熄灭,然后再等一段时间再亮起
即指定的P2先为0,等一段时间再为1,再等一段时间为0
STC-ISP
不仅可以烧录程序,还可以生成一些方法
- 选择“软件延时计算器”
- 注意选择系统频率,
STC89C52
和STC89C52RC
都是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();//等待}
}
以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。