51单片机总结

在调试51串口通讯的时候,串口仿真通过了,但是上实机的时候遇到了问题,于是决定回来把51单片机的知识点复习一下,理一理思路,也方便后续学习,细节部分还是要参考官方文档

命名规则

我用的是STC 89c52 35I PDIP 40

  • c 表示工作电压 5.5V ~3.8V
    还有LE : 3.6V ~2.4V/3.4V ~2.4
  • 51 是4K字节程序空间及512字节RAM空间
  • 35 工作频率可达35MHZ
  • I 工作温度 工业级,-40℃ ~85℃
  • 封装类型:
    如PDIP,LQFP,PLCC,PQFP
  • 40 引脚数

表示是直插式的40引脚51单片机

还有贴片式的LQFP

图片来自官方文档

开发环境

keil 编译代码

stc-isp 烧录代码

proteus 电路仿真

单片机最小子系统

由单片机,晶振电路,电源,复位电路组成,因为毕业设计做的就是这个😳,我就直接抄过来了

单片机

使用的单片机是STC89C52,八位;共有40个引脚,其中输入/输出端口P0、P1、P2和P3,是4个8位并行I/O口;XTAL1和XTAL2为时钟引脚; RST、ALE、PSEN和EA都是控制引脚;有1个全双工串行通信端口,2个优先级设置,3个16位的定时器/计数器

晶振电路

晶振电路为单片机提供脉冲信号,每次单片机接收到脉冲时执行一个或多个指令该电路由与晶体振荡器串联的两个并联电容器组成

复位

STC89C52系列单片机有4种复位方式:外部RST引脚复位,软件复位,掉电复位/上电复位,看门狗复位。因为单片机也可掉电上电复位,故调试时也可省略。

外部RST引脚复位电路:由一个按键,电容,电阻构成,按下按键,短路给单片机的RST端口提供一个高电压。

软件复位:通过一个特殊寄存器ISP_CONTR实现,通过设置这个八位可以实现不同复位

B7 B6 B5 B4 B3 B2 B1 B0
ISPEN SWBS SWRST - - w2 w1 w0

w0 w1 w3 表示从那个区域复位

SWRST 选择从用户应用程序区启动(0),还是从ISP程序区启动(1)

SWBS 0,不操作;1,产生软件系统复位,硬件自动清零

ISPEN ISP/IAP使能

看门狗复位:WDT_CONTR:看门狗(Watch-Dog-Timer)控制寄存器

B7 B6 B5 B4 B3 B2 B1 B0
- - EN_WDT CLR_WDT IDLE_WDT w2 w1 w0

w0 w1 w3 定时器分频,可以理解成程序跑飞多长时间后复位

IDLE_WDT 空闲模式下看门狗是否计数,0关闭

CLR_WDT 看门狗清0位

EN_WDT 是否打开看门狗,0关闭

计时器/定时器

51的定时器有三个(T0,T1,T2),不同型号会有出入,查对应芯片手册就行;定时器的功能是设定执行时间的,达到阈值后就会产生终端信号

工作模式

51单片机的T0和T1有四种工作模式
模式0∶13位定时器/计数器

模式1:16位定时器/计数器(常用)

模式2∶8位自动重装模式

模式3∶两个8位计数器

计时寄存器

52内置两个16位寄存器,TH(高位)和 TL(低位)

寄存器 复位值
TH0 0000 0000B
TH1 0000 0000B
TL0 0000 0000B
TL1 0000 0000B

中断

此节后面的配图全部来源于官方文档

CPU正在执行程序时,单片机外部或内部发生的某一事件,请求CPU迅速去处理。CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为中断。 CPU处理事件的过程,称为CPU的中断响应过程。

52单片机一共有八个中断源,四个外部中断($ \overline{INT0}$,$ \overline{INT1}$,$ \overline{INT2}$,$ \overline{INT3}$),三个定时器中断(Timer0,Timer1,Timer2),一个串口中断(UART);每个中断都有四个优先级,可以通过软件设置;每个中断均有开关可以控制是否打开中断;高优先级的中断可以打断低优先级的中断,低的不能打断高的;若两个优先级相同,由查询次序来决定系统先响应哪个中断。

在c中,中断号就体现了中断的优先级

结构图

从结构图可以知,外部中断0,外部中断1,计时器T0,计时器T1的中断源都由TCON控制,计时器T2由T2CON控制,串口由SCON控制,后面两个外部中断T2,T3由XICON控制,XICON同时定义了单独的中断开关和优先级;接着到了后面的开关环节,IE寄存器的六位分别对应前六个中断的开关,还有一个总的开关(EA,0关闭,1打开),控制所有开关;而到了后面的优先级控制,由三个寄存器IP,XICON,IPH共同控制,这里一共有两位控制位,对应四种不同优先级(0,0),(0,1),(1,0),(1,1)

相关寄存器详细参数

定时器/计数器控制寄存器TCON

TF1 :定时器标志位,TF1=1表示T1有中断产生。

TR1 :TR1=1表示T1开始运行。

TF0 :TF0=1表示T0有中断产生。

TR0 :TR0=1表示T0开始运行。

IE1 :IE1=1表示INT1有中断产生。

IT1 :IT1=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。

IE0 :IE0=1表示INT0有中断产生。

IT0 :IT0=1表示INT0为下降沿(负跳变)触发,IT0=0表示INT0为低电平触发。

中断允许寄存器 IE (A8H)

串行口控制寄存器SCON

SM0和SM1是串行口4中工作方式的选择位。

SM2是串行口多机通信控制位。

REN是串行口接收允许控制位,1表示允许接收,0表示禁止接收。

RB8、TB8是多机通信使用的奇偶校验位,此处不详细记录,后续看情况补充。

RI、TI是串行口收发数据申请中断标志位,1申请中断,0不申请中断。

定时器/计数器2控制寄存器T2CON
辅助中断控制器XICON

串口通讯

51单片机内部集成有一个功能很强的全双工串行通信口(全双工即既可以发送也可以接收)。

基础知识

串行通信可分为同步通信和异步通信。同步通信时,使用同一个时钟,在每组信息的开始要加上同步字符,如果没有信息传输,填上空字符。异步通信时接收方的时钟频率和发送方的时钟频率不必完全一样,两个字符之间的传输间隔任意。
波特率就是在串口通信中每秒能够发送的位数。

工作方式

由寄存器SCON控制,见上

串行口数据缓冲寄存器SBUF

SBUF实际是两个缓冲器;发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,两个缓冲器共用一个地址码(99H),cpu通过不同指令进行区分。