第一章 基础概念
- 单片机:将组成微型计算机的个功能部件,包括中央处理器(CPU)、存储器(RAM、ROM、EPROM)、定时/计数器、串行口、I/O接口电路集合在一块集成电路芯片中从而构成完整的微型计算机,故称:单晶片微型计算机,简称单片机。
- 单片机与普通计算机不同的是将CPU、存储器、I/O口集成在一起。
- 微机:微型计算机(Microcomputer,简称微机 C),是具有完整运算及控制功能的计算机。
- CPU:微处理器,是小型计算机或微型计算机的控制和处理部分。又称中央处理单元CPU(Central Processing Unit)。
- CPU的组成:
(1)运算器:运算器又由算数逻辑单元(ALU)、累加器(最繁忙的寄存器)、寄存器
(2)控制器:控制器又由程序计数器、指令寄存器、指令译码器、时序产生器、操作控制器组成。
- CPU中的主要寄存器:
(1)累加器(A):运算前,用于保存一个操作数。运算后,用于保存所得的和、差或逻辑运算结果。
(2)数据寄存器(DR):通过数据总线(DBUS)向存储器(M)和输入/输出设备写或读数据的暂存单元。
(3)指令寄存器(IR):指令寄存器用来保存当前正在执行的一条指令。
(4)指令译码器(ID):指令分为操作码和地址码字段,由二进制数字组成。当执行任何给定的指令,必须对操作码进行译码,以便确定所要求的操作。指令寄存器中操作码字段的输出就是指令译码器的输入。
(5)程序计数器(PC):在程序开始执行前,必须将其起始地址,即程序的第一条指令所在的内存单元地址到PC。
(6)地址寄存器(AR):地址寄存器用来保存当前CPU所要访问的内存单元或I/O设备的地址。
- 寄存器和存储器的区别:
- 寄存器:寄存器是中央处处理器的组成部分,它和CPU有关。它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。相当于“保管”
- 存储器:存储器是在CPU外部的存储器,分为RAM和ROM。相当于“保存”
- RAM:数据存储器
- ROM、EPROM:程序存储器
- 根据MCS-51单片机内部存储器的类型不同,可以分为以下几个基本类型:
(1)无ROM型:8031。需要外扩存储器
(2)ROM型:8051。4K字节的ROM。程序已经固话,我们无法修改。外扩充存储器中编写自己的代码
(3)EPROM型:8751。4K字节的EPROM。可擦除,可写到内部。通过紫外线照射擦除。
(4)EEPROM型:8951。4K字节闪存。内部闪存(Flash),电擦除。
(5)增强型:8032/8052/8752/8952。数据存储器是51的二倍。多了一个计数器。
- 单片机的选择原则:主要从指令结构、程序存储方式和功能等方面选择单片机。
(1) 按指令结构可分为复杂指令集CISC和精简指令集RISC两种结构。
CISC (Complex Instruction Set Computing)结构:指令丰富,软件开发容易,取指令和取数据不能同时进行,速度受限。如Inter公司的MCS-51系列、M68HC系列、AT89系列、W78(华邦单片机 )系列等。
RISC (Reduced Instruction Set Computing)结构:指令位数较短,取指令和取数据可以同时进行,速度快,但需要编译程序的处理 。如PIC系列、Z86系列、AVR系列、KS57(三星单片机 )系列、EM78(义隆 )系列等。
(2) 根据程序存储方式的不同,单片机可分为ROMless(片内无ROM,需片外扩展EPROM)、EPROM、OTPROM(One Time Programmable ROM )、Flash ROM和Mask ROM五种。
- ADDA转换器:模拟量------数据量--------模拟量
- 数制转换:
(1)十进制转二进制:整数部分“除二倒取余数法”,小数部分“乘二正序取整数法”,直到小数部分为0。
(2)二进制转十进制:按权展开求和法。小数点前一位权为0,后一位权为-1。
(3)二进制转十六进制:整数:首先从低位开始,把数分成4位一组, 然后将每4位一组转换成相应的十六进制数。小数,:从小数点右边开始分成4位一组
- BCD(Binary Coded Decimal)码———二-十进制码:BCD码是一种二进制形式的十进制码, 也称二–十进制码。它用 4 位二进制数表示 1 位 十进制数,最常用的是 8421BCD 码。
- ASCII (American Standard Code for Information Interchange)码:ASCII码是一种字符编码, 是美国信息交换标准代码的简称。它由7位二进制数码构成,共有128个字符。 ASCII码主要用于微机与外设通信。
- 有符号数:有符号的 8 位二进制数用最高位D7表示数的正或负, 0 代表“ + ”, 1 代表“ - ”, D7 称为 符号位, D6~D0 为数值位。
(1)原码:一个二进制数,用最高位表示数的符号, 其后各位表示数值本身,这种表示方法称为原码。 原码的表示范围是 - 127~ + 127 。
(2)反码:正数的反码与原码相同。符号位一定为 0,其余位为数值位。 负数的反码符号位为 1,数值位将其原码的数值位逐位求反。 反码的表示范围是 - 127~ + 127 。
(3)补码:正数的补码与原码相同。 负数的补码符号位为 1,数值位将其原码的数值位逐位求反后加 1 ,即负数的反码加 1。 补码的表示范围是 - 128~ + 127 。
- 无符号数:无符号的 8 位二进制数没有符号位,从 D7~D0 皆为数值位,所以 8 位无符号二进制数的 表示范围是 0~ + 255。
第二章 MCS-51单片机的硬件结构
注:下面是51系列通有属性。89C51的属性会注明。
89C51 = 80C31+373+2732
2.1 功能部件
- 按功能分为8个部件,通过片内总线连接。
(1)微处理器:8位CPU。运算部件和控制部件,按字节来操作。还可以按位处理。
(2)数据存储器:RAM。暂存系统在运行过程中产生的临时数据。89C51片内RAM为256字节的Flas ROM,地址为00H···7FH。在这128B的RAM中有32个字节可指定为工作寄存器。还有21个特殊功能寄存器SFR,地址为80H···FFH。特点:掉电之后,数据会消失。(52系列有256字节)
(3)程序存储器:ROM/EPROM。存程序源代码和表格常数。特点:掉电之后能够保存。89C51有4KB的Flash ROM。
(4)I/O口:四个(P1口、P2口、P3口、P0口)。并行8位输入输出口。每个I/O口有8个输入输出端(引脚)。最多输出32个数字量。我们应该掌握P0口和P2口,作为数据地址口。8条数据线,16条地址线。P0口的分时复用。
(5)串行口:进行双机通讯是使用。一个全双工的异步串行口。发送的同时可以接收。
(6)定时计数器:51系列有两个16位的计数器,产生一些定时。还可做计数器使用。还可作I/O口的波茨率。
(7)中断系统:紧急操作。处理突发事件。两个中断优先级,一共五个中断源。
(8)特殊功能寄存器(SFR):【重点】存储8位二进制数。隐含控制信息。作用:用于对片内个功能部件进行管理、控制、监视。实际上是一些控制寄存器和状态寄存器。51系列内部一共有21个SFR,是一个具有特殊功能的RAM区。
- 51系列的控制方式:SFR对各功能部件的集中管理。
- 【注】89C51单片机内部结构如下
- 89C51单片机芯片包括:
- 一个8位的80C31的CPU。
- 片内256字节的数据存储器 RAM/SFP。
- 片内4KB的程序存储器 Flash ROM。
- 4个8位并行I/O口 P0~P3。
- 两个16位定时器/计数器。
- 5个中断源,两个中断优先级的中断控制系统。
- 一个全双工的UART(通用异步接收发生器)的串行I/O口:用于单片机之间的串行通信。
- 片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接,最高允许震荡频率为24 MHZ。
- 89C51提供两种可用软件来选择的省电方式———空闲方式 和掉电方式。
- 在空闲方式中:CP U 停止工作, 而 RAM、定时器/ 计数器、串行口和中断系统都继续工作。此时的电流可降到 大约为正常工作方式的 15%。
- 在掉电方式中: 片内振荡器停止工作,由于时钟被“冻结”,使一 切功能都暂停,故只保存片内 RAM 中的内容,直到下一次硬件复位为止。这种方式下的电流 可降到 15 μA 以下, 最小可降到 0. 6 μA
2.2 引脚
- 40只引脚双列直插封装(DIIP):8031、8051、8751、89C51。适用背面焊接。
- 44只引脚方形封装方式(PLCC):80C51、80C52、89C52。NC管脚(4只)不用。适用表面焊接。
引脚逻辑图:
- 控制引脚:EA、PSEN、ALE、RST。
(1)RST/VPD(9脚):
(2)ALE/PROG*(30脚):
(3)PSEN*(29脚):读外部程序存储器的选通信号。可以驱动8个LS型TTL负载。
(4)EA/VPP(31脚):EA*为内外程序存储器选择控制。EA*=1,访问片内程序存储器,从片内读代码执行;EA*=0,单片机则只访问外部程序存储器。第二功能VPP,用于施加编程电压。
- 【当EA引脚接高电平时】: CPU 只访问片内 Flash ROM 并执行内部程序存储器中的指令; 但当 PC( 程序计数器)的值超过 0FFF H (对 89C51 为 4 KB)时, 将自动转去执行片外程序存储 器内的程序。
- 【当EA引脚接低电平时】: CPU 只访问片外 ROM 并执行片外程序存储器 中的指令,而不管是否有片内程序存储器。然而需要注意的是,如果保密位 LB1 被编程,则复位时在内部会锁存EA端的状态
- 【注】:EA =0,适用于内部没有ROM 的8031应用系统
- 【第一功能】 :ALE,地址锁存允许,用于P0口地址剥离。即:当P0地址数据复用口发出地址信息时,发出下跳沿。锁存器有上跳沿锁存器和下跳沿锁存器,这里需要加下跳沿锁存器。
- 【第二功能】:PROG*,编程脉冲输入端,PROG在对片内带有 4 KB Flash ROM 的 89C51 编程写入( 固化程序) 时,作为编程脉冲输入端。
- 【第一功能】: RST-复位。当此输入端保持两个机器周期 (24 个 时钟振荡周期)的高电平时, 就可以完成复位操作。单片机正常运行时,这个管脚低电位。
- 【第二功能】: VPD-在Vcc掉电的情况下接备用电源。
- 电源引脚:
(1)Vcc(40脚):+5V工作电压。(4.5V~5.5V)
(2)Vss(20脚):接地。
- 时钟引脚(外接晶体引脚):
(1)XTAL1(19脚):接外部晶体的一端。采用外接晶体振荡器时,此引脚接地。
(2)XTAL2(18脚):接外部晶体的一端。在89C51片内它是震荡电路反向放大器的输出端
要检查一个 89C51 小系统上电后 CPU 能否正常工作, 也可用示波器看PSEN端有无脉冲 输出。如有,则说明基本上工作正常
如果想确认 89C51 芯片的好坏, 可用示波器查看 ALE 端是否有脉冲信号输出。若有脉冲信号输出,则 89C51 基本上是好的
要检查 89C51 的振荡电路是否正常工作, 可用示波器查看 XTAL2 端是否有脉冲信号 输出
- 并行I/O口引脚:P0、P1、P2、P3。
(1)P0:双向(输入输出)8位三态(0,1 高阻态)I/O口。地址总线(低8位)及数据总线分时复用口,可驱动8个LS型TTL负载。
(2)P1:8位准双向I/O口,可驱动4个LS型TTL负载。
(3)P2:P2口:8位准双向I/O口,与地址总线(高8位)复用,可驱动4个LS型TTL负载。
(4)P3: P3口:8位准双向I/O口,双功能复用口(有第二功能),可驱动4个LS型TTL负载。
可以将P0和P2理解为纯粹的数据地址总线口。不要将它作为通常的输入输出口用。即:接灯可能不亮。
P1口面向用户的输入输出口,即:可以让P1口中8条口线任意一条接灯。
P3口:如果没有用到它的第二功能,就可以把它看做一个普通的I/O口来使用,即:可以接灯。
P3.6~3.7口:不能作为通常输入输出口使用。只能作为读写信号。
- 【注意】:准双向口与双向三态口的区别:当3个准双向I/O口作输入口使用时,要向该口先写“1”,另外准双向口无高阻的“悬空”状态。
2.3 CPU
【一】 运算器:对操作数进行算术、逻辑运算和位操作。运算器包括:8 位算术运算和逻辑运算的单元 ALU , 8 位的暂存器 1 ( TMP1 )、 暂存器 2( TMP2 ) , 8 位的累加器 ACC,寄存器 B 和程序状态寄存器 PSW 等
- 算术逻辑运算单元ALU:是进行运算的主要场地。
- 累加器A:使用最频繁的寄存器,可写为Acc。A的作用:
(1)是ALU单元的输入之一(给ALU提供数据),又是运算结果存放单元(存放ALU运算结果)。
(2)数据传送大多通过累加器A。
(3)A的进位标志Cy(A中是否有进位)同时又是位处理机的位累加器。
- 程序状态子寄存器PSW:反应CPU(尤其是ALU)的运行状态。一个字节大小。(寄存器是对地址进行操作的,这里的D0H是地址)。
(1)Cy(PSW.7):进位标志位。(最高位)
(2)Ac(PSW.6):辅助进位标志位,在DA指令时用到。
(3)F0(PSW.5):标志位,由用户使用的一个状态标志位。提供给用户的位。由用户定义使用。
(4)RS1、RS0(PSW.4、PSW.3):四组工作寄存器区选择控制位1和位0。(每一组寄存器对应8个字节,每一时刻只能有一组寄存器处于激活状态,即:只支持对8个寄存器的操作)。工作寄存区处于内部RAM区。【主要用于】:主程序运行过程时,突然发生突发事件,而突发事件也用到工作寄存器,这时,突发事件就可以用另外的工作寄存器(和主程序用的工作寄存器不同),这就能防止主程序在寄存器中的数据被修改,当突发事件被处理后,主程序又能按照原来的轨迹运行。通过改变RS0和RS1的状态来切换工作寄存器空间。
【接(4)说明】到底对哪8个寄存器进行操作?根据RS0和RS1不同的状态进行切换。
(5)OV(PSW.2):溢出标志位。指示指令运算是否溢出。
(6)PSW.1位:未使用,给厂家预留的,用户不可用。
(7)P(PSW.0):奇偶标志位。P=1:A中“1”的个数为奇数。P=0,A中“1”的个数为偶数。作用:在串行通信时使用,保证串行通讯,方法:奇偶交验。
- 寄存器B: 8 位寄存器,在乘、除运算时, B 寄存器用来存放一个操作数, 也用来存放运算后的一 部分结果;若不做乘、除运算,则可作为通用寄存器使用
- 89C51 片内还有一个布尔处理器,它以 PSW 中的进位标志位 CY 为其累加器 (在布 尔处理器及其指令中以 C 代替 CY ) ,专门用于处理位操作。如可执行置位、位清 0、位取反、位 等于 1 转移、位等于 0 转移、位等于 1 转移并清 0 以及位累加器 C 与其他可位寻址的空间之间 进行信息传送等位操作,也能使 C 与其他可寻址位之间进行逻辑“与”、逻辑“或”操作, 结果存 放在进位标志位(位累加器) C 中。
【二】控制器:包括:程序计数器 PC、指令寄存器 IR、指令译码器 ID、振荡器及定时电路等。
- 程序计数器PC:由两个 8 位的计数器 PCH 及 PCL 组成, 共 16 位。PC 实际上是程序的 字节地址计数器, PC 中的内容是将要执行的下一条指令的地址。改变 PC 的内容就可改变程 序执行的方向。
【工作方式】:
(1)程序计数器自动加1。
(2)执行有条件或无条件的转移指令时,程序计数器将被置入新的值。
(3)执行子程序或中断调用时:PC的当前值保护(把PC值压入栈)。将子程序入口地址或中断向量的地址送入PC。
- 指令寄存器IR、指令译码器ID:由PC中的内容指定ROM地址,取出来的指令经IR送至ID;由ID对指令译码并送PLA产生一定序列的控制信号,以执行指令所规定的操作。
- 控制逻辑电路:译码结束后由控制逻辑电路完成操作。
2.4 89C51存储器结构
89C51 片内有 Flash ROM (程序存储器, 只能读) 和 RAM ( 数据存储器, 可读可写 ) 两类,它们有各自独立的存储地址空间,与一般微机的存储器配置方式很不相同。
- 程序存储器(Flash ROM) :89C51 片内程序存储器容量为 4 KB, 地址从 0000 H 开始, 用于存放程序和表格常数。
- 数据存储器(RAM) :89C51 片内数据存储器为 128 字节, 地址为 00 H~7F H , 用于存放运算的中间结果、数据 暂存以及数据缓冲等。
在这 128 字节的 RAM 中,有 32 字节单元可指定为工作寄存器。这同一般微处理器不同,89C51 的片内 RAM 和工作寄存器排在一个队列里统一编址。
89C51 单片机内部还有 SP、DPTR、PCON、IE 和 IP 等21个特殊功能寄存器(SFR)。它们也同 128 字节 RAM 在一个队列里编址。地址为 80 H~FF H。这些特殊功能寄存器还包括 P0~P3 口锁存器
- 存储器结构分为:哈佛结构、普林斯顿结构
- 普林斯顿结构:只有一个地址空间,而ROM和RAM可以随意安排在一个地址范围内不同的空间,即ROM和RAM的地址同在一个队列分配不同的地址空间。CPU访问存储器时,一个地址对应一个唯一的存储单元,可以是ROM也可以是RAM,并用同类访问指令。
- 哈佛结构:【特点】:外程序存储器和数据存储器是分别寻址的。
- 从用户角度看,89C51存储器地址空间分为3类:
① 片内片外统一编址的64KB ROM: 0000H~FFFFH
② 64KB 片外RAM:0000H~FFFFH
③ 256字节片内RAM:00H~FFH
- 89c51指令系统设计了不同的访问指令,以区别3个存储区的访问。如:
①片内、外ROM 用: MOVC
②片外RAM用: MOVX
③片内RAM用:MOV
- 89C51程序存储器:【作用】:用于存放编好的程序和表格常数。分为 片内 和 片外 两部分。即:片内 ROM 和片外 ROM。
- 程序存储器通过 16 位程序计数器寻址, 寻址能力 为 64 KB。这使得指令能在 64 KB 地址空间内任意跳转, 但不能使程序从程序存储器空间转 移到数据存储器空间。
- 89C51 片内 Flash ROM 的容量为 4 KB,地址为 0000 H~0F FF H ;片外最多可扩至 64 KB ROM, 地址为 1000 H~FFF F H , 片内外统一编址。
- 当引脚EA接高电平时, 89C51 的程序计数器 PC 在 0000H ~0F FF H 范围内 ( 即前 4 KB 地址)执行片内 Flash ROM 中的程序; 当指令地址超过 0FF F H 后,就自动转向片外 ROM 中 去取指令
- 【注】:89C51 从片内程序存储器和片外程序存储器取指时执行速度相同。
- 89C51数据存储器:【作用】:用于存放运算的中间结果、数据暂存和缓冲、标志位等。分为 片内 和 片外 两部分。即:片内 RAM 和片外 RAM。
- 89C51 片外数据存储器空间为 64 KB, 地址从 0000 H~ FFF F H; 片内存储器空间为 256 字节,地址从 0000H~00F F H。
- 如上所示,片外数据存储器与片内数据存储器空间的低地址部分( 0000H~00FF H ) 是重叠的。
- 如何区别片内、片外 RAM 空间呢 ? 89C51 有 MOV 和 MOVX 两种指令, 用以区分 片内、片外 RAM 空间。
- 片内数据存储器最大可寻址 256 个单元, 它们又分为两部分: 低 128 字节 ( 00H~7FH ) 是真正的 RAM 区; 高 128 字节(80H~F F H )为特殊功能寄存器( SFR)区。
- 真正的RAM和SFR:
00H···1FH:32个单元,是4组通用工作寄存器区
20H~2FH:位寻址区。16个单元(字节),可进行128位的位寻址。【作用】:一般作为外部开关量的一个映射,比如:当前一个按键的状态。
30H ~ 7FH : 用 户 RAM区,只能进行字节寻址,用作数据缓冲区以及堆栈区
【注意】:80H···FFH是特殊功能寄存器。51系列这部分是成离散分布的。
20H~2FH:位寻址区,其中是按 00 H~7F H进行地址排序。可用位寻址方式访问其各位。位操作指令可直接对这 128 位寻址。
这 128 位的位地址为 00 H~7F H。89C51 采用不同寻址方式来加以区分,
- 访问 128 个位地址用位寻址方式。
- 访问低 128 字节单元用直接寻址和间接寻址。
这样就可 以区分开 00 H~7F H 是位地址还是字节地址
- 部分特殊功能寄存器:
(1 ) 累加器 ACC( E0H )
(2 ) 寄存器 B(F0 H )
(3 ) 程序状态寄存器 PSW(D0 H )
(4 ) 栈指针 SP(81H )
(5 ) 数据指针 DPTR( 83 H , 82H )
(6 ) I/ O 端口 P0~P3( 80 H ,90H , A0 H , B0 H )
- 当引脚EA接高电平时, 89C51 的程序计数器 PC 在 0000H ~0F FF H 范围内 ( 即前 4 KB 地址)执行片内 Flash ROM 中的程序; 当指令地址超过 0FF F H 后,就自动转向片外 ROM 中 去取指令。
2.5 一般的存储器结构
········································下面是网课笔记···································
- 一般的哈弗结构存储器空间可划分为5类:
(1)程序存储器(ROM)空间。(8031无内部程序存储器,8051内部存储器不可用)
(2)内部数据存储器(RAM)空间。
(3)特殊功能寄存器
(4)位地址空间(211个可寻址位)。能够进行位操作
(5)外部数据寄存器空间(片外可扩展64K字节的RAM,是外扩的数据存储器加上I/O口一共64K)。
- 内部数据存储器:指片内的数据存储器。
(1)51系列内部有128字节的RAM。00H···7FH。
(2)外部RAM(I/O口地址)。0000H···FFFFH的64K。外部RAM和I/O口总共占有64K。统一编址。
- 00H···1FH:00H~1FH:32个单元,是4组通用工作寄存器区
- 20H~2FH:位寻址区。16个单元(字节),可进行128位的位寻址。【作用】:一般作为外部开关量的一个映射,比如:当前一个按键的状态。
- 30H ~ 7FH : 用 户 RAM区,只能进行字节寻址,用作数据缓冲区以及堆栈区
- 【注意】:80H···FFH是特殊功能寄存器。51系列这部分是成离散分布的。
- 程序存储器:存放应用程序和表格之类的固定常数(用于复杂函数直接写一个表)。分为片内和片外,由EA引脚所接电平确定。程序存储器中的0000H地址是系统程序的启动地址(复位之后,PC的指针被赋值为0000,我们必须把我们编写的程序的第一条指令放在0000的地址上)。
- 内部ROM:内部含有ROM,EA=1。0000H···0FFFH。取址到0FFFH之后,会自动转到片外的ROM。
- 外部ROM:EA=0。0000H···0FFFH。就是8031之类内部没有ROM的。
- 从1000H···FFFFH是外部ROM。
- 特殊功能寄存器(SFR):(是一个具有特殊功能的RAM区)。它反应MCS51的状态(例如:PSW反应CUP的ACC的状态),实际上是MCS51的状态字及控制字(51系列内部的各个功能部件的控制字寄存器)寄存器。并不是CPU直接控制各部件,而是CPU给各部件的SFR写命令字,由这个SFR来控制部件,SFR也反应了各部件的工作状态。51系列一个21个SRF。离散分布的。
- 有的SRF可进行位寻址,其字节地址能被8整除(右移三位,这三位是余数)。
- 21 个SFR名称及分布:
- SFR中的部分寄存器:
3.1 【堆栈指针SP】:指示出堆栈顶部。在内部RAM块中的位置。复位后 ,SP中的内容为07H,即:指向 07 H 的 RAM 单元。默认从08H进行堆栈。堆栈向上生长,出栈后入先出。push和pop操作。SP的值在复位后可以被改写(防止占用那四组寄存器的位置),使用move操作,改变之后,从它的值进行堆栈。
堆栈的操作有两种片内 : 一种叫数据压入 ( PUS H ) , 另一种叫数据弹出 ( PO P)。
堆栈指针SP的作用:
(1)保护断点:进行子程序调用或中断子程序处理时,由硬件把PC程序指针堆入栈区。
(2)现场保护:对主程序进入到子程序或中断子程序时主程序所用到的寄存器单元的值进行保护。(如果不保护,恰好当子程序也用到这部分的寄存器时,主程序在寄存器中的值就会被改变)
堆栈指针SP的使用:
(1)在使用堆栈之前,先给 SP 赋值, 以规定堆栈的起始位置, 称为栈底。
(2)当数据压入堆栈后, SP 自动加 1, 即 RAM 地址单元加 1 以指出当前栈顶位置。
(3) 89C51 的堆栈指针 SP 是一个双向计数器。进栈时, SP 内容自动增值, 出栈时自动减值。
(4)存取信息必须按“后进先出”或“先进后出”的规则进行
3.2 【数据指针DPTR】:16位特殊功能寄存器,高位字节寄存器用DPH(存储高8位)表示,低位字节寄存器用DPL(存储低8位)表示。有专门的16位赋值语句。
(1)【作用】:DPTR 主要用于存放 16 位地址,以便对 64 KB 片外 RAM 作间接寻址。
3.3 【I/O端口P0~P3】:P0~P3分别为I/O端口P0~P3的锁存器。
3.4 【寄存器B】:为执行乘法和除法操作设置的。在不执行乘、除的情况下,可当作一个普通寄存器或一个 RAM 单元来使用。
3.5 【串行数据缓冲器SBUF】:存放欲发送或已接收的数据,一个字节地址,物理上是由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器。(如果执行“写”操作,经过译码之后自动存放到发送缓冲区中。如果是“读”操作,译码之后,CPU自动的从接受缓冲区中取数据)
3.6 【定时器/计数器】:两个16位定时器/计数器T1和T0,各由两个独立的8位寄存器组成: TH1、TL1、TH0、TL0,只能字节寻址,但不能把T1或T0当作一个16位寄存器来寻址访问。(只能8位8位的读或写,分高低8位分别读取)。
3.7 【程序状态寄存器 PSW(D0 H )】: PSW 是一个 8 位特殊功能寄存器, 它的各位包含了程序执行后的状态信息, 供程序查询 或判别之用。
- 位地址空间:支持按位操作的空间,我们把它放在一起,叫:位地址空间。211个(128个+83个)寻址位。位地址范围为:00H~FFH。分为两块。
(1)一:内部RAM的可寻址位128个(字节地址20H~2FH)。位地址划分为00H到7FH。
(2)二:特殊功能寄存器SFR(7FH~FFH)为83个(末位是0H或8H)可寻址位。
(3)位操作指令:对位进行操作。
- 外部数据存储器:51系列最多可扩展64K的RAM或I/O(RAM和I/O统一编址,占用64K空间)
(1)地址的重叠性
(2) 位地址空间共有两个区域
(3) 片外与片内数据存储器由指令来区分。从片内和片外读取数据的指令不同,MOVX是从片外取,其他的都是从片内取。
(4) 片外数据存储区中,RAM与I/O端口统一编址。所有外围I/O端口的地址均占用RAM地址单元,使用与访问外部数据存储器相同的传送指令。
- 程序存储器与数据存储器全部64K字节地址空间重叠。(RAM和ROM都是0000H到FFFFH,相当于两个房间用一个房间号)如何区分:(1)接线不同:PSEN接到程序存储器,RD和WR接到数据存储器(2)指令不同:通过不同的控制指令
- 程序存储器与数据存储器在使用上是严格区分的
- 【总结】:
(1)内部数据存储器:
(2)外部数据存储器:
(3)程序存储器:(地址线16位)【注】:注:EA =0,适用于内部没有ROM 的8031应用系统
- 51系列支持扩展64K的外部ROM。
- 通过EA管脚区分从片内还是片外读取。
- 可扩充4K.64K的RAM或I/O
- 统一编址。
- 00H~1FH:四组工作寄存器。
- 20H~2FH:位寻址区,既可以位寻址,又可以字节寻址。一般作为外部开关量或状态量。
- 30H~3FH:通用RAM区。堆栈区使用:断点保护和现场保护。临时存储一下数据
- 80H~FFH:特殊功能寄存器,离散的分布值21个SFR。除了这21个之外,其他的我们不能用。
- 52系列与51系列的区别:
(1)52系列比51系列多128字节的RAM(80H~FFH,和SFP的地址一样,通过不同的寻址指令进行区分:对SFR是直接寻址。对高128字节的RAM是间接寻址)。
(2)52系列一共256字节的RAM。
- 五种中断源的中断入口地址
[tr]中断源地址[/tr]
外中断INT0 | 0003H | 定时器T0 | 000BH | 外中断INT1 | 0013H | 定时器T1 | 001BH | 串行口 | 0023H |
- 编写中断子程序时,要把第一条指令放到中断入口的位置,然后在其后是一个跳转指令(因为在从0003H到000BH之间的地址存中断子程序的话,会存不下),跳转到其他的程序空间去执行中断程序。即:中断程序分为两块:一块放在中断入口。另外一块放在主程序空间。
- 【注意】:在主程序中避免放在这些中断入口地址处。所以,0000H处应该放一个跳转指令。跳转到0023H之后。
········································上面是网课笔记···································
2.6 并行I/O口
89C51 有 4 个与外部交换信息的 8 位并行接口, 即 P0~P3。它们都是准双向端口, 每个 端口各有 8 条 I/ O 线, 均可输入/ 输出。P0~P3 口 4 个锁存器同 RAM 统一编址, 可以把 I/ O 口当作一般特殊功能寄存器(SFR)来寻址。 除 4 个 8 位并 行口 外, 89C51 还 有一 个可 编程 的全 双 工串 行口 ( UART ) , 利 用 P3 .0 (RXD)和 P3 .1 ( TXD) , 可实现与外界的串行通信。
- 89C51单片机有四个8位并行I/O端口:
- P0、P1、P2和P3。
- 每个端口都是8位准双向口,共占32根引脚。
- 每一条I/O线都能独立地用作输入或输出。
- 每个端口都包括一个锁存器(即特殊功能寄存器P0~P3),一个输出驱动器和输入缓冲器,作输出是数据可以锁存,作输入时数据可以缓冲。
- 51系列共有4个8位双向I/O口,共32口线。每位均有自己的锁存器(SFR),输出驱动器和输入缓冲器。
1. P0口
P0口内部结构:
- P0口由一个输出锁存器、2 个三态输入缓冲器和输出驱动电路及控制电路组成。
- 驱动电路由上拉场效应管 FETT1 和驱动场效应管 FETT2 组成。
- P0口工作状态:
(1)P0口某位结构其工作状态受控制电路“与”门 4、反相器 3 和 转换开关 MUX 控制。
- 当 CPU 使控制线 C = 0 时,开关 MUX 拔 向 Q 输出端位置, P0 口为通用 I/ O;
- 当 C = 1 时,开关拨向反相器 3 的输出端, P0 口分时作为地址/ 数据总线使用。
- P0口的两个作用:
(1)P0口作为一般I/O口使用:P0 口可作一般 I/ O 口用, 但应外接 10 kΩ的上拉电阻, 才能高电平输出。
(2)P0口作为输出低 8 位地址/数据总线使用:
(3)综上所述: P0 口既可作一般 I/ O 端口 (用 89C51/ 8751 时 ) 使用, 又可作地址/ 数据总线使 用。作I/ O输出时,输出级属开漏电路, 必须外接 10 kΩ 上拉电阻, 才有高电平输出; 作I/ O输 入时,必须先向对应的锁存器写入 1, 使 FET ( T2 )截止, 不影响输入电平。当 P0 口被地址/ 数据总线占用时,就无法再作 I/ O 口使用了。
- P0 口用作输出地址/ 数据总线
- P0 口作输入口
- P0 口用作输出口
- P0 口用作输入口:在端口进行输入操作前,应先向端口锁存器写入 1 ,也就是使锁存器 Q = 0。因为控制线 C = 0, 因此 T1 和 T2 全截止,引脚处于悬浮状态, 可作高阻抗输入
- P0口(39~32脚)的内部结构:(作为数据地址口使用)
(1)作用:
(2)内部结构:
- 输出锁存器:
- 两个输入缓存器(BUF1和BUF2):
- 推拉式的I/O驱动器:
- 多路开关:【作用】:用于控制选通I/O方式还是地址/数据输出方式。【方式控制】:由内部控制信号产生。
(5)说明:
- 当控制信号为0时,P0口做双向I/O口,为漏极开路(三态)
- 控制信号为1时,P0口为地址/数据复用总线(用于口扩展)
- P0W为端口输出写信号,用于锁存输出状态
- P0R1为读锁存器信号,执行“ANL P0,#0FH”时该信号有效
- P0R2为读引脚信号,执行“MOV A,P0”时该信号有效
- 作为输入口使用时,应先向口锁存器写入全1,此时P0口的全部引脚浮空,可作为高阻抗输入。
- 在CPU访问片外存储器时,P0口为分时复用的低8位地址总线和8位数据总线。
2.P1口
P1口内部结构:
- P1口内部结构:
(1)内部有 上拉负载电阻与电源相连。实质上,电阻是两个场效 应管 ( FET ) 并在一起:
(2)在 P1 口中,它的每一位都可以分别定义作输入线或输出线使用。
- 一个 FET 为负载管, 其电阻 固定;
- 另一个 FET 可工作在导通或截止两种状态,使 其总电阻值变化近似为 0 或阻值很大两种情况。当 阻值近似为 0 时,可将引脚快速上拉至高电平; 当阻 值很大时, P1 口为高阻输入状态。
- P1 口是一个准双向口, 用作通用I/ O口。
- P1口:带内部上拉电阻的8位准双向I/O端口,每位能驱动4个LS型TTL负载
(1)输出部分有内部上拉电阻R*约为20K。
(2)其他部分与P0端口使用相类似(读引脚时先写入1)。
注意: 在端口用作输入时,也必须先向对应的锁存器写入 1, 使 FET 截止。
3.P2口
P2口内部结构:
- P2 口某位的结构与 P1 口类似, 驱动部分与 P1 口相同, 但比 P1 口多了一个 MUX 开关和转换控制部分
- P2口工作状态:
(1)当CPU对片内存储器和I/O口进行读/写(执行MOV指令或EA = 1时执行MOVC指令)时,由内 部硬件自动使开关MUX倒向锁存器的Q端, 这时,P2 口为一般 I/ O口。
(2)当CPU对片外存储器或 I/ O口进行读/写( 执行MOVX指令或 EA = 0 时执行MOVC 指令) 时, 开关倒向地址线 ( 右) 端, 这时, P2口只输出高8位地址,此时 P2 口无法再用作通用 I/ O 口。
- P2口:
(1)带内部上拉电阻的8位准双向I/O端口。
(2)在CPU访问片外存储器时,它输出高8位地址。
(3)在CPU访问8位地址的外部数据存储器(MOVX @R0,A)指令时,P2口引脚上的内容,在整个访问期间不会改变。
- P2口作为普通I/O口使用:
4. P3口
P3口内部结构:
- P3 口是一个多功能端口.
- 对比 P1 口的结构图不难看出, P3 口与 P1 口的差别在于多了“与非”门 3 和缓冲器 4。正是这两个部分, 使得 P3 口除了具有 P1 口的准双向 I/ O 功能之外, 还可以使用各引脚所具有的第 2 功能。“与非”门 3 的作用实际上 是一个开关,决定是输出锁存器 Q 端数据, 还是输出第 2 功能( W) 的信号。
- P3口:
(1)带内部上拉电阻的8位准双向I/O端口。
(2)P3口除作为一般I/O口外,每个引脚都有第二功能。
(3)第二功能表:
- P0~P3端口功能总结:
(1)使用中应注意的问题:
P0~P3口都是并行I/O口,但P0口和P2口还可用来构建数据总线和地址总线,所以电路中有一个MUX,进行转换。
而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无需转接开关MUX。
(2)只有P0口是一个真正的双向口,P1~P3口都是准双向口。
原因:P0口作数据总线使用时,为保证数据正确传送,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;否则应处于隔离状态。为此,P0口的输出缓冲器应为三态门。
(3)P3口具有第二功能。因此在P3口电路增加了第二功能控制逻辑。这是P3口与其它各口的不同之处。
(4)准双向口作输入口来使用时:先对它写“1”。实际造成中,MCS51单片机的硬件会自动写1。
(5)一般不把P0和P2口作为通常的I/O口来使用。
2.7 时钟电路与时序
- 反相放大器的输入端为 XTAL1 ,输出端为 XTAL2, 两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。
- 时钟电路用于产生单片机工作所必须的时钟控制信号。
- 时钟电路:时钟频率直接影响单片机的速度(频率越高,单片机速度越快),电路的质量直接影响系统的稳定性。
- 常用的时钟电路有两种方式:内部时钟方式和外部时钟方式。
(1)内部时钟方式:内部有一个用于构成振荡器的高增益反相放大器,其输入端:XTAL1,输出端:XTAL2。
(2)外部时钟方式:常用于多片MCS-51单片机同时工作
- 内部集成了一个高增益的反向放大器,可以和外部的晶振(这里图中这个是无源晶振)、电容,一起构成一个谐振电路(谐振放大器)。上电之后,这个放大器就会产生一个稳定的方波,这个方波的频率取决于外接的晶振的频率。
- C1和C2典型值通常选择为30pF左右。晶体的振荡频率在1.2MHz~12MHz之间。电容必须按图中接。
内部时钟:最常见的发式
外部时钟:
- 时钟周期:单片机的基本时间单位。
- 若时钟的晶体的振荡频率为fosc,则时钟周期Tosc=1/fosc。如fosc=6MHz,Tosc=166.7ns。即:时钟周期就是外接晶振的周期。
- 机器周期:CPU完成一个基本操作所需要的时间。
- 执行一条指令分为几个机器周期。每个机器周期完成一个基本操作。MCS-51单片机每12个时钟周期为一个机器周期。
- 一个机器周期又分为6个状态:S1~S6。每个状态又分为两拍:P1和P2(p1 和 p2赌对应振荡器的一个周期)。因此,一个机器周期中的12个时钟周期表示为:S1P1、S1P2、S2P1、S2P2、…、S6P2。
- 上图振荡器产生的方波信号称为时钟周期。在每个机器周期,ALE发出两个正脉冲。ALE信号只能作为地址锁存信号来用,不能当做时信号来对它计时。
- 判断CPU是否工作:用示波器来监视ALE管脚的脉冲信号。(有,则工作)。
- 指令周期:执行一条指令时需要的时间。
(1)执行一条指令时,可分为取指令阶段和指令执行阶段 。
- 取指令阶段,PC中地址送到程序存储器,并从中取出需要执行指令的操作码和操作数。
- 指令执行阶段,对指令操作码进行译码,以产生一系列控制信号完成指令的执行。
- ALE信号是为地址锁存而定义的,以时钟脉冲1/6的频率出现,在一个机器周期中,ALE信号两次有效(注意,在执行访问外部数据存储器的指令MOVX时,将会丢失一个ALE脉冲)
- 时钟电路:需外接晶振的频率1.2~12MHZ(频率越高越好),C1和C2取30±10PF
- CPU的时序(时钟周期、 状态周期、机器周期),一个机器周期等于12倍的时钟周期
例题:
2.8 复位操作和复位电路
- 复位操作:单片机的初始化操作,摆脱死锁状态(死机)。
(1)引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可使MCS-51复位。
(2)复位时,PC初始化为0000H,使MCS-51单片机从0000H单元开始执行程序。
(3)除PC之外,复位操作还对其它一些寄存器有影响,SP=07H ,P0-P3的引脚均为高电平。
(4)在复位有效期间,ALE脚(锁存允许端)和PSEN*脚(程序存储器选通端)均为高电平,内部RAM的状态不受复位的影响。
(5)下图的IE是中断允许寄存器,复位后全部置0,表示关闭所有中断。TL和TH表示计数器的初值。00FH表示1。
- 两种复位操作:上电自动复位和按钮复位。
(1)上电自动复位:根据电容电压不能突变,电阻的波形和电容“相反”,内部的施密特触发器会给RST输出1。
(2)按钮复位:有两种,电平方式(持续给出)和脉冲方式(给出一个脉冲)。Rk为复位按钮,
(3)兼有上电复位与按钮复位的电路
2.9 第二章习题总结
一、 如何简捷地判断89C51正在工作?
二、89C51 P0口用作通用I/O口输入时,若通过TTL“OC”门输入数据,应注意什么?为什么?
- 答:当P0口作输入口使用时,应先向口锁存器写入全1,此时P0口的全部引脚浮空,可作为高阻抗输入。 从P0口硬件图可知,在读入端口引脚数据时,由于输出驱动FET(T2)并接在引脚上,如果FET(T2)导通,就会将输入的高电平拉成低电平,从而产生误读。所以,在端口进行输入操作时,应先向端口锁存器写入1。
三、读端口锁存器和“读引脚”有何不同?各使用哪种指令?
- 答:读端口锁存器,使用“读-修改-写”指令,如执行“ANL P0,A”指令,它不直接读引脚上的数据,而是CPU先读P0口D锁存器中的数据;当“读锁存器”信号有效时,三态门缓冲器1开通,Q端数据送入内部总线和累加器A中的数据进行逻辑与操作,结果送回P0端口锁存器。这样避免错读引脚上的电平信号的可能性。 “读引脚”使用“MOV A,PO”。
四、89C51的P0~P3口结构有何不同?用作通用I/O口输入数据时,应注意什么?
- 答:89C51 P0~P3口结构相同之处:P0~P3都是准双向I/O口,做输入时,必须先向相应端口的锁存器写入“1”。
不同之处:P0口的输出级与P1~P3口不相同,它无内部上拉电阻,不能提供拉电流输出,而P1~P3口则带内部上拉电阻,可以提供拉电流输出。
当P0口作通用I/O口使用时,需外接上拉电阻才可输出高电平;但做地址/数据总线时,不需要外接上拉电阻。P1~P3口作通用I/O口使用时,均不需要外接上拉电阻。
|
|
2021-11-1 11:03:12
评论
举报
|
|
|