单片机最小系统也称为单片机最小应用系统,是指使用最少的原件组成单片机可以工作的系统。
单片机最小系统的三要素为:电源、晶振和复位电路。
任何电子设备都需要供电,目前主流单片机的电源分别为5V和3.3V这两个标准。
选用STC89C52,它需要5V的供电系统,上图是使用USB口输出的5V直流直接供电的,从图中可以看出,供电电路在40引脚和20引脚的位置上,40引脚接的是+5V,通常也称为VCC或VDD,代表电源正极,20引脚接GND,代表电源负极。
晶振,又叫晶体振荡器,从这个名字上就可以看出,它注定一生都要不停的振荡。它起到的作用是为单片机系统提供基准时钟信号,类似于部队训练喊口号的人,单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的,可以说晶振就是单片机的“心脏”。STC89C52单片机的18引脚和19引脚是晶振引脚,上图接了一个11.0592MHz的晶振(即每秒振荡11059200次),外加两个30pF的电容,电容的作用是帮助晶振起振,并维持振荡信号的稳定。
单片机的复位一般分为四种:外部RST复位,软件复位,掉电复位/上电复位,看门狗复位。
在1.中的图中我们可以看到在图的左边是一个复位电路,接到了单片机的9引脚RST(Reset)复位引脚上。这个复位电路是从外部向RST引脚施加一定宽度的复位脉冲,从而实现单片机的复位。将RST复位引脚拉高并维持24个时钟加10us后,单片机会进入复位状态,将RST复位引脚拉回低电平后,单片机结束复位状态并从用户程序区的0000H处重新开始工作。
用户的应用程序在运行过程当中,有时会有特殊需求,需要实现单片机系统软复位(热启动之一),传统的8051单片机由于硬件上未支持此功能,用户必须用软件模拟实现,实现起来较麻烦。现STC新推出的增强型8051根据客户的要求增加了ISP CONTR特殊功能寄存器,实现了此功能。用户只需简单的控制ISP_CONTR特殊功能寄存器的其中两位SWBS/SWRST就可以系统复位了。
ISPEN:ISP/IAP功能允许位。
0:禁止ISP/IAP读/写/擦除Data Flash/EEPROM;
1:允许ISP/IAP读/写/擦除Data Flash/EEPROM。
SWBS:软件选择从用户应用程序区启动(0),还是从ISP程序区启动(1)。要与SWRST直接配合
才可以实现
SWRST:0:不操作;1:产生软件系统复位,硬件自动清零。
;从用户应用程序区(AP区)软件复位并切换到用户应用程序区(AP区)开始执行程序MOV ISP_CONTR, #00100000B;SWBS=0(选择AP区),SWRST=1(软复位)
;从系统ISP监控程序区软件复位并切换到用户应用程序区(AP区)开始执行程序
MOV ISP_CONTR, #00100000B ;SWBS=0(选择AP区), SWRST=1(软复位)
;从用户应用程序区(AP区)软件复位并切换到系统ISP监控程序区开始执行程序
MOV ISP_CONTR, #01100000B;SWBS =1(选择ISP区),SWRST =1(软复位)
;从系统ISP监控程序区软件复位并切换到系统ISP监控程序区开始执行程序
MOV ISP_CONTR, #01100000B;SWBS =1(选择ISP区),SWRST =1(软复位)
本复位是整个系统复位,所有的特殊功能寄存器都会复位到初始值,I/O口也会初始化。
假设单片机的程序有50行,当某一次运行到第20行的时候,突然停电了,这个时候单片机内部有的区域数据会丢失掉,有的区域数据可能还没丢失。那么下次打开设备的时候,我们希望单片机能正常运行,所以上电后,单片机要进行一个内部的初始化过程,这个过程就可以理解为上电复位,上电复位保证单片机每次都从一个固定的相同的状态开始工作。这个过程跟打开计算机电源的过程是一致的。
适用单片机型号:
STC89C51,STC89C52,STC89C53,STC89C14,STC89LE51,STC89LE52,STC89LE53,STC89LE14STC89C54,STC89C58,STC89C516,STC89C510,STC89C512,STC89C514,STC89LE54,STC89LE58,STC89LE516,STC89LE510,STC89LE512,STC89LE514
在工业控制/ 汽车电子/航空航天等需要高可靠性的系统中,为了防止“系统在异常情况下,受到干扰,MCU/CPU程序跑飞,导致系统长时间异常工作”,通常是引进看门狗,如果MCU/CPU不在规定的时间内按要求访问看门狗,就认为MCU/CPU处于异常状态,看门狗就会强迫MCU/CPU复位,使系统重新从头开始按规律执行用户程序。
STC89C52系列单片机内部也引进了此看门狗功能,使单片机系统可靠性设计变得更加方便/简洁。为此功能,增加了特殊功能寄存器WDT_CONTR:
WDT_CONTR:看门狗(Watch-Dog-Timer)控制寄存器
SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|---|---|
WDT_CONTR | E1H | name | - | - | EN_WDT | CLR_WDT | DILE_WDT | PS2 | PS1 | PS0 |
Symbol符号 Function功能
EN_WDT: Enable WDT bit. When set, WDT is started
看门狗允许位,当设置为“1”时,看门狗启动。
CLR_WDT: WDT clear bit.If set,WDT will recount. Hardware will automatically clear this bit.
看门狗清“0”位,当设为“1”时,看门狗将重新计数。硬件将自动清“0”此位。
IDLE_WDT: When set,WDT is enabled in IDLE mode. When clear, WDT is disabled in IDLE
看门狗“IDLE”模式位,当设置为“1”时,看门狗定时器在“空闲模式”计数当清“0”该位时,看门狗定时器在“空闲模式”时不计数
PS2,PS1,PSO: Pre-scale value of Watchdog timer is shown as the bellowed table:
/* 看门狗测试程序,可在STC的开发板上直接测试*/
WDT_CONTR EQU 0EIH ;看门狗地址
WDT_TIME_LED EQU P1.5 ;用P1.5 控制看门狗溢出时间指示灯,
;看门狗溢出时间可由该指示灯亮的时间长度或熄灭的时间长度表示
WDT_FLAG_LED EQU P1.7
;用P1.7控制看门狗溢出复位指示灯,如点亮表示为看门狗溢出复位
Last_WDT_Time_LED_Status EQU 00H :位变量,存储看门狗溢出时间指示灯的上一次状态位
;WDT复位时间(所用的Oscillator frequency=18.432MHz):
;Pre_scale_Word EQU 00111100B ;清0,启动看门狗,预分频数=32, 0.68S
Pre_scale_Word STO 00111101B ;清0,启动看门狗,预分频数=64, 1.36S
;Pre scale_Word EQU 00111110B ;清0,启动看门狗,预分频数=128,2.72S
;Pre_scale_Word EQU 00111111B ;清0,启动看门狗,预分频数=256, 5.44S
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV A, WDT_CONTR ;检测是否为看门狗复位
ANL A, #10000000B
JNZ WDT_Reset ;WDT_CONTR.7=1,看门狗复位,跳转到看门狗复位程序
;WDT_CONTR.7=0,上电复位,冷启动,RAM单元内容为随机值
SETB Last_WDT_Time_LED_Status ;上电复位,
;初始化看门狗溢出时间指示灯的状态位=1
CLR WDT_TIME_LED ;上电复位,点亮看门狗溢出时间指示灯
MOV WDT_CONTR, #Pre_scale_Word ;启动看门狗
WAIT1:
SJMP WAIT1 ;循环执行本语句(停机),等待看门狗溢出复位
;WDT_CONTR.7=1,看门狗复位,热启动,RAM单元内容不变,为复位前的值
WDT_Reset: ;看门狗复位,热启动
CLR WDT_FLAG_LED ;是看门狗复位,点亮看门狗溢出复位指示灯
JB Last_WDT_Time_LED_Status, Power_Off_WDT_TIME_LED
;为1熄灭相应的灯,为0亮相应灯
;根据看门狗溢出时间指示灯的上一次状态位设置WDT_TIME_LED灯,
;若上次亮本次就熄灭,若上次熄灭本次就亮
CLR WDT_TIME_LED ;上次熄灭本次点亮看门狗溢出时间指示灯
CPL Last_WDT_Time_LED_Status ;将看门狗溢出时间指示灯的上一次状态位取反
WAIT2:
SJMP WAIT2 ;循环执行本语句(停机),等待看门狗溢出复位
Power_Off_WDT_TIME_LED:
SETB WDT_TIME_LED 上次亮本次就熄灭看门狗溢出时间指示灯
CPL Last_WDT_Time_LED ;将看门狗溢出时间指示灯的上一次状态位取反
WAIT3:
SJMP WATT3 ;循环执行本语句(停机),等待看门狗溢出复位
END
电路原理图是为了表达这个电路的工作原理而存在的,很多器件在绘制的时候更多的考虑是方便原理图分析,而不是表达各个器件实际位置。比如原理图中的单片机引脚图,引脚的位置是可以随意改变的,但是每个引脚上有一个数字标号,这个数字标号才是单片机真正的引脚位置。一般情况下,双列自插封装的芯片,左上角是1引脚,逆时针旋转引脚号依次增加,一直到右上角是最大引脚号,例如:STC89C52单片机芯片一共有40个引脚,因此右上角就是40引脚。如图所示:
单片机引脚说明:
管脚 | LQFP 44/ PQFP 44 编号 | PDIP 40 编号 | PLCC 44 编号 | 说明 |
---|---|---|---|---|
P0.0~P0.7 | 37 - 30 | 39-32 | 43 - 36 | P0口既可以作为输入/输出口,也可以作为地址/数据复用总线使用。当P0口作为输入/输出口时,P0是一个8位准双向口,上电复位后处于开漏模式。P0口内部无上拉电阻,所以作I/O口必须外接10K - 4.7K的上拉电阻。当P0作为地址/数据复用总线使用时,是第8位地址线[A0~A7],数据线的[D0 ~ D7],此时无需外接上拉电阻。 |
P1.0/T2 | 40 | 1 | 2 | P1.0 : 标准I/O口 PORT1[0] / T2 : 定时器/计数器2的外部输入 |
P1.1/T2EX | 41 | 2 | 3 | P1.1 : 标准I/O口 PORT1[1] / T2EX : 定时器/计数器2捕捉/重装方式的触发控制 |
P1.2 | 42 | 3 | 4 | P1.2 : 标准I/O口 PORT1[2] |
P1.3 | 43 | 4 | 5 | P1.3 : 标准I/O口 PORT1[3] |
P1.4 | 44 | 5 | 6 | P1.4 : 标准I/O口 PORT1[4] |
P1.5 | 1 | 6 | 7 | P1.5 : 标准I/O口 PORT1[5] |
P1.6 | 2 | 7 | 8 | P1.6 : 标准I/O口 PORT1[6] |
P1.7 | 3 | 8 | 9 | P1.7 : 标准I/O口 PORT1[7] |
P2.0 ~ P2.7 | 18 - 25 | 21 - 28 | 24 - 31 | P2口内部有上拉电阻,既可以作为输入/输出口,也可以作为地址总线使用(A8 ~ A15)。当P2口作为输入/输出口时,P2是一个8位准双向口。 |
P3.0 /RxD | 5 | 10 | 11 | P3.0 : 标准I/O口 PORT3[0] / RxD : 串口1数据接收端 |
P3.1/TxD | 7 | 11 | 13 | P3.1 :标准I/O口 PORT3[1] / TxD :串口1数据发送端 |
P3.2/INT0 | 8 | 12 | 14 | P3.2: 标准I/O口 PORT3[2] / INT0 :外部中断0,下降沿中断或低电平中断 |
P3.3/INT1 | 9 | 13 | 15 | P3.3 :标准I/O口 PORT3[3] / INT1: 外部中断1,下降沿中断或低电平中断 |
P3.4/T0 | 10 | 14 | 16 | P3.4 :标准I/O口 PORT3[4] / T0 : 定时器/计数器0的外部输入 |
P3.5/T1 | 11 | 15 | 17 | P3.5 :标准I/O口 PORT3[5] / T1 : 定时器/计数器1的外部输入 |
P3.6/WR | 12 | 16 | 18 | P3.6 :标准I/O口 PORT3[6] / WR :外部数据存储器写脉冲 |
P3.7/RD | 13 | 17 | 19 | P3.7 :标准I/O口 PORT3[7] / RD : 外部数据存储器读脉冲 |
P4.0 | 17 | 23 | P4.0 :标准I/O口 PORT4[0] | |
P4.1 | 28 | 34 | P4.1 :标准I/O口 PORT4[1] | |
P4.2/INT3 | 39 | 1 | P4.2 :标准I/O口 PORT4[2] / INT3 :外部中断3,下降沿中断或低电平中断 | |
P4.3/INT2 | 6 | 12 | P4.3 :标准I/O口 PORT4[3] / INT2 : 外部中断2,下降沿中断或低电平中断 | |
P4.4/PSEN | 26 | 29 | 32 | P4.4 :标准I/O口 PORT4[4] / PSEN 外:部程序存储器选通信号输出引脚 |
P4.5/ALE | 27 | 30 | 33 | P4.5 :标准I/O口 PORT4[5] / ALE :地址锁存允许信号输出引脚/编程脉冲输入引脚 |
P4.6/EA | 29 | 31 | 35 | P4.6 :标准I/O口 PORT4[6] / EA :内外存储器选择引脚 |
RST | 4 | 9 | 10 | RST :复位脚 |
XTAL1 | 15 | 19 | 21 | 内部时钟电路反相放大器输入端,接外部晶振的一个引脚。当直接使用外部时钟源时,此引脚是外部时钟源的输入端。 |
XTAL2 | 14 | 18 | 20 | 内部时钟电路反相放大器的输出端,接外部晶振的另一端。当直接使用外部时钟源时,此引脚可浮空,此时XTAL2实际将XTAL1输入的时钟进行输出。 |
VCC | 38 | 40 | 44 | 电源正极 |
GND | 16 | 20 | 22 | 电源负极,接地 |