欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    单片机(教材)第二章 东北大学石亚和老师版.doc

    • 资源ID:56543403       资源大小:1.65MB        全文页数:23页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机(教材)第二章 东北大学石亚和老师版.doc

    第二章 89C51单片机的结构和原理 ATMEL、PHLIPS和SST等公司生产的8位单片机89C51与80C51兼容,具有低功耗高性能的特点,特别是在内部增加了闪速存储器Flash ROM,给单片机系统的开发应用带来很大方便,近年来得到非常广泛的应用。本章以AT89C51为基础,详细介绍芯片的内部硬件资源、各功能部件的结构和原理。2.1 89C51单片机内部结构及特点 2.1.1 基本组成 单片机是在一块硅片上集成了CPU、RAM、ROM、定时器/计数器、并行I/O接口、串行接口 等基本功能部件的大规模集成电路,又称为MCU。89C51单片机包含下列部件: 1. 一个MCS-51内核的8位微处理器(CPU); 2. 一个片内振荡器及时钟电路,最高允许振荡频率为24MHz; 3. 4KB程序存储器ROM,用于存放程序代码、数据或表格; 4. 128字节数据存储器RAM,用于存放随机数据,变量、中间结果等; 5. 4个8位并行I/O接口P0-P3,每个口都可以输入或输出; 6. 2个16位定时器/计数器,每个定时器/计数器都可以设置成定时器方式或者计数器方式; 7. 1个全双工串行口,用于实现单片机之间或单片机与PC机之间的串行通讯; 8. 5个中断源、2个中断优先级的中断控制系统; 9. 1个布尔处理机(位处理器),支持位变量的算术逻辑操作; 10. 21个特殊功能寄存器SFR(或称专用寄存器),用于控制内部各功能部件; 对外具有64KB的程序存储器和数据存储器寻址能力,支持111种汇编语言指令。 89C51单片机的内部结构如图2.1所示,其内部各硬件模块之间由内部总线相连接。 图2.1 MCS-89C51单片机的结构框图上图中,存储器容量和定时器/计数器数量随子型号的不同而有变化,见表2.1。表2.1 AT89系列单片机不同子型号的资源配置片内程序存储器容量片内数据存储器容量定时器/计数器数量89C51 4KB 128字节 289C52 8KB 256字节 389C2051 2KB 128字节 289C51是一种低功耗、低电压、高性能的8位单片机。它采用了CMOS工艺和高密度非易失存储器技术,而且其引脚和指令都与MCS-51系列单片机兼容。片内的Flash ROM可反复擦写1000次以上,非常适合于单片机产品的开发,可方便地应用于各种检测和控制领域。2.1.2 内部结构 89C51单片机内部结构如图2.2所示。 图2.2 89C51单片机内部结构 一个完整的计算机应该由中央处理单元CPU(运算器和控制器)、存储器(ROM和RAM)、和I/O接口组成。89C51的各部分功能简述如下:1. 中央处理单元CPU CPU是单片机的核心,由运算器和控制器组成,负责单片机的运算和控制。 (1)运算器ALU运算器包括一个可进行8位二进制数的算数和逻辑运算单元ALU,暂存器1、暂存器2,8位的累加器ACC,寄存器B和程序状态字PSW等。算数运算是指加、减、乘、除四则运算,运算时按从右到左的次序,并关注位与位之间的进位或借位;逻辑运算是指与、或、非、异或、求反、移位等操作,运算时按位进行,但各位之间无关联。ALU:可对4位(半字节)、8位(单字节)和16位(双字节)数据进行操作,能执行加、减、乘、除、加1、减1、BCD数的十进制调整及比较等算术运算和与、或、异或、求补及循环移位等逻辑操作。 累加器:累加器ACC是使用最频繁的一个专用寄存器。在算数和逻辑运算中,经常使用累加器做为一个操作数,并且保存运算结果。在某些操作中,必须要有累加器的参与,比如对外部数据存储器的操作等。程序状态字:写为PSW,8位,用来指示指令执行后的状态信息,相当于一般微处理器的状态寄存器。PSW中的各位状态供程序查询和判断使用,可构成程序的分支和转移。寄存器B:8位寄存器,直接支持8位的乘除法运算,作为一个参与运算的操作数,并保存部分运算结果。当不做乘除法时,也可做通用寄存器。另外,89C51单片机中还有一个布尔处理器,即位处理器,它以程序状态字中最高位C(即进位位)作为位累加器,专门用来进行位操作。能对可位寻址的空间地址进行置位、清零、取反、测试、位传送,位逻辑运算等操作。 (2)控制器 控制器包括程序计数器PC、指令寄存器IR、指令译码器ID、振荡器及定时电路等。 程序计数器PC:由两个8位计数器PCH和PCL组成。该寄存器中总是存放下一条要执行的指令的地址,改变PC的内容就可以改变程序执行的走向。程序计数器对使用者来说是不可见的,也没有指令可以对PC进行赋值。单片机复位时,PC的初始值是0000H,因此第一条指令应该放置在0000H单元。执行对外部存储器或I/O接口操作时,PC的内容低8位从P0口输出,高8位从P2口输出。 既然不能用指令给PC赋值,那么它是如何运行的呢?在顺序执行指令时,每读取一个指令字节,PC就自动加1;而当响应中断、调用子程序和跳转时,PC的值要按一定规律变动,由系统硬件自动完成。指令寄存器IR和指令译码器ID:指令寄存器用于存放指令代码。CPU执行指令时,从程序存储器中读出的指令代码被送入指令寄存器,经指令译码器译码后由定时与控制电路发出相应的控制信号,完成指令功能。振荡器及定时电路:89C51单片机内部有振荡电路,只需外接石英晶体和频率微调电容(2个30pF左右的小电容),频率范围为0-24MHz。该脉冲信号就是89C51工作的基本节拍,即时间的最小单位。2. 存储器89C51单片机芯片上有两种存储器,一种是可编程、可电擦除的程序存储器,称为Flash ROM;另一种是随机存储器RAM,可读可写,断电后RAM内容也会丢失。 程序存储器(Flash ROM)89C51片内程序存储器容量为4KB,地址范围是0000H-0FFFH,用于存放程序和表格常数。 数据存储器(RAM)89C51片内数据存储器容量为128字节,使用8位地址表达,范围是00H-7FH,用于存放中间结果、数据暂存和数据缓冲等。在这128字节的RAM中,有32字节可指定为工作寄存器。这和一般微处理器不同,89C51的片内RAM与工作寄存器都安排在一个队列里统一编址。从图2.2中可以看到,89C51内部还有SP、DPTR、PSW、IE等许多特殊功能寄存器,简称为SFR(Special Function Register),这些SFR(共21个)的地址紧随128字节片内RAM之后,离散地分布在80H-0FFH地址范围内。高128字节中有许多地址单元在物理上是不存在的,对它们进行读操作会得到不可预期的结果。3. I/O接口89C51有4个与外部交换信息的8位并行I/O接口,即P0-P3。它们都是准双向端口,每个端口有8条I/O线,都可以输入或输出。这4个口都有端口锁存器地址,它们属于SFR。2.2 89C51单片机引脚及功能 89C51单片机有40引脚双列直插方式(DIP)和44引脚方形封装方式,以40引脚的比较常见。图2.3 给出了DIP方式的89C51单片机引脚配置图,引脚说明表见附录。 图2.3 MCS-89C51单片机引脚配置图 上图中,左侧为按引脚排列的实际芯片配置情况,右侧为按逻辑分类的示意图。一般习惯上,若给出芯片豁口,则表示引脚是按实际情况排列;若无芯片豁口,则表示是按功能逻辑排列。在电路设计中经常使用右侧的方式来进行原理图设计,可使原理图更清晰明确。89C51单片机的40个引脚可大致分为3大类:1. 电源、地和外接晶体引脚 VCC:芯片电源,为+5V VSS:接地端 XTAL2:接外部晶体的一端。在单片机内部,它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体的固有频率。当采用外部时钟电路时,该引脚悬空。当单片机内部振荡电路正常工作时,可从这个引脚探查到振荡脉冲信号。XTAL1:接外部晶体的另一端。在单片机内部,它是振荡电路反相放大器的输入端。当采用外部时钟信号时,外部脉冲从该引脚输入。 2. 输入输出(I/O)引脚共4个8位并行I/O口,分别命名为P0、P1、P2、P3。P0口(P0.0-P0.7):P0口是漏极开路的8位准双向I/O端口。输出时,每位能驱动8个TTL负载。做为输入口使用时,要先向口锁存器写入全“1”,可实现高阻输入。这就是准双向的含义。在CPU访问片外存储器时,P0口分时提供低8位地址和做为8位双向数据总线。当做为地址/数据总线时,P0口不再具有I/O口特征,此时P0口内部上拉电阻有效,不是开漏输出。P1口(P1.0-P1.7):P1口是带有内部上拉电阻的8位准双向I/O口。P1口的输出缓冲器能驱动4个TTL负载。P2口(P2.0-P2.7):P2口是带有内部上拉电阻的8位准双向I/O口。P2口的输出缓冲器可驱动4个TTL负载。在访问外部程序存储器或16位地址的外部数据存储器(如执行MOVX DPTR指令)时,P2口送出高8位地址。在访问8位地址的外部数据存储器(如执行MOVX R0指令)时,P2口引脚上的内容(即P2口锁存器的内容)在访问期间保持不变。P3口(P3.0-P3.7):P3口是带有内部上拉电阻的8位准双向口。P3口的输出缓冲器可驱动4个TTL负载。在89C51中,P3口还有一些复用功能,见第2.4.4小节。3. 控制信号引脚这类信号比较杂乱,但非常重要,它们是:ALE:地址锁存允许信号,下降沿有效,输出。当89C51上电复位正常工作后,ALE引脚不断输出正脉冲信号,大致是每个机器周期2个脉冲。CPU访问片外存储器时,ALE信号用于从P0口分离和锁存低8位地址信息,其输出脉冲的下跳沿用作低8位地址的锁存信号。平时不访问片外存储器时,ALE引脚以振荡频率的1/6输出固定脉冲。但是当访问外部数据存储器时(即执行MOVX类指令),ALE脉冲会有缺失,因此不宜用ALE引脚做为精确定时脉冲。ALE端能驱动8个TTL负载。用示波器检测该引脚是否有脉冲输出,可大致判断单片机是否正常工作。RESET:复位信号,高电平有效,输入。当这个引脚维持2个机器周期的高电平时,单片机就能完成复位操作。/PSEN:程序存储器读选通,低电平有效,输出。当89C51从片外程序存储器取指令时,每个机器周期/PSEN两次有效。/PSEN引脚也能驱动8个TTL负载。/EA:片内外程序存储器选择控制端,输入。当/EA接高电平时,CPU先访问片内程序存储器,当程序计数器PC的值超过4KB范围时自动转去执行片外程序存储器的程序。当/EA端接地时,CPU只访问片外ROM,而不论是否有片内程序存储器。 2.3存储器结构和配置89C51单片机的存储器结构与传统计算机不同。一般微机不区分ROM和RAM,而把它们统一安排在同一个物理和逻辑空间内。CPU访问存储器时,一个地址对应唯一的一个存储器单元,所使用的指令也相同,但控制信号不同。另外对I/O端口采用独立的译码结构和操作指令。这种配置方法称为普林斯顿结构,PC机上采用这种方式。89C51单片机的存储器在物理结构上分为程序存储器空间和数据存储器空间,共有4个空间:片内程序存储器和片外程序存储器空间以及片内数据存储器和片外数据存储器空间。这种两类存储器分开的形式称为哈佛结构。需要注意的是,I/O端口地址也包含在片外数据存储器空间范围之内。从编程者的角度看,89C51单片机存储器地址分为以下三种:* 片内外统一编址的64K程序存储器空间,16位地址,地址范围0000H-0FFFFH;* 片外64K数据存储器地址空间(含I/O端口),16位,地址范围0000H-0FFFFH;* 片内数据存储器地址空间,8位,地址范围00H-7FH,容量为128字节。此外,89C51单片机的专用寄存器共有21个,它们离散地分布在片内RAM地址的高128字节区间。如果子型号有256字节片内RAM,则用不同的寻址方式来区别高128字节RAM和专用寄存器。89C51单片机的存储器空间配置如图2.4所示。 图2.4 89C51单片机的存储器空间配置上图的几点说明:1. 对于片内无ROM的子型号如8031,应将/EA引脚接地,程序存储器全部存放在片外ROM,地址空间为0000H-FFFFH;对于片内带有flash的子型号如89C51,应将/EA端接高电平,系统先执行片内的4K程序,再转去执行片外的最多60kB程序。2 关于数据存储器,片内部分有128字节和256字节之分。52子系列的片内RAM是256字节,其高128字节的地址与专用寄存器的地址空间重叠,这时要用指令的不同类型来分别寻址:对专用寄存器,只能用直接寻址方式;对高128字节RAM,只能用寄存器间接寻址方式。另外,还需要注意到,片外64K数据存储器空间还包含I/O端口地址在内。显然,对单片机来说,I/O端口数的理论上限可以是64K个。3. 对于程序存储器,片内和片外两部分在物理上是分离的,逻辑上是统一的。所谓逻辑上统一,是指它们的地址是连续安排的,片内部分为0000H-0FFFH,片外部分紧接着为1000H-0FFFFH,是一个统一的整体空间;而对于数据存储器,片内和片外两部分在物理上和逻辑上都是分开的。片内128字节的地址为00-7FH,片外部分是0000H-0FFFFH。可以看到,这些地址空间有重叠的部分,那么如何区分这3个不同的地址空间呢?89C51的指令系统设计了不同的数据传送指令:CPU访问程序存储器时使用MOVC型指令,访问片外RAM(以及I/O端口)时使用MOVX型指令,而访问片内RAM时使用MOV型指令。执行不同指令时,CPU会发出不同的控制信号:访问片外ROM时发出/PSEN信号,访问片外RAM或I/O时发出/RD或/WR信号,访问片内RAM时,不发出外部控制信号。2.3.1程序存储器空间 89C51单片机存储器地址空间分为程序存储器(64KB ROM)和数据存储器(64KB RAM)。程序存储器用于存放程序和表格常数,通过16位程序计数器寻址,寻址能力为64KB。执行指令时可以在64KB空间内任意跳转,但不能跳转到数据存储器空间。程序存储器是非易失性的,程序一旦写入,不会因停电而丢失。 89C51片内的闪速程序存储器(Flash ROM)容量为4KB,地址范围是0000H-0FFFH;片外最多可扩充60KB的ROM,地址范围为1000H-0FFFFH,片内外统一编址。必须注意,程序存储器容量可以小于64KB,但地址空间必须连续,中间不能有“空洞”。 当/EA端接高电平时,89C51的程序计数器PC在0000H-0FFFH范围内执行片内程序;当指令地址超过0FFFH后,就自动转向片外ROM去取指令。 如果/EA端接为低电平,则89C51放弃片内的4KB程序空间,CPU只能从片外ROM中取指令,这时要求片外ROM地址从0000H单元开始。 程序存储器中有一些单元地址是留给系统使用的,具体如下: 0000H:复位入口,单片机复位后,总是从这个地址开始执行程序,可安排一条短跳转指令跳过下面的中断入口,例如跳转到0030H。 0003H-0023H:各中断服务子程序入口,详见中断部分叙述。2.3.2数据存储器空间数据存储器RAM用于存放运算的中间结果、数据暂存和缓冲、状态标志等。数据存储器空间也分为片内和片外两部分。片内存储器为128字节,地址是8位的,范围为00H-7FH;片外存储器为64KB,16位地址,范围为0000H-0FFFFH。1. 片内RAM89C51单片机的片内数据存储器为128字节(89C52为256字节)。这部分资源非常重要,工作寄存器区、位寻址区和堆栈都在这个区域内。片内RAM地址短,执行速度快,在用汇编语言编写的程序中约有50%的指令要和这些寄存器打交道。除了上述比较特殊的用途外,其他单元可用于存放运算的中间结果、数据暂存及缓冲等。 图2.5 片内128字节RAM区的功能划分片内RAM的功能划分情况见图2.5。00H-1FH的32个单元为4个工作寄存器区,分别称为工作寄存器0区、1区、2区和3区,每区8个字节,并命名为R0-R7。以0区为例,此时字节地址00H与工作寄存器R0等价,字节地址01H与R1等价。,不过使用寄存器名字直观简便,并使指令代码优越得多。任何时候,CPU只能使用某一个特定的工作寄存器区。通过对程序状态字PSW中的RS1、RS0进行设置,可以选定和切换当前使用的工作寄存器区。通常,主程序使用0区,低级中断程序使用1区,高级中断程序使用2区,3区作为备用。如果某些区不作为工作寄存器,也可以当作普通RAM单元使用。CPU复位后,默认寄存器0区为工作寄存器。假设当前使用工作寄存器0区,则工作寄存器R7的地址是07H;如果当前使用工作寄存器1区,则此时的R7地址就变成0FH。请考虑,如果当前使用的是2区,那么此时R1的地址是多少?随后的16字节20H-2FH是可位寻址区,这些单元除了具有字节地址外,每个单元还有自己的位地址。从20H单元到2FH单元,位地址范围为00H-7FH,恰好与整个RAM区的字节地址范围相重合。例如字节地址为20H的单元,其位地址从低到高依次为00H-07H,以下类推。可以通过指令类型来区分字节地址和位地址。单片机指令系统中有许多位操作指令,可以直接使用这些位地址,这能使许多复杂的逻辑关系运算变得十分简便。此外,在程序中也可以运用这些位地址设置状态变量,比使用字节地址更加节省硬件资源。例如分别用位地址内容的1 或0来代表定时时间到/未到,减法运算有借位/无借位,超报警限/未超限等等。89C51单片机系统的堆栈也规定在这个RAM区域内。单片机复位后,堆栈指针的初始值为07H。通常在主程序开始处用指令将堆栈指针转设到内部RAM较高地址区域,以免影响工作寄存器各区的正常使用。2. 片外RAM当89C51系统的片内RAM不能满足要求时,可以扩展片外RAM。片外RAM的最大扩展空间为64KB,I/O接口器件的端口地址也包含在这个空间里。当片外扩展的RAM容量超过256字节时,要使用P0口分时作为低8位地址线和双向数据总线,用P2口传送高8位地址信息。图2.6是89C51单片机扩展8KB片外RAM的硬件连接图。 图2.6 89C51扩展8KB外部RAM的连接电路在图2.6的情况下,89C51单片机的P0口和P2口都作为系统总线使用,不能再作为通用I/O口。其中P0口既是系统的双向数据总线,又是低8位地址总线。必须注意,低8位地址和数据总线的分离是通过锁存器实现的,并且必须用单片机的ALE信号来控制锁存操作。系统的16位地址线由锁存器输出的低8位和P2口输出的高8位联合组成。图2.6中扩展了8KB的片外RAM,因此只使用了P2口中的5条线即P2.0-P2.4,但是这时P2口剩余的3条线也不宜再作为I/O线使用。另外还可以看到,对片外RAM的读写操作要用到单片机的/RD和/WR控制信号。2.3.3专用寄存器专用寄存器也叫特殊功能寄存器或者简写为SFR,共有21个,它们离散地分布在80H-FFH地址空间内,只能用直接寻址方式进行访问。这些寄存器涉及对片上硬件资源的调度和控制,大体可分为两类:控制寄存器和常数寄存器。其中控制类的多数都能位操作,其地址的特点是低半字节为0或8,详见表2.2所示。1. 累加器A(0E0H):A累加器是使用最频繁的8位SFR,许多指令的操作数都包含A累加器,算术和逻辑运算更离不开它。表2.2 特殊功能寄存器地址表D7 位地址 D0字节地址SFR寄存器名P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.080 P0*P0口锁存器878685848382818081SP堆栈指针82DPL数据指针83DPHSMOD87PCON电源控制TF1TR1TF0TR0IE1IT1IR0IT088TCON*定时器控制8F8E8D8C8B8A8988GATEC/TM1M0GATEC/TM1M089TMOD定时器方式8ATL0T0低字节8BTL1T1低字节8CTH0T0高字节8DTH1T1高字节P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.090P1*P1口锁存器9796959493929190SM0SM1SM2RENTB8RB8TIRI98SCON*串行口控制9F9E9D9C9B9A999899SBUF收发缓冲器P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0A0P2*P2口锁存器A7A6A5A4A3A2A1A0EAESET1EX1ET0EX0A8IE*中断允许AF ACABAAA9A8P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0B0P3*P3口锁存器B7B6B5B4B3B2B1B0PSPT1PX1PT0PX0B8IP*中断优先级 BCBBBAB9B8CYACF0RS1RS0OV PD0PSW*程序状态字D7D6D5D4D3D2D1D0E0A*A累加器E7E6E5E4E3E2E1E0F0B*B寄存器F7F6F5F4F3F2F1F0注1:带*号的SFR既可以字节寻址也可以位寻址。注2:寄存器B的字节地址和最低位的位地址都是F0,而程序状态字PSW D5位的F0是其位名称而非地址, 两者并无冲突。注3:定时器方式控制寄存器TMOD,虽然给出了各位的名称,但它是不可位寻址的。注4: “-”表示该位无定义。2. 寄存器B(0F0H):在乘、除法指令中用到寄存器B。乘法指令用到两个操作数分别来自A和B,乘积的高字节存放在B,低字节存放在A;除法指令中,A中为被除数,B中为除数,商存放在A,余数存放在B。 3. 程序状态字PSW(0D0H): PSW是8位的专用寄存器,它的各位包含了程序执行后的状态信息,供程序查询或判别用。各位的含义及其格式如表2.3所示。表2.3 程序状态字PSW定义 注意,对所有可位寻址的专用寄存器,其最低位的位地址与其字节地址相同。 CY:进位/借位标志。在执行加法或减法运算时,如果运算结果最高位向前发生进位或借位时,CY位会被自动置位为1,不管此前该位的值是什么;如果运算结果最高位无进位或借位,则CY清零,不管此前该位的值是什么。CY的值总是反映最近一次加减法操作后的结果状态。CY也是进行位操作时的位累加器, 简写为C。 AC:半进位标志或称辅助进位标志。当执行加法或减法操作时,如果低半字节(位3)向高半字节(位4)有进位或借位,则AC位将被硬件自动置位为1,否则清零。F0:用户标志位。此位系统未占用,用户可以根据自己的需要对F0的用途进行定义。RS1和RS0:工作寄存器区选择位。这两位的值指定当前使用哪个工作寄存器区,可用指令改变其数值组合,以便切换工作寄存器区。数值组合与工作寄存器区关系见表2.4。表2.4 RS1、RS0数值与工作寄存器区对应关系 单片机上电复位后,RS1和RS0都为0,因此默认使用工作寄存器0区。如果要改变当前工作寄存器区,可以采用字节操作或位操作两种方式,后者更快捷。这样的设置为程序中快速保护和恢复现场提供了便利。 OV:溢出标志位。当进行补码运算时,如果发生溢出,即表明运算结果超出了一字节补码能表达的数据范围-128+127,此时OV由硬件置位为1;若无溢出,则OV为0。具体是否溢出的判断方法是,若最高位和次高位不同时向前进位,则发生溢出,否则无溢出。每当进行运算时进位位和溢出位都进行客观变化,不过,进行无符号数运算时关注进位位,进行补码运算时关注溢出位。PSW.1:保留位。单片机产品设计时有许多这类情况,凡是在某位置为短横线的情况,都是指该型号产品此位暂无定义。对无定义的位执行读操作会有不确定的结果,应避免。P:奇偶校验位。每条指令执行后,该位始终反映A累加器中1的个数的奇偶性。如果A中1的个数为奇数个,则P=1,反之P=0。此功能可以用于校验串行通讯中数据传送是否出错,称为奇偶校验。 4. 堆栈指针SP(81H) 堆栈指针SP(Stack Pointer)是8位的专用寄存器,它可以指向单片机片内RAM 00H-7FH的任何单元,因此堆栈的最大理论深度是128字节。系统复位后,SP的初始值为07H。堆栈概念:堆栈是一类特殊RAM,它尊从“后进先出”的法则,这种结构对于处理中断和子程序调用都非常方便。89C51单片机的堆栈是向上生成的,在使用前应先对指针赋初始值。所谓向上生成,是指随着数据字节进入堆栈,堆栈的地址指针不断增大。堆栈操作有压栈和出栈两种。压栈时,指针先加1,再把数据字节压入;出栈时,次序相反,是先弹出数据内容,指针再减1。 影响堆栈的情况有: 使用压栈和弹栈指令,分别是PUSH和POP,每次操作一字节; 当响应中断请求时,下一条要执行的指令代码地址自动压入堆栈,共2字节;且当中断返回时自动将所压入的2字节弹出堆栈回送给程序计数器PC。这个过程是系统自动完成的,无须程序干预; 当调用子程序时,调用指令之后的下一条指令地址自动进栈,共2字节;当子程序返回时该2字节自动弹出。堆栈的作用:用压栈和弹栈指令进行快速现场保护和恢复;在中断和调用子程序时自动保护和恢复断点; 利用堆栈传递参数。 5. 数据地址指针DPTR(83H、82H,高字节在前) 数据地址指针DPTR(data pointer)是一个16位的专用寄存器,由高字节DPH和低字节DPL组成。DPTR可以作为一个16位寄存器使用,也可以按高低字节分别操作。DPTR的主要用途是当操作外部RAM或I/O端口时存放一个16位的地址。此外DPTR还可以作为查表操作时的基地址。6. 并行I/O口锁存器P0-P3(80H,90H,A0H,B0H) P0-P3是4个专用寄存器,分别是4个并行I/O口的口锁存器。它们都有字节地址和位地址,并且每条I/O口线都可独立定义为输入或者输出。输出具有锁存功能,输入具有缓冲功能。其他SFR在后续章节中介绍。除了这21个SFR外,89C51单片机中还有一个16位的程序计数器PC(Program Counter),它是不可寻址的。2.4单片机的并行I/O接口89C51单片机有4个8位并行I/O口,分别称为P0、P1、P2、P3。共有32条I/O口线,每条I/O线都可以独立定义为输出或输入。每个端口都包括一个输出锁存器(即专用寄存器Pi)、一个输出驱动器和一个输入缓冲器。这4个I/O口既有相似的特征,也有功能和结构上的区别。89C51单片机输出时,是对口锁存器执行写操作,数据通过内部总线写入到口锁存器,并通过输出级反应在外部引脚上。而读操作时有两种不同情况,分别叫做读锁存器和读引脚。各I/O口每位的结构中,都有两个输入缓冲器,分别可将锁存器输出和外部引脚状态读回到CPU中。一般情况下,锁存器输出端和外部引脚的状态应一致。但在一些特定情况下两者可能不一致,设置读锁存器功能就是为了防止出现误读的现象。这4个I/O口都称为准双向I/O口。所谓准双向,是指输入输出状态间的切换是有附加条件的。具体为:当从输出改为输入时,要先向口写“1”。2.4.1 P0口结构及功能 图2.7 P0口的位结构图2.7画出了P0口一个位的结构。它由一个输出锁存器、2 个三态输入缓冲器、输出驱动电路和控制电路组成。图中1和2是缓冲器,3是逻辑非门,4是逻辑与门。 1. P0作为通用I/O口当89C51单片机系统无外部并行存储器时,不执行MOVX类指令,亦即不需要外部地址数据总线。这时由硬件自动使控制线C=0,封锁与门4,使场效应管T1截止。在无地址/数据信息输出的情况下,多路开关拨向图中所示的位置,它把锁存器反向输出端与输出级T2联通。输出时,数据从内部总线经锁存器D输入端进入,从反向端/Q输出,再经过输出级的2次反向,在外部引脚上得到正确的输出逻辑电平。注意此时输出是漏极开路的状态,对于这种情况下的应用,通常要在引脚外部加接10k欧姆左右的上拉电阻。输入时,通过读引脚指令打开缓冲器2使外部引脚的状态经缓冲器进入内部总线到CPU。若为读锁存器操作,则锁存器输出内容直接经缓冲器1读回。必须注意,如果某个口线为双向应用的,即:时而输出,时而输入,则当从输出改为输入时必须先向口写1,然后再进行输入操作。这是因为如果此前的输出数据为0,则输出级处于导通状态,该引脚被强制钳位为低电平,它能把外设高电平信号强行拉低。为了避免读错信息,需要在进行输入前先向口写1,关断输出级,使引脚处于高阻输入状态。读锁存器的操作也叫做“读-修改-写”操作,它是以口为目的的逻辑操作。这种指令直接读锁存器而不是读端口引脚,可以避免读错引脚上的电平信号。例如,用一根I/O线驱动一个晶体管的基极,当向此口线输出1时,三极管导通并把引脚上的电平拉低。这时如果CPU读取引脚上的信息,就会把数据误读为0;而如果从锁存器读取,就能获得正确的结果。 2. P0作为地址/数据总线当89C51单片机需要外部扩展存储器或者并行I/O接口器件时,系统必须提供地址和数据总线。CPU对片外存储器进行读/写操作(执行MOVX指令或进行片外取指令)时,由内部硬件自动使控制线C=1,使与门4解锁,开关MUX拨向反相器3输出端。这时,外部引脚(经输出级T2)与锁存器反向输出端/Q断开,而与地址/数据输出端联通。这种情况下P0口不再是I/O口,而是系统的分时复用地址/数据总线。输出低8位地址/数据信息:MUX开关把CPU内部地址/数据线输出的内容经反相器3与输出驱动场效应管T2的栅极接通。输出信息经反相器3和输出级T2的再次反向,使正确的信息出现在引脚上。P0口作为总线应用时,T1和T2构成推挽式输出驱动,无需外部上拉电阻,且驱动能力很强。输入8位数据:这种情况是在读引脚信号有效时打开输入缓冲器2,使外部数据进入内部总线。P0口小结:P0口既可作一般的I/O口,又可作为地址/数据总线。不同应用情况下的硬件构成不同,因此呈现出不同的特点:做I/O输出时,输出级是开漏电路,必须外接10k上拉电阻;做I/O输入时,必须先向口写1,使T2截止形成高阻输入状态才能正确读取输入电平。当P0口作为地址/数据总线使用时是推挽输出、高阻输入的,无需外接上拉电阻。当P0口被作为总线使用时,就不能再作为I/O口使用。2.4.2 P1口结构及功能 P1口是一个准双向通用I/O口,其一个位的结构见图2.8。与P0口比较,P1口无切换开关,其锁存器反向输出端直接连接到输出级场效应管T的栅极,并且具有内部上拉电阻R*。该上拉电阻实质上是两个场效应管并接在一起:一个为负载管,其电阻固定;另一个可工作在导通和截止两种状态下,使其总电阻值变化近似为0或阻值很大两种情况。这可以改善动态响应,使引脚上的电平在从1到0或从0到1 的变化过程中速度很快。 图2.8 P1口一个位的结构 在P1口中,每个位都可以独立定义为输入线或输出线。输出1时,将1写入口锁存器,锁存器的反向输出为0,使输出级场效应管截止,引脚上输出为高电平逻辑。输出0时,输出级场效应管导通,则输出引脚为低电平。当进行输入操作时,也必须先向口写1,使输出场效应管截止,实现高阻输入。CPU读取P1引脚状态时,其实就是读取外部引脚上的信息。外部引脚电平状态经输入缓冲器2进入到CPU。 2.4.3 P2口结构及功能 P2口也是一个准双向口,其一个位的结构如图2.9所示。 图2.9 P2口的位结构P2口与P0口和P1有相似的部分,但又不尽相同。P2口既可以作为通用I/O口,也可以作为高8位地址总线,因此它也有一个切换开关。当CPU对片外存储器和I/O口进行读写操作时,开关倒向地址线端,这时P2口是地址总线,只输出高8位地址;当不执行MOVX指令,也不从外部ROM中读取指令时,开关倒向锁存器的Q输出端,这时P2口可作为通用I/O口。在同一个系统中,P2口只能定义为I/O口或者地址总线,不能二者兼得。当P2口作为高8位地址总线使用时,是整个端口一起定义的,这时即使8条地址线没有用完,剩余的口线也不宜再作为I/O口线使用。应注意P2口锁存器是从Q端输出的,为了逻辑的配合,在输出级到栅极控制端之间加了一个反向器。P2口也是带有内部上拉电阻的。 在单片机应用系统设计中,若片内程序存储器空间满足需要,且片外数据存储器容量不超过256字节,则不需要高8位地址总线,这时就可以把P2口作为通用I/O口来使用。2.4.4 P3口结构及功能 P3口是一个多功能口,其位结构如图2.10所示。P3口的结构比前3个口显得复杂。它多出的与非门3和缓冲器4使得本口除了具有通用I/O口功能外,还可以使用各引脚所具备的第二功能。与非门3是一个开关,输出时,它决定是输出锁存器Q端数据还是第二功能信号。如图2.10,当W=1时,输出Q端信号;当Q=1时,输出W线(即第二功能)信号。编程应用时,可不必考虑P3口某位应用于何种功能。当CPU对P3口进行专用寄存器寻址(字节或位)时,由内部硬件自动将第二功能输出线W置1,这时P3口(或对应的口线)是通用I/O口(或I/O线)。当CPU不对P3口进行SFR寻址访问时,即

    注意事项

    本文(单片机(教材)第二章 东北大学石亚和老师版.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开