1. 单片机又称为单片微计算机,最初的英文缩写是 SCM

    Single Chip Microcomputer
    
  2. Intel公司的MCS-51系列单片机是 8位 的单片机。

一、51单片机的引脚图和逻辑符号

1.1 引脚图

在这里插入图片描述

1.2 逻辑符号

1.2.1 并行IO引脚(32只)

  1. P0.0~P0.7(Pin32-Pin39),漏极开路的8位准双向口,内部无上拉电阻,所以做IO口使用时,必须外接上拉电阻。同时当与外部存储器通信时,它复用为低8位地址线和数据线。

  2. P1.0~P1.7(Pin1-Pin8),内部带上拉电阻的8位准双向IO口。

  3. P2.0~P2.7(Pin21-Pin28),内部带上拉电阻的8位准双向IO口。同时当与外部存储器通信时,它复用为高8位地址线。

  4. P3.0~P3.7(Pin10-Pin17),内部带上拉电阻的8位准双向IO口,同时还有特殊功能。

    a) P3.0/RXD为串行输入口

    b) P3.1/TXD为串行输出口

    c) P3.2 / INT0 ‾ \overline{\text{INT0}} INT0为外部中断0输入口

    d) P3.3 / INT1 ‾ \overline{\text{INT1}} INT1为外部中断1输入口

    e) P3.4 / T0为定时器0外部输入口

    f) P3.5 / T1为定时器1外部输入口

    g) P3.6 / WR ‾ \overline{\text{WR}} WR为写选通输出口(用于与外部存储器通信时)

    h) P3.7 / RD ‾ \overline{\text{RD}} RD为读选通输出口(用于与外部存储器通信时)

  5. RST(P9)为复位口,高电平有效(持续两个机器周期)。

  6. XTAL2, XTAL1(P18、P19)为时钟电路引脚,可选择接入外部时钟或晶振电路。

  7. PSEN ‾ \overline{\text{PSEN}} PSEN(P29)是片外程序存储器的读选通信号,低电平有效,CPU从外部程序存储器取指令时,PSEN信号会自动产生负脉冲,作为外部程序存储器的选通信号。

  8. ALE(P30)地址锁存允许,单片机正常上电时以时钟频率的1/6输出脉冲信号。当与外部存储器通信时,用于控制锁存器锁存P0口低8位地址,以实现P0口低8位地址线与8位数据线的复用。

  9. EA ‾ \overline{\text{EA}} EA(P31)程序存储器地址允许输入端:

a) 高电平时,CPU执行片内ROM指令,但当PC(程序计数器)的值超过0FFFH(因为这 里ROM为4KB)时,自动跳转到外部程序存储器,地址空间允许范围为1000H—FFFFH(因为PC为32位寄存器,寻址空间为64KB)。
b) 低电平时,CPU执行片外ROM(程序存储器)指令,地址空间允许范围为0000H—FFFH(80C51的片外ROM是64KB)。

二、内部结构

2.1 内部组成

  1. 一个8位CPU

  2. 一个时电路

  3. 4KB程序存储器

  4. 128B数据存储器(这里指的是内部数据RAM区大小,不包括SFR(专用寄存器)区,所以这里指的是内部RAM低128个单元,00H-7FH)

  5. 两个16位定时/计数器

  6. 64KB扩展总线控制电路。为什么是64KB?因为扩展电路时P0口和P2口分别用作地址低八位和高八位,总共16位寻址空间,即64KB

  7. 4个8位并行IO端口

  8. 1个可编程串行接口

  9. 5个中断源(2个定时器,2个外部中断,1个串行通信中断),包括两个中断优先级嵌套

2.2 内部RAM

低128单元为内部数据RAM区(00H-0FH),高128单元为SFR区(80H-FFH)。

2.2.1 内部低128个单元

C语言使用data关键字读写内部RAM单元内容,可采用直接或间接寻址方式进行数据传送

  1. 00H—1FH为通用寄存器区,共四组,每组为R0~R7八个寄存器单元。寄存器组的选取通过程序状态寄存器PSW的RS1、RS0位确定。

  2. 20H—2FH为位寻址区,可对单元里的每一位进行位操作,也可作为一般的RAM区进行字节操作。

  3. 30H—7FH为堆栈区、数据缓冲区,即用户RAM区。栈顶位置由SP指针确定,堆栈地址空间是向上增长的,一般将SP初始化设置为大于30H。

