1、实物图
2、原理图
3、介绍
3.1、主芯片
STC89C52是STC公司生产的一种低功耗、高性能8位微控制器
器件参数:
1、增强型8051单片机,指令代码完全兼容传统8051
2、工作电压:5.5V~3.3V
3、工作频率范围:0~40MHz,实际工作频率可达48MHz
4、用户应用程序空间为8K字节(程序空间)
5、片上集成512 字节RAM(变量或寄存器空间)
6、通用I/O 口(32 个),所有I/O口默认状态都是高电平,复位后为:P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
7、ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过USB-TTL模块连接串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成。
8、具有EEPROM 功能,总大小为4k,共8个扇区,每个扇区512个字节
9、共3 个16 位定时器/计数器。即定时器T0、T1、T2
10、外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可由外部中断低电平触发中断方式唤醒
11、通用异步串行口(UART),还可用定时器软件实现多个UART
12、工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)
VCC | 电源正极 |
GND | 电源负极 |
RST | 复位脚 |
XTAL1 | 内部时钟电路反相放大器输入端,接外部晶振的一个引脚。当直接使用外部时钟源时,此引脚是外部时钟源的输入端。 |
XTAL2 | 内部时钟电路反相放大器的输出端,接外部晶振的另一端。当直接使用外部时钟源时,此引脚可浮空,此时XTAL2实际将XTAL1输入的时钟进行输出。 |
EA/VPP | 内外存储器选择引脚 |
ALE/PROG | 地址锁存允许信号输出引脚/编程脉冲输入引脚 |
PSEN | 外部程序存储器选通信号输出引脚 |
3.2、复位电路
一、复位电路的用途
单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
二、复位电路的工作原理
在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢?
在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。
开机的时候为什么会复位:
在电路图中,电容的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是T=RC=10K*10UF=0.1S。
也就是说在单片机启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。
按键按下的时候为什么会复位:
在单片机启动0.1S后,电容C两端的电压持续充电为5V,这时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。
总结:
1、复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。
2、按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。
3.3、晶振电路
早期的单片机(比如经典的51单片机)系统,外接晶振是必须的,因为单片机的运行必须依赖于稳定的时钟脉冲。但是随着技术的发展,现在很多单片机都已经集成了内部时钟,所以在一般的应用场合,可以不用外接晶振电路了。不过由于内部时钟容易受外界干扰,所以在要求严格的场合,外接晶振电路还是很有必要的。
晶振介绍:
晶振有很多种,常用的有11.0592M、12M等。
选取11.0592M晶振:
使用11.0592MHz的晶振可以产生9600的波特率
波特率 = (2SMOD/32)* T1溢出率
溢出率 = (计算速率)/(256 – TH1初值)
= (fose / 12) / (256 – TH1初值)
注:机器周期 = 12个时钟周期
最终波特率 =(2SMOD/32)* (fose / 12) / (256 – TH1初值)
如果波特率=9600,SMOD=0,fose=11059200,则最终TH1=253=0Xfd,是一个整数
如果fose=12000000,要得到9600的波特率,则TH1=252.745,不是一个整数,所以不能产生标准的9600波特率。
选取12M晶振:
单片机工作时,是一条一条地从ROM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。一个机器周期包括12个时钟周期。如果一个单片机选择了12MHZ晶振,它的时钟周期是1/12us,它的一个机器周期是12x(1/12)us,也就是1US。机器周期不仅对于指令执行有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。例如一个单片机选择了12MHZ晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。
电容介绍:
这两个电容一般称为“匹配电容”或者“负载电容”、“谐振电容”。晶振电路中加这两个电容是为了满足谐振条件。一般外接电容,是为了使晶振两端的等效电容等于或接近负载电容。只有连接合适的电容才能满足晶振的起振要求,晶振才能正常工作。
负载电容无法满足的话一般会使晶体频率产生偏差,严重的话晶体无法起振。电路设计中要尽量满足晶体的负载电容需求,从而使晶体工作在最佳状态。负载电容计算公式如下:
CL = C1*C2 / (C1+C2) + CS
CL为晶振的负载电容值,一般通过查询晶振的数据手册获得,一般15-30pF。CS为电路板的寄生电容,一般取 3~5pF,取C1 = C2,那么公式可以简化成如下:
CL = C1 / 2 + CS
一般情况下,增大负载电容的值会使振荡频率下降,减小负载电容的值,会使振荡频率上升。
3.4、电源
一个type-c的插座,一个自锁按键、一个220uF的电解电容、一个1k的限流电阻和一个LED灯
这个220uF的电解电容选取:
为什么要:一是电源本身就有纹波,多加一个滤波电容更好,二是电源线有电阻,负载电流的变化会在该电阻上形成不同的电压降,进一步加大了电压的波动,因此每块电路板上都有电源滤波电容。负载电流越大,滤波电容容量也越大。至于选取多大的电容,一般是100-220uF。
灯和限流电阻:当供电正常并且自锁按键按下时,灯会点亮,表明板子处于供电状态。
3.5、P0口的上拉电阻:
P0口作为I/O口输出的时候时 输出低电平为0 输出高电平为高组态(并非5V,相当于
悬空状态)。也就是说P0 口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。 由于P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。
- 一般51单片机的P0口在作为地址/数据复用时不接上拉电阻。
- 作为一般的I/O口时用时,由于内部没有上拉电阻,故要接上上拉电阻!!
- 当p0口用来驱动PNP管子的时候,就不需要上拉电阻,因为此时的低电平有效;
- 当P0口用来驱动NPN管子的时候,就需要上拉电阻的,因为此时只有当P0为1时候,才能够使后级端导通。
3.6、下载口
使用USB—TTL模块进行下载,使用专门的下载工具stc-isp