790 likes | 968 Views
第 2 章 MCS-51 单片机的结构与原理. 2.1 MCS-51 单片机的结构 2.2 MCS - 51 单片机引脚及功能 2.3 8051 单片机存储器 2.4 CPU 时序 2.5 复位及复位电路 2.6 输入 / 输出端口结构. 第 2 章主要内容. 退出. 2.1 MCS-51 单片机的结构. 一个 8 位的微处理器( CPU ) 片内数据存储器 RAM ( 128B/256B ) 片内程序存储器 ROM/EPROM(4KB/8KB) 四个 8 位并行 I/O 接口 P0~P3, 每个口即可做输入也可做输出
E N D
2.1MCS-51单片机的结构 2.2MCS-51单片机引脚及功能 2.3 8051单片机存储器 2.4 CPU时序 2.5 复位及复位电路 2.6 输入/输出端口结构 第2章主要内容 退出
一个8位的微处理器(CPU) 片内数据存储器RAM(128B/256B) 片内程序存储器ROM/EPROM(4KB/8KB) 四个8位并行I/O接口P0~P3,每个口即可做输入也可做输出 2个定时器/计数器 五个中断源的中断控制系统 一个全双工UART(通用异步接收发送器)的串行I/O口 片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接. 2.1.1MCS-51单片机主要组成
MCS-51系列单片机性能表 型号带“C”表示所用的是CMOS工艺,具有低功耗的特点。如8051功耗为630mW,80C51功耗只有120mW,用于便携式产品中。
MCS-51单片机典型芯片的性能比较 MCS-51系列单片机有多种产品,典型的为8051/8751/8031,它们的外部引脚和指令系统完全兼容,只是内部程序存储器的形式不同。 8051: 片内4KBROM,程序在制作芯片时已烧好,适于低成本的大批量生产。 8751: 片内4KBEPROM,价格较贵,适于开发样机。 8031: 片内无ROM,需扩展外部程序存储器。
CPU包括运算器和控制器二大部分: 1 、 运算器 运算器包括算术/逻辑部件(ALU)、累加器A、暂存寄存器、寄存器B、程序状态寄存器(PSW),十进制调整电路等。运算器主要用于实现算术/逻辑运算及位操作运算。下面介绍运算器的各组成部分。 a、算术/逻辑部件ALU b、累加器A c、寄存器B d、程序状态字寄存器PSW 中央处理单元(CPU)
2、控制器 控制器包括程序计数器PC、指令寄存器IR、指令译码器ID、振荡器及定时电路等。 a、程序计数器PC b、指令寄存器IR及指令译码器ID c、振荡器及定时电路
程序存储器(ROM) 8051及8751的片内程序存储器容量为4KB,地址从0000H开始,存放程序和表格常数。 数据存储器(RAM) 8051/8751/8031片内数据寄存器为128B,地址为00H~7FH,用于存放运算的中间结果、数据暂存以及数据缓冲等。 8051内部还有SP、DPTR、PCON…IE,IP等特殊寄存器,地址为80H~FFH。 存储器
8051由四个8位并行接口,即P0~P3,它们都是双向端口,每个端口有8条I/O线,均可输入/输出。P0~P3四个锁存器同RAM统一编址,可以把I/O口当作一般特殊寄存器来寻址。 I/O接口
2.2MCS-51单片机引脚及其功能 MCS-51单片机的引脚及逻辑符号图
87C51 EPROM型 AT89C51 ATMEL FLASH型 MCS-51单片机芯片外形图 MCS-51单片机有两种封装形式: a. 40脚的双列直插DIP封装; b. 44脚的PLCC。 (DIP封装)
电源引脚 Vcc和Vss 时钟电路引脚XTAL1和XTAL2 XTAL2:接外部晶体和微调电容的一端,在8051片内它是振荡电路反相放大的输出端,振荡电路的频率就是晶体固有频率.若需采用外部时钟电路时该引脚输入外部时钟脉冲。 要检查振荡电路是否正常,可以示波器查看XTAL2是否有脉冲输出。 XTAL1:接外部晶体和微调电容的另一端,在片内是振荡电路反相放大器输入端,在采用外部时钟输入时,该引脚必须接地。 引脚功能
PSEN, 3.控制信号引脚RST,ALE, EA RST/VPD :RST复位信号输入端,高电平有效. 当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,就可以完成复位操作。 RST引脚的第二功能是VPD即备用电源的输入端。当主电源Vcc 发生故障,降低到低电平规定值时,将+5V电源自动接到RST端,为RAM提供备用电源,以保证存储在RAM中的信息不丢失。
ALE/PROG (Address Latch Enable/Programming):地址锁存允许 当8051上电正常工作后,ALE引脚不断向外输出正脉冲信号,此频率为振荡周期fosc的1/6。(该信号可用于判断8051是否正在正常工作?) CPU访问外部存储器时,ALE输出信号作为锁存低8位地址的控制信号, 平时不访问片外存储器时,ALE端以振荡频率的1/6固定输出。 第二功能PROG:对片内4Kb EPROM的8751编程写入时的编程脉冲输入端。
(Program Store Enable):程序存储器允许输出信号端 PSEN PSEN 在访问外部程序存储器时,此端定时输出负脉冲作为读片外存储器的选通信号,此引脚接EPROM的OE端, 有效,即允许读EPROM/ROM中的指令码。
EA EA EA /Vpp(ENABLE ADDRESS/VOLTAGE PULSE OF PROGRAMMING):外部程序存储器地址允许输入端/固化编程电源输入端。 接高电平时,CPU先访问片内EPROM/ROM,并执行内部程序存储器中的指令,当PC(程序计数器)的值超过0FFFH时,将自动转去执行片外程序存储器内的程序。 接低电平时,CPU只访问片外EPROM/ROM,不管片内是否有程序存储器,对无片内ROM的8031或8032,需外扩EPROM,此端必须接地,如果有片内ROM的,外扩EPROM的也要将EA接地。
4.输入/输出端口P0,P1,P2,P3 P0口(P0.0~P0.7):是一个漏极开路的8位准双向I/O端口,作为漏极开路的输出端口,每位能驱动8个LS型TTL负载.当P0口作为输入口使用时,应先向锁存器写入全1,此时P0口的全部引脚浮空,可作为高阻抗输入。 在CPU访问片外存储器时,P0口是分时提供8位地址和8位数据的复用总线。
P1口(P1.0~P1.7):是一个带内部上拉电阻的8位准双向I/O端口,每位能驱动4个LS型TTL负载。 当P1口作为输入口使用时,应先向锁存器写入全1,此时P1口的全部引脚由内部上拉电阻拉成高电平。
P2口(P2.0~P2.7):是一个内部带上拉电阻的8位准双向I/O端口, 每位能驱动4个LS型TTL负载。 在CPU访问片外存储器时,P2口输出高8位地址。 P3口(P3.0~P3.7):是一个内部带上拉电阻的8位准双向I/O端口, 每位能驱动4个LS型TTL负载。 P3口与其他I/O端有很大区别,它除作为一般准双向I/O外,每个引脚还具有第二功能。
一般微机:通常只有一个地址空间,ROM和RAM可以随意安排在这一地址范围内不同的空间,CPU访问存储器时,一个地址对应唯一的存储器单元,此类结构称为普林斯顿结构。一般微机:通常只有一个地址空间,ROM和RAM可以随意安排在这一地址范围内不同的空间,CPU访问存储器时,一个地址对应唯一的存储器单元,此类结构称为普林斯顿结构。 8051的存储器:与典型微机不同,它把程序存储器和数据存储器截然分开,各有自己的寻址系统、控制信号和功能,这种程序存储器和数据存储器分开的结构称为哈佛结构。 2.3 存储器配置
物理上分4个存储器空间 内部程序存储器 外部程序存储器 内部数据存储器 外部数据存储器 逻辑上分3个存储器空间 片内外统一的64KB程序存储器 256B(含SFR块)片内数据存储器 64KB片外数据存储器 8051存储器地址空间分配 在8051单片机的内部集成了4K的程序存储器和256B的数据存储器,同时还可以使用片外的程序存储器和数据存储器,其扩展能力都是64K。
64k程序存储器地址空间,片内外统一编址0000h~FFFFh64k程序存储器地址空间,片内外统一编址0000h~FFFFh 256B片内数据存储器地址空间 指令用MOVC 指令用MOV • 64kb片外数据存储器地址空间,0000h~FFFFh 指令用MOVX
注意: 1、访问片内RAM20H存储单元; MOV A,20H 2、访问片外RAM存储单元; MOV R0,#20h MOVX A,@R0 3、尽管片内与片外的RAM单元的00H-FFH地址相重叠,但由于指令的不同不会发生地址混乱。 FFFF FFFF 64KB ROM 64KB RAM(I/O) 1000 0FFF 0FFF 4KB ROM FF SFR 80 EA=0 7F EA=1 RAM 00 0000 0000 0000 片内存储器 片外扩展存储器 图1 8051存储器空间分布图
2.3.1程序存储器地址空间 程序存储器是存放编好的程序、常数和表格的,只能读不能写。该空间有几个特殊单元,应用过程中应加以注意。 在MCS-51单片机中,当引脚EA=1时,系统使用片内的ROM;EA=0时,系统使用片外的ROM。 无论是使用片内还是使用片外的ROM(既 EA=1或EA=0),其起始地址都是从0000H单元开始,0000H是系统的启动地址。 0003H~002BH是中断服务程序入口地址。
8051中断矢量地址表 思考: 如何合理安排程序存储器空间?
片外数据存储器 片内数据存储器 分为两个部分 : 1、低128B RAM(00H~7FH) 00H~1FH,4个通用工作寄存器区 20H~2FH,位地址空间 堆栈的设定 2、高128B特殊功能存储器(SFR) (80H~FFH) 2.3.2数据存储器地址空间 FFFFH 片外数据 存储器 64KB FFH 特殊功能 寄存器 SFR 80H 7FH 片内 通用数据 存储器 00H 0000H
低128Bytes RAM 高128bytes RAM 98H SCON 7FH 30H 用户RAM区(堆栈、数据缓冲) 90H P1 SFR 8DH TH1 8CH TH0 2FH 20H 位寻址区(位地址00~7F) 8BH TL1 FFH 8AH TL0 B F0H 89H TMOD ACC E0H 1FH 18H R7 R0 第3组工作寄存器 88H TCON PSW D0H IP B8H 17H 10H 87H PCON R7 R0 第2组工作寄存器 83H DPH P3 B0H IE A8H 0FH 08H 82H DPL R7 R0 第1组工作寄存器 81H SP P2 A0H 07H 00H R7 R0 80H P0 SBUF 99H 第0组工作寄存器 片内RAM
R0~R7寄存器分配 思考: 工作寄存器为何分为四组,如何正确使用工作寄存器?
片内 RAM(20H-2FH)中的位寻址区结构图 2FH 字节地址 位地址 20H
位寻址区内的地址是位地址。共有00-7FH(共128个位);位寻址区内的地址是位地址。共有00-7FH(共128个位); 要区分字节地址和位地址这两个不同的地址概念: ①从物理的角度:每一个字节地址内包含了8个位,既: D7,D6,D5,D4,D3,D2,D1,D0 (我们提到的RAM地址一般都是指字节地址)。 ②从逻辑的角度:字节地址和位地址是靠不同类型的指令来 区分的。如, MOV A, 20H ;将RAM的20单元内容送累加器A; MOV C ,20H ;将RAM位寻址区中20H位送CY中。 在这二个例子中,第一条指令为字节传送指令,既20H为字节地址;第二个例子中的指令为位操作指令,20H为位地址。有关详细内容将在后续章节中描述。
堆栈的设定 设置在内部数据存储器,理论深度最大为128字节,但实际小很多。堆栈指针是8位SP寄存器,复位后SP=07H,建议SP=30H以上(如:5FH)。SP总是指向栈顶,堆栈是向上生成的,即入栈时SP加1,出栈时SP减1。 RAM 堆栈操作过程: 进栈: PUSH ACC指令(设 SP=07H) 1,SP+1送SP,此时SP=08H; 2,ACC送RAM的08H单元; 出栈:POP ACC (设SP=08H); 1,将RAM 中08H单元内容送A; 2,SP-1送SP ,此时SP=07H。 累加器A x SP 08H 07H 07H 堆栈操作示意图 思考: 复位后8051堆栈最大容量是多少?
特殊功能寄存器: 共22个(3个只属52子系列),PC在物理上是独立的,其余21个分布在SFR区,共占26个字节(5个双字节寄存器)。 这21个中,有11个寄存器具有位寻址功能,即寄存器中的每位都具有位地址,它们的特点是字节地址正好能被8整除。 注意: 1、128B的SFR区中仅有26B是有定义的,若访问没有定义的单元,将得到一个不确定的随机数。 2、访问SFR时只能采用直接寻址方式。
特殊功能寄存器简介 • 程序计数器PC • 16位,寻址范围64KB,用于安放下一条要执行的指令地址,在物理上是独立的。 • 累加器A(ACC) • 8位,是CPU中工作最频繁的,大部分操作数取自累加器,运算结果也存放在A中。 • B寄存器 • 8位,用于乘除指令中,对其他指令可作RAM中的一个单元用。
程序状态字(或标志寄存器)PSW • 8位,存放运算结果的一些状态信息,各位含义如下:
CY(PSW.7):进位标志位。在进行加法(或减法)运算时,若运算结果最高位有进位或借位,则CY自动置“1”,否则CY置“0”,在进行布尔操作运算时,CY(简称C)作为布尔处理器。CY(PSW.7):进位标志位。在进行加法(或减法)运算时,若运算结果最高位有进位或借位,则CY自动置“1”,否则CY置“0”,在进行布尔操作运算时,CY(简称C)作为布尔处理器。 AC:辅助进位标志位。当进行加法或减法时,若低4位向高4位有进位(或借位)时,AC被置“1”,否则AC被置“0”。在十进制调整指令中AC还作为十进制调整的判别位。 F0:用户标志位。用户可用软件对F0位置“1”或清“0”以决定程序的流向。
OV:溢出标志位,当运算结果溢出时OV为“1”,否则为“0”,此标志位反映了带符号数运算结果是否溢出。OV的结果可以用一个算法来表示: OV=CP⊕CS其中:CP为A7的进位;CS为A6的进位。 PSW.1:未定义位。 P(PSW.0):奇偶标志位。当累加器A中“1”的个数为奇数时,P置“1”,否则P置“0”。此位反映累加器A中内容“1”的奇偶性,它常常用于单片机间通信。 RS1、RS0:工作寄存器区选择位。用来选择当前工作的寄存器区。用户通过改变RS1 、RS0的内容来选择当前工作寄存器区。RS1、RS0的内容与工作寄存器区的对应关系如表2-1所示。
栈指针SP • 8位,指示堆栈顶部在内部RAM中的位置,初始化SP=07H,可重新设定SP初值,当SP初值↓,堆栈深度↑。指令系统中的栈操作指令是:PUSH,POP。 • 数据指针DPTR • 16位,可分作DPH、DPL两个独立的8位寄存器,也可作位16位DPTR处理。主要用来保持16位地址,对外部数据存储器进行寻址,也可用于访问程序存储器。如: • MOVX A,@DPTR • MOVC A,@A+DPTR
端口P0~P3 • 8位,分别是I/O端口P0~P3的锁存器。SFR中的P0-P3实际上就是I/O端口的数据锁存器。与RAM中的任意一个单元一样,P0-P3都有自己的RAM地址:80H、90H、A0H、B0H。所以,在51单片机中的输入、输出操作实际上就是个普通的RAM单元操作一样:如 输出指令 MOV 80H,A ;将累加器中的数据送到P0口输出 输入指令 MOV A,90H ;将P1口的数据输入到累加器A中 即MCS-51的指令系统中没有专用的输入、输出(IN、OUT)指令,而是把P0-P3作为普通的内存单元来使用。
串行数据缓冲器SBUF • 8位,用于存放欲发送或接收的数据。实际上是两个独立的寄存器,一个是发送缓冲器,另一个是接收缓冲器。 • 定时器/计数器TH0,TL0,TH1,TL1,TH2,TL2(52子系列) • 其它控制寄存器IP,IE,TMOD,TCON,SCON,PCON
外部数据存储器(I/O) MCS-51对外部数据存储器的扩展能力为64KB,采用间接寻址方式访问。 8位地址寄存器:R0,R1 16位地址寄存器:DPTR 例: MOV R0,#20H;将外部RAM单元地址20H送R0寄存器 MOVX A,@R0;从外部RAM20H单元取数据到累加器A 这里使用了R0做间址寄存器,所以寻址范围为256B。 例: MOV DPTR,#2000H;将外部 RAM 单元的地址的2000送DPTR MOVX A ,@DPTR;从外部 RAM 2000H单元中取数据到A 这里使用了16位的寄存器DPTR,所以寻址范围为64KB。
2.4.1 片内振荡器及时钟信号产生 2.4.2 机器周期和指令周期 2.4.3 CPU取指和执行周期时序 2.4 CPU时序
内部方式时钟电路 2.4.1时钟电路 电容C1和C2取值: 30pF左右 振荡频率范围: 1.2~12MHz
外接时钟源接法 该方式常用于多块8051芯片同时工作,以便同步。