地址功能
80H~FFH高128字节,用于SFR
30H~7FH数据缓冲区
20H~2FH16个字节(28位)可位寻址bdata区
18H~1FH第四组寄存器R0~R7
10H~17H第三组寄存器R0~R7
08H~0FH第二组寄存器R0~R7
00H~07H第一组寄存器R0~R7

2.2.2 内部高128个字节

21个SFR(特殊功能寄存器)离散分布(只能使用直接寻址的方式)。

至于什么叫不可寻址,则是指不能单独进行每一位的操作,如TMOD定时器工作模式及工作方式寄存器,在进行操作时,只能写TMOD=0xXX

关于能否进行位操作,可以通过查相关资料知道,当然还有个技巧就是其字节地址换成10进制后能否被“8”整除,能被“8”整除的就能进行位操作,不能被“8”整除就不能,如P1地址为90H,10进制为144144/8=18,能被整除,所以可以位操作。再如TMOD地址为89H, 10进制为137137/8=17.125,不能被整除,所以不可以位操作。

特殊寄存器
寄存器符号地址寄存器名称
ACCE0H累加器
BF0HB寄存器
PSWD0H程序状态字
SP81H栈顶指针
DPL82H数据指针低8位
DPH83H数据指针高8位
IEA8H中断允许控制寄存器
IPB8H中断优先控制寄存器
P080HI/O口0
P190HI/O口1
P2A0HI/O口2
P3B0HI/O口3
PCON87H电源控制及波特率选择寄存器
SCON98H串行口控制寄存器
SBUF99H串行口数据缓冲寄存器
TCON88H定时器控制寄存器
TMOD89H定时器方式选择寄存器
TL08AH定时器0低8位
TL18BH定时器1低8位
TH08CH定时器0高8位
TH18DH定时器1高8位
(1)ACC——累加器

通常用A表示。该标志常用于程序分支转移的判断条件。

(2)B——一个寄存器

在做乘、除法时放乘数或除数。

(3)PSW——程序状态字

存放CPU工作时的状态。

D7D6D5D4D3D2D1D0
CYACF0RS1RS0OVP

用途

  • CY:进位标志。

  • AC:辅助进、借位(高半字节与低半字节间的进、借位)。

  • F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。

  • RS1RS0:工作寄存器组选择位。

  • OV:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。

  • P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。

(4)DPTR(DPH、DPL) ——数据指针

可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。分成DPL(低8位)和DPH(高8位)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作。

(5)P0、P1、P2、P3——四个并行输入/输出口的寄存器。
(6)IE——中断充许寄存器

按位寻址,地址:A8H。

B7B6B5B4B3B2B1B0
EA-ET2ESET1EX1ET0EX0
  • EA (IE.7): EA=0时,所有中断禁止(即不产生中断)
    EA=1时,各中断的产生由个别的允许位决定

  • -(IE.6) :保留

  • ET2(IE.5):定时2溢出中断充许(8052用)

  • ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)

  • ET1(IE.3):定时1中断充许

  • EX1(IE.2):外中断INT1中断充许

  • ET0(IE.1):定时器0中断充许

  • EX0(IE.0):外部中断INT0的中断允许

中断的自然优先级

中断函数编号中断名称中断标志位中断使能位中断向量地址默认优先级
0外部中断0IE0EX003H1(最高)
1定时器T0中断TF0ET00BH2
2外部中断1IE1EX113H3
3定时器T1中断TF1ET11BH4
4UART中断(串口)T1/R1ES23H5
(7)TCON——定时器/计数器控制寄存器

字节地址为88H,可以位寻址。

位序号D7D6D5D4D3D2D1D0
位符号TF1TR1TF0TR0IE1IT1IE0IT0
位地址8FH8EH8DH8CH8BH8AH89H88H
  • TF1: 定时器1溢出标志位,当定时器1计满溢出时,由硬件将TF1置1,并申请中断;进入中断服务程序后,由硬件自动清零。

  • TR1: 定时器1运行控制位: TR=1表示启动定时器,需要配合GATEINT1

    • GATE=1,且INT1为高电平时,TR1置1启动定时器。
    • GATE=0时,TR1置1启动定时器1。
  • TF0: 定时器0溢出标志位,功能和用法同TF1.

  • TR0: 定时器0运行控制位,功能和用法同TR1.

  • IE1: 外部中断1请求标志位.

    • IT1=0时,为电平触发方式,每个机器周期的S5P2采样INT1引脚,若INT1脚为高电平,则置1;否则IE1清0.

    • IT1=0时,为跳变沿触发方式,当第一个机器周期采样到INT1为低电平时,将IE1置1,表示外部中断1正在向CPU请求中断.当CPU响应,转向中断服务程序时,IE1由硬件清零.

  • IT1: 外部中断1触发方式选择位.

    • IT1=0时,为电平触发方式,引脚INT1上的低电平有效.
    • IT1=1时,为跳变沿触发方式,引脚INT1上的电平从高到低的负跳变有效.
  • IE0: 外部中断0请求标志位,功能和用法同IE1.

  • IT0: 外部中断0触发方式选择位,功能和用法同IT1.

(8) TMOD寄存器:定时器/计数器工作方式寄存器

TMOD寄存器: 定时器/计数器工作方式寄存器.字节地址为89H,不能位寻址.

位序号D7D6D5D4D3D2D1D0
位符号GATEC/TM1M0GATEC/TM1M0
控制的定时器定时器1定时器0
  • GATE: 门控制位

    • GATE=0时,定时器/计数器启动与停止仅受TCON寄存器中的TRX(X=0/1)来控制.
    • GATE=1时,定时器/计数器启动与停止由TCON寄存器中的TRX(X=0/1)和外部中断引脚(INT0INT1)上的电平状态共同控制.
  • C/ T ‾ \overline{T} T: 定时器模式和计数器模式选择位

    • C/ T ‾ \overline{T} T=1时为计数器模式
    • C/ T ‾ \overline{T} T=0时为定时器模式
  • M1,M0: 工作方式选择位

定时器T0有4种工作方式:方式0,方式1,方式2,方式3

设置定时器T1为方式3会让它进入关闭状态。通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用。这时,T1往往用作串行口波特率发生器,TH0用作定时器,TL0作为定时器或计数器。

定时器T1有3种工作方式:方式0,方式1,方式2。

(9) SUBF寄存器: 串行数据缓冲器(一个接收一个发送)

当发送使用时,就采用SBUF=XXX;  (XXX为需要传送的数据)

当接收使用时,采用XXX=SBUF;

(10) SCON寄存器: 串行口控制寄存器

它用于控制串行通信的方式选择、接收和发送,指示串口的状态。SCON既可以字节寻址,也可以位寻址。

D7D6D5D4D3D2D1D0
SM0SM1SM2RENTB8RB8TIRI
9FH9EH9DH9CH9BH9AH99H98H
  • SM0, SM1:串行口工作方式控制位。

  • SM0SM1工作方式功能波特率
    00方式08位同步移位寄存器晶振频率/12
    01方式110位UART可变
    10方式211位UART晶振频率/64或晶振频率/32
    11方式311位UART可变
  • 工作方式0:串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率固定为fosc/12。

  • 工作方式1:方式1是10位数据的异步通信口。TXD为数据的发送引脚,RXD是数据的接受引脚。传送一帧数据的格式为1位起始位,8位数据位,1位停止位。

  • 方式2或方式3:方式2或方式3时,为11位数据的异步通信口,TXD为数据发送引脚,RXD为数据接收引脚。起始位1位、数据位9位(含附加的第九位,发送时为SCON中的TB8,接收时为SCON中的RB8)、停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/32或1/64。方式3的波特率由定时器T1的溢出率决定。

  • SM2:多机通信控制位。

多机通信是工作于方式2和方式3,即SM2主要用于方式2和方式3。当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接收到的数据放弃。当SM2=0时,就不管第9位数据是0还是1,都会将数据送入SBUF,并发出中断申请。

  • REN:允许接受位。

REN=1:允许接收
REN=0:禁止接收

  • TB8:发送数据位8.

在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。

  • RB8:接收数据位8(一般配置为0)。

在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。

  • TI:发送中断标志位。

可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。

  • RI:接收中断标志位。

可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。

在配置串口初始化程序的时候,我们一般只用配置高四位,如果我们选择工作方式1,那么就是SCON=0X50;(SM0=0,SM1=1,SM2=0,REN=1)

Logo

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

更多推荐