51单片机,程序,二进制,高低电平触发器,触发器,有什么联系

6264与51单片机扩展_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
6264与51单片机扩展
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢单片机原理及接口技术14
单片机原理与接口技术 教材说明D十五”规划教材《单片机原理及接口技术》 ----胡建 主编 刘玉宾 朱焕立 等编著 2005年 机械工业出版社 参考资料1, 《单片机实用教程》 ----胡健 兵器工业出版社 2001 2,《单片机应用程序设计基础》 ----周行慈 北京航空航天大学出版社 19913,《单片机基础》 ----李广弟 北京航空航天大学出版社 2001 4,《单片机原理及接口技术》 ----李朝青 北京航空航天大学出版社 1999 本课主要内容及课时安排总讲课课时 学时?第一章:计算机基础知识 ( 0课时)主要讲述计算机的基础知识,包括各种数制相互转换、带符号二进制的 编码机器运算;单片机的概念、发展状况、应用领域及嵌入式系统的概念?第二章:MCS-51单片机结构和原理 (8课时)介绍51单片机内部结构,重点介绍单片机的存储组织、并行IO接口、时 钟电路及典型CPU时序,最后介绍单片机的工作方式?第三章:MCS-51单片机的指令系统和C51语言(8课时)51单片机的111条指令的分类、寻址方式、伪指令及使用中的注意事项?第四章:汇编语言程序设计基础(0课时)介绍汇编语言程序结构,汇编语言的编辑与汇编 ?第五章: MCS-51中断系统 (3 课时)主要介绍单片机中的中断控制、中断处理过程以及外部中断的应用?第六章:MCS-51单片机的定时/计数器 ( 3课时)介绍单片机内部的定时与计数功能、相关寄存器以及定时器的4 种工作方式;最后介绍定时器的综合应用?第七章:MCS-51单片机系统扩展 ( 0 课时)先对51单片机系统扩展进行概述,然后分别介绍程序存储器的扩展、 数据存储器的扩展、IO接口的扩展并举例说明?第八章:人-机通道配置与接口技术(0课时)介绍单片机的显示接口技术(LED)和键盘扫描/动态显示接口电路。 ?第九章:系统前向、后向通道配置及接口技术(0课时)主要对51单片机中的A/D、D/A转换器的原理、技术指标及应用进行 设计举例?第十章:串行接口技术(4课时)介绍单片机与外界进行通信的串口技术,主要说明其串行口工作方式, 单片机与PC通信的方法。最后举实例进行说明?第十一章:单片机应用系统设计(0课时)主要是从应用系统的设计过程、硬件抗干扰技术、故障及自恢复程序设 计等三方面来介绍单片机应用系统设计 第1章 计算机基础知识? ?1.1 数制与编码1.2 单片机与嵌入式系统 1.2 单片机与嵌入式系统1.2.1 单片机的概念单片机(Single Chip-Microcomputer)又称为微控制器 (Microcomputer),其最基本的结构是将CPU和计算机外围功能单元, 如存储器、IO口、定时器/计数器、中断系统等集成在一个芯片上构 成的。虽然单片机只是一个芯片,但无论从组成还是功能上看,它都 具有了微机系统的特征。 1.2.2 单片机的发展1971年微处理器研制成功。1974年,美国FairChild 公司研制出世界上第一台单片机微型计算机F8。该机由 两块集成电路芯片组成,具有与众不同的指令系统,深 受民用电器及仪器仪表领域的欢迎和重视。 从此,单片机开始了迅速发展,应用领域也在不 断扩大。 1976年INTEL公司推出了MCS-48系列的8位单片 微型计算机,它以体积小、功能全、价格低等优点,赢 得了广泛的应用,为单片机的发展奠定了基础。成为单 片机发展过程中的一个重要阶段。 代表产品有INTLEL 公司的MCS-51系列单片机, MOTOROLA公司的MC6801,MC6802系列机,zilog公司 的Z-8系列机,TI公司的TMS7000系列等。 此后,又在8位单片机的基 础上,发展了16位单片机。目前,单片机正朝着高性能和多品种方向发 展那,但以MCS-51为主的8位单片机仍然占单片 机的主导地位。单片机的应用从根本上改变了传 统的控制系统的设计思想和设计方法。从前必须 由模拟电路或数字电路实现的大部分控制功能, 现在已经使用单片机通过软件的方式实现了。这 种由软件取代硬件的并能提高系统性能的控制技 术,称之为微控制技术。随着单片机应用的推广 和普及,微控制技术必将不断发展,日益完善, 更加充实。 1.2.3单片机的应用领域单片机具有体积小、可靠性高、功能强、灵活方便等优点, 故可以广泛用于国民经济的各个领域,对各行各业的技术改造和产品 更新换代起到了推动作用。从应用规模来分,单片机应用系统常分为 简单应用系统、常规应用系统和高级应用系统三类。 其中,简单应用系统是指它在家用电器或仪器仪表中的应用,其 特点是没有人机对话功能,程序和运行参数均可以固化在ROM中。常 规应用系统作用于过程控制,通常配有一个键盘和若干个IO端口,用 以实现对被控对象进行监视和控制;高级应用系统是指单片机在分布 式计算机系统或计算机网络中的应用;在这类应用系统中,单片机通 常用作前置(下位)机,而后台(上位)机一般是一台系统机或网络 工作站。 (1)单片机在直接数字控制系统中的应用人工监督 给定值 测量值D/A单片机A/D反多路开关多路开关检测元件…生产过程 (2)单片机在分布式控制系统中的应用商品信息 市场信息 MIS级厂级管理计算机生产信息SCC级车间监督计算机(scc)…车间监督计算机(scc)设备控制级DDC … 设备控制级DDC设备控制级DDC…设备控制级DDCDDC级过程A…过程N过程A…过程N 1.2.4 嵌入式系统所谓嵌入式系统,就是以嵌入式应用为目的的计算机系统。由 于被嵌入对象的体系结构、应用环境要求不同,因此嵌入式系统也有 很多类型。 主要分为两类:一类是独立使用的计算机系统;另一类是嵌入 式计算机系统。 第2章 MCS-51单片机结构和原理? ? ? ? ? ?2.1 单片机内部组成及引脚功能2.2 布尔处理机 2.3 存储器组织 2.4 并口IO口电路结构及应用特性 2.5 时钟电路与CPU时序 2.6 MCS-51单片机工作方式 2.1 单片机内部组成及引脚功能MCS-51系列单片机有三种基本产品:和8031,它们具 有相同结构和性能,唯一差别就是内部程序存储器有所不同。其中 8051是ROM型单片机,内涵4KB掩膜ROM;8751片内含有4KB的 EPROM;而8031片内无程序程序存储器。MCS-51的典型产品是8051, 所以本章将以8051为例对单片机的结构和原理进行介绍。 2.1 MCS-51单片机内部结构T0时钟电路 4KROM 程序存储器 256BRAM 数据存储器T12X16位 定时/计数器CPU 处理器内总线并行接口串行接口中断系统P0 P1P2 P3TXD RXD/INT0 /INT1图 2-1 MCS-51单片机结构框图 MCS-51单片机的主要性能和特点微处理器: 一个8位的微处理器。包括以下两部分: (1)运算器ALU: 进行算术或逻辑运算的部件; (2)控制器: 用来控制计算机工作的部件; 内部数据存储器RAM:256B(128B的RAM+21B的SFR) ; 内部程序存储器ROM ( 以8051为例 ):4K的存储容量; 定时/计数器:2个16位的定时/计数器; 8位并行输入输出端口:P0、P1、P2和P3均可作输入输出口; 串行口: 全双工的端口(RXD:接收端,TXD发送端);中断控制系统:设有5个中断源(/INT0,/INT1,T0,T1,串行口中断);时钟电路:内部有时钟电路,但需要外接石英晶体和微调电容,时钟电 路为单片机时钟脉冲序列; 2.1.2 MCS-51的引脚功能VSS8.2KVCC10uFRST/VPDMCS-51采用40引脚DIP封装形式P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST/VPD RXD/P3.0 TXD/P3.1 /INT0/P3.2 /INT1/P3.3 T0/P3.4 T1/P3.5 /WR/P3.6 /RD/P3.7 XTAL2 XTAL1 VSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2040 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 VCC P0.0/A0/D0 P0.1/A1 P0.2/A2 P0.3/A3 P0.4/A4 P0.5/A5 P0.6/A6 P0.7/A7/D7 /EA ALE /PSEN P2.7/A15 P2.6/A14 P2.5/A13 P2.4/A12 P2.3/A11 P2.2/A10 P2.1/A9 P2.0/A8 VCC RST XTAL1 XTAL2 /EA /PSEN ALEXTAL1 30pF XTAL2 30pFP08051P3口 RXD TXD /INT0 /INT1 T0 T1 /WR /RD GNDP1P2图2-2 MCS-51单片机引脚图及逻辑图 MCS-51单片机的引脚定义1,主电源引脚 :Vcc(+5V--- 40脚)和Vss(GND 20脚); 2,外接晶体引脚:XTAL1(19脚)、XTAL2(18脚),只要在这两脚之间接入一个晶体震荡器,单片机就可以以此晶体的频率 开始工作。常用的晶体频率有0-24M,频率越高,单片机的工作速度 就越快,但单片机的功耗就要增加。3,控制或与电源复用引脚: RST/Vpd(9脚):在系统上电震荡器开始工作时, 在内部加在此引脚上有一个两个时钟周期的高电平使单片机复位。但为了使系统复位 可靠,建议外加 一个上电复位电路,延长复位的时间。当单片机掉点 时,此引脚可以接入备用电源向单片机内部的RAM供电,以防止 RAM中的数据丢失。 ALE/PROG(30脚):低8位地址锁存器使能输出端。当CPU访问外部存储器时,ALE可向低8位地址锁存器输出所存控制信号; 当不访问外部存储器时,ALE端仍以时钟振荡频率的1/6固定的输出正 脉冲。对于EPROM型的单片机,此脚还是用于写程序时,输入编程脉 冲。/PSEN(29脚):外部程序程序存储器的选通信号。当单片机使用外部程序存储器时,此脚在一个机器周期内产生两次负脉冲。注意, 访问外部数据存储器时,此信号无效。/EA / Vdd (31脚):外部程序存储器的选择端控制端:当此脚加入“1‖电平是,单片机使用内部的程序存储器;当EA加入低电平时, 系统只使用外部的程序存储器。 但要特别注意:如果EA=1既使用单片机内部的程序存储器时,如 果程序计数器PC的值超过0FFFH时,单片机将自动转向外部程序存 储器1000H开始的单元。 4,并行输入输出端口引脚(P0-P3)P0.0 - P0.7 P0端口线(39-32脚):输出能力最强的端口,可以带动8个TTL负载。驱动一个MOS负载时,应接一个10K左右的上拉电 阻。如果系统使用外接存储器时,该口还作为地址(低八位)总线和 数据总线,注意在这种情况下,P0口就不能通用的I/O端口。P1.0 - P1.7 P1端口线(1 C 8脚):是一个带内部上拉电阻的8位准双向IO端口。P2.0 C P2.7 P2端口线(21 C 28脚):是一个带内部上拉电阻的8位准双向IO端口。 除了做通用I/O端口外,当系统使用外接存储器时,该口还作为 地址(高八位)总线,在这种情况下,P0口就不能通用的I/O端口。 负载能力为4个TTL。 P3.0 C P3.7 P3端口线 (10 C 17脚):P3口除了做通用的I/O端口外,同时它还有第二功能,负载能力为 4个TTL。P3口第二功能表端口 P3.0 P3.1 P3.2 P3.3 定义 RXD TXD INT0 INT1 说明 串行数据输入口 串行数据输出口 外部中断0输入口 外部中断1输入口 端口 P3.4 P3.5 P3.6 P3.7 定义 T0 T1 / WR / RD 说明 计数器0外部输入信号 计数器1外部输入信号 外部数据存储器写信号 外部数据存储器读信号表2-1P3口功能表 2.2 布尔处理机前面已经讲到,单片机主要用于各种控制,而开关量控制又是单 片机控制的主要对象,作为不同计算机 CPU只能按字或字节进行操 作,对于简单的个别开关量进行控制却显得不那么方便,而让MCS51骄傲的正是它能够有效的解决了位的控制。 MCS-51片内还有一个性能优异的位处理器,也就是说MCS-51 实际上又是一个完整而独立的1位单片机,即布尔处理机。它有自己 的CPU、位寄存器、位累加器、IO口和指令系统。MCS-51单片机对 于位操作(布尔处理),有置位、复位、取反、测试转移、传送、逻 辑与和逻辑或运算等。 把8位微型机和布尔处理机结合在一起是微机技术上的一个突破。 布尔处理机在开关量决策、逻辑电路仿真和实时控制方面非常有效、 而8位微型机在数据采集及处理、数值运算方面有明显的优势。在 MCS-51单片机中,8位微型机和布尔处理机的硬件资源是复合在一起 的,二者相辅相成。 2.3 存储器组织MCS-51存储器组织结构与一般的微机不同。一般 微机通常是程序和数据共用一个存储空间,属于“冯诺依 曼”结构。而MCS-51单片机则把程序存储空间和数据存 储空间严格区分开来,属于“哈佛”结构。2.3.1 MCS-51存储器特点存储器中物理结构上分成四个存储空间:片内程序存储器、片外 程序存储器、片内数据存储器和片外数据存储器。从用户使用的骄傲 读,即从逻辑上考虑,则有三个存储空间:片内外统一编址的64K程 序存储地址空间、256B的片外数据存储器地址空间及片外数据存储 器地址空间。 CPU在访问三个不同的逻辑空间时,通过采用不同的形式的指令(访问程 序存储器使用MOVC指令、访问片内数据存储器使用MOV指令、访问片外数据 存储器使用MOVX指令),来产生相应的存储器选通信号。FFFFHFFFFH 外部 ROM(60KB) FFH特殊功能 寄存器 SFR1000H /EA=0/1 0FFFH 内部 0FFFH 外部 ROM ROM (4KB) (4KB) 0000H /EA=1 0000H /EA=0 (a) 内、外程序存储器80H 7FH /PSEN 00H内部 128 RAM外部 RAM 64KB0000H/WR /RD (b) 内部数据存储器 (c)外部数据存储器图2-3 8051单片机存储组织 2.3.2 片内数据存储器数据存储器用于存放各种运算的中间结果,用作缓冲和数据暂存, 以及设置特征标志等。8051的片内数据存储器空间较小,仅用8位地 址寻址,最大寻址范围为256个单元,按使用情况不同可以分为低 128B单元和高128B单元。其中低128B单元为真正的RAM存储器,高 128B单元是特殊功能寄存器区。 整个片内RAM分布如下图: 低128B单元7FH堆栈区30H 2FH通用的RAM区 地址:30H-7FH 位寻址区 16个单元20H-2FH, 共有128 可寻址位个位。 位地址:00H-7FH 注意:位地址与字节地址的区别 四个工作寄存器区 每个区中有R0-R7 八个工作寄存器位寻址区20H 1FH 18H 17H 10H 0FH 08H 07H 00H3区 2区 1区 0区图2-4 片内RAM低128位存储器的配置 B高128B单元FFH F0H E0HACC PSW IPD0HB8H B0H A8H A0H 99H 98H 90H0FFHP3 IE P2 SBUFSFR高128B特殊功能寄存器 SFR在片内RAM 中的位置SCON P1 TH1 TH0 TL1 TL08DH8CH80H 7FH低128B8BH8AH 89H 88H 87H 83H 82H 81H 80HTMOD TCON PCON DPH DPL SP P000H图2-5片内RAM高128位存储器的配置 1. 在低128B的RAM存储单元中又可划分为:通用寄存器区、可位寻址区、 用户存储数据堆栈区。 (1)通用寄存器区 00H-1FH共32个单元为通用寄存器区,分四组,每组有8个8位的寄 存器R0-R7。 CPU当前使用的工作寄存器是由程序状态字(PSW)的RS1和RS0 设置决定的。0区 (RS1=0,RS0=0) 对应RAM地址 00H 寄存器 R0 1区 (RS1=0,RS0=1) 对应RAM地址 08H 寄存器 R0 2区 (RS1=1,RS0=0) 对应RAM地址 10H 寄存器 R0 3区 (RS1=1,RS0=1) 对应RAM地址 Q8H 寄存器 R001H02H 03H 04H 05H 06H 07HR1R2 R3 R4 R5 R6 R709H0AH 0BH 0CH 0DH 0EH 0FHR1R2 R3 R4 R5 R6 R711H12H 13H 14H 15H 16H 17HR1R2 R3 R4 R5 R6 R719H1AH 1BH 1CH 1DH 1EH 1FHR1R2 R3 R4 R5 R6 R7表2-2 通用寄存器R0-R7的地址表 (2)位寻址区 内部的RAM的20H-2FH为位寻址区。这16个单元的每一位都有 一个地址,称为位地址。它们占据位地址空间的00H-7FH,这每一位 都可以作为一个软件触发器,用于存放各种程序标志、位控制变量。 2FH7F 7E 7D 7C 7B 7A 79 78776F 67 5F766E 66 5E756D 65 5D746C 64 5C736B 63 5B726A 62 5A7169 61 597068 60 5857564E 46 3E 26 2E 26 1E 16554D 45 3D 25 2D 25 1D 15544C 44 3C 24 2C 24 1C 14534B 43 3B 23 2B 23 1B 13524A 42 3A 22 2A 22 1A 125149 41 39 21 29 21 19 115048 40 38 20 28 20 18 10字节地址4F 47 3F 37 2F 27 1F 170F0E060D050C040B030A020901080020H07表2-3 RAM区位地址分配表 (3)用户RAM区 30H-7FH为真正的数据缓冲区, 可以用来暂存用户数据或当作堆栈 使用。 在微型机中,堆栈是在内存 RAM中开辟一个特定的存储区,专 门用来暂时存放数据或断点地址, 并按照“先进后出,后进先出”的 原则进行操作。 MCS-51单片机的堆栈,是在 片内RAM低128B中开辟的一个专 用区(一般选择30H-7FH作为栈 区)。堆栈的一端是固定的,称为 栈底;另一端是浮动的,称为栈顶。 当堆栈中没有数据时,栈顶与栈底 相重合。当数据进栈时,栈顶会自 动地向地址递增的方向变化。一般 把堆栈中的数据称为元素,最后进 栈的那个元素所在地就是栈顶。由 于堆栈元素的存入和取出必须遵循 FILO和LIFO的原则,因此堆栈的 操作总是对栈顶进行的。RAM 7FH 栈顶…………08H 07H栈底图2-6 堆栈示意图 2.片内高128B数据存储器单片机内部的I/O口锁存器、串行口数据缓冲器、定时器/计数器以 及各种控制寄存器和状态寄存器等统称为特殊功能寄存器SFR (Special Function Register) 它共有21个SFR,它们离散地分布在片内RAM地址为80H-FFH的 高地址区域,且每一个SFR都有一个字节地址,并定义了符号名,其 地址分布见表: 表2-4 特殊功能寄存器SFR地址表 下面简单介绍部分SFR的功能,其余的SFR将在后续章节中陆续介绍: (1)累加器ACC 累加器ACC是8位寄存器,是最重要的特殊功能寄存器,许多指令的操作数 取自ACC,大部分运算结果也存放在ACC中。在指令系统中,ACC是助记符 是A。 (2)寄存器B 寄存器B是8位的寄存器。主要用于乘法和除法操作指令。对于其他指令,寄 存器B可以作为一般的数据寄存器使用。 (3)堆栈指针SP 堆栈指针SP是一个8位的寄存器,用它存放栈顶的地址。进栈时,SP自动加 1,将数据压入SP所指向的单元;出栈时,则将SP所指向单元的内容弹出, 然后SP自动减1.因此,SP总是指向栈顶。 (4)程序状态字PSW PSW是8位寄存器,用于寄存程序运行的状态信息。其中有些位(如CY, AC, OV等)的状态是根据程序执行结果由硬件自动设置的,而有些位(如 RS1, RS0等)的状态则是由软件设置的。 程序状态字PSW: 8位寄存器. 表征程序执行的状态信息。具体格式如下:CYACF0RS1RS0OVF1PCY (PSW.7)进位标志:在加减法运算中,累加器A的最高位A7有进 位,则CY=1,否则CY=0.同理,在减法运算中,如果A7有借位,则CY=1.因此 CY往往作为无符号数运算是否有溢出的标志。 用来判断加减法运算时,低四位是否向高 四位进位或借位(既A3的进位或借位).往往用来判断压缩的BCD码的运算 处理.AC(PSW.6):辅助进位位:F0(PSW.5), F1(PSW.1)用户标志位:用。完全由用户来定义和使RS1,RS0工作寄存器区选择位:确定工作寄存器R0-R7在哪个区中. 单片机在上电或复位后RS1、RS0=00。当需要人为的修改RS1,RS0 的值来改变工作寄存器区的位置(后表将详细介绍)。 OV(PSW.2) 溢出标志位: 判断符号数加减法运算时是否有溢出.OV的结果可以用一个算法来表示: OV=CP异或CS 其中:CP为A7的进位,CS为A6的进位OV=1表明有溢出。P(PSW.0)奇偶标志位:用来标志累加器A中运算后1的个数。 当P=1时,表明A中1的个数为奇数个,反之为偶数个。【举例】:有两个数0FH和F8H,试将两数相加MOV A,#0FH ;将立即数0f h 送累加器A ADD A,#0F 8H ;A的内容与立即数0f8h相加,结果送A +
运算结果:A=07H,CY=1(既CP=1), CS=1,OV=0(因为CP=1,CS=1) AC=1,P=1如何根据PSW来分析运算结果是否正确?是否有溢出? 1,若数据为无符号数。既15+248=263=107H 既CY=1,A=07H。 2,若数据为有符号数。既+15加-8=+7=07H,OV=0表明无溢出。 RS1RS0寄存器组 R0-R7所对应的RAM单元地址00 1 101 0 101 2 300H-07H08H-0FH 10H-17H 18H-1FH表 2-5 RS1,RS0与寄存器组的关系(5)DPTR 数据指针DPTR是一个16位的特殊功能寄存器,编程时,DPTR既可以作为 一个16位的寄存器使用,也可以作为两个独立的8位寄存器分开使用,此时用 DPH表示DPTR的高字节,用DPL表示DPTR的低字节。 一般编程时,常用DPTR来存放外RAM单元(或外部I/O接口)的16位地址,作 间接寄存器使用,它可以指向外RAM 64KB范围内的任一存储单元。 (6)程序计数器PC 程序计数器PC是16位专用寄存器,其内容就是下一条要执行的指令的首地 址。CPU总是把PC的内容送往地址总线,作为选择存储单元的地址,以便从指 定的存储单元中取出指令,译码和执行。 2.3.3 片内程序存储器程序存储器用于存放程序代码和表格常数。其所支持的最大程序存储器空间 为64KB,地址指针就是16位的程序计数器PC。在程序存储器中,有六个特殊的单 元需要注意,编程者是不能随便使用的 :H单元:上电时,程序计数器PC所指向的单元 AH单元:外部中断/INT0的入口地址; 000BH-0012H单元:定时器T0的溢出中断入口地址; AH单元:外部中断/INT1的入口地址; 001BH-0022H单元:定时器T1的溢出中断入口地址; AH单元:串行口接收、传送的中断入口地址。中断响应后,按中断种类由硬件控制PC自动转到各中断区的首 地址去执行程序。但每个中断入口地址区只有8个单元,无法放置完整 的中断处理子程序,因此,程序员在编程时必须在中断入口区放置一 条无条件转移指令,将程序引导到真正的中断处理程序的实际入口位 置。 2.4 并行IO端口电路结构及应用特性在MCS-51单片机的四个端口P0,P1,P2,P3都是具有输出锁存 功能的双向端口, 他们都由锁存器、输出驱动器和输入缓冲器组成。 这些锁存器的位置都在SFR中,其地址分别为:80H、90H、A0H 、 B0H.出于系统的考虑,在硬件设计上对每一个端口都有不同的要求, 所以每一个端口又具有不同的特点.其中,在需要扩展外部存储器 的系统中,P2口作为访问外部存储器的高8位地址线,P0口分时作 为低8位地址线和双向数据总线。此外,P3口具有双功能。 2.4.1 P0口特点:D通用数据I/O端口”和“地址、数据复用总线”端 口. 1,在作为通用数据I/O端口时,具有较强的驱动 能力(8个TTL负载),与MOS负载连接时,需要外接一 个上拉电阻。2,作为“地址、数据复用总线”使用时,P0口首 先输出外部存储器的低八位地址,然后再变为数据 总线进行数据的输入或输出.此时,P0口不能再作 为通用I/O口。 Vcc 读锁存器 地址/数据 1/0 控制(=0时)Vcc内部总线D CLQ /Q锁存器P0.x 引脚写锁存器MUX (控制=0时)读引脚 图2-7 P0端口的结构图硬件组成:1,一个输出锁存器(D型触发器); 2,二个三态门(控制读引脚或读锁存器); 3,与门和MUX等元件组成的输出控制电路; 4,一对场效应晶体管FET构成的输出电路. 1,P0口的I/O操作(通用I/O端口)在P0口作为通用I/O端口时,控制电路中的“控制” 为“0‖电平,多路开关MUX接入下方的锁存器的/Q端。由于与门的一个输入端为“0‖,所以它使上端的FET截止.这就是P0 口在做I/O口时输出为“漏极开路”的结构原因.输出操作:在执行以口为目标的指令时,数据送到锁存器的“D‖端,经“/Q‖端送场效管应输出极.如:送“1‖时,/Q=D0‖,使下端的FET截止. 这样出现输出极的两个FET全部截止.在这种情况下必须在端口线上外 加上拉电阻.这样在上拉电阻的作用下,使端口为高电平.同理,若总线向 口送“0‖时,锁存器的/Q=1,使下端的FET导通(上面的FET仍然截止), 这样端口呈现“0‖电平. 输入操作(读引脚,读锁存,输入前写一)a,读引脚:读外部送到端口引脚的电平,即通常所说的输入操作(如:MOV A,P0).此时,单片机控制“读引脚”的三态门,使引脚处的外部电 平经三态门送入内部总线. 之为: “读―修改―写”操作。在这种情况下, 读入的数据不是来自引 脚,而是端口内部的锁存器的内容。 当前面完成一次端口的输出后,要再将前面输入的状态取回来,进 行再处理,然后重新输出,在MCS-51的指令系统中这种“读―修改― 写”的操作有: ORL 、XRL 、JBC 、CPL 、INC 、DEC 、DJNZ 、 MOV Px,y 、 CLR Px,y和SET Px,y。 如: ORL P0,A ;P0 ∨ A → P0b,读锁存器:将进行读锁存器并进行处理,最后再写回锁存器的操作称P0. X c,输入时应先写“1‖:在端口电路中,可以发现一个问题:端口在输入(读引脚)时,原来锁存器的状态可能要影响引脚电平的输入.例如:原 来锁存器的状态为“0‖态,既输出极的下端FET是饱和状态,这样如果外 电路向引脚输入高电平时,电路将不能正确读入.要解决的方法就是让下 端的FET截止,既事先向端口写一个“1‖. 2,P0口的总线方式控制电路的“控制”=1,此时与门打开,MUX接向“地址/数据”信 号.在这种情况下,输出极的两个FET都处于正常的工作状态 。 访问外部存储器的指令movx、movc ,就是使用P0口来输出外部 存储器的低八位地址和输入、输出存储器的数据。可以从:访问外部 程序存储器ROM的时序; 读外部数据存储器RAM的指令时序中来清楚的观察P0口作为“地址/数 据复用”总线的工作特点。 在进行单片机的硬件系统的设计中,如果使用了外部存储器(或 使用movx指令来访问外部接口电路)时,P0口成为整个系统的地址/ 数据复用总线。换句话,P0口不能再作为通用的I/O端口的形式直接 与外部连接。 P0口特点小结:1, 做通用数据I/O端口时,输出级上端的FET处于截止状态,所 以与MOS器件连接时,必须接“上拉电阻”,否则不能正确 的输出高电平; 2,在输入操作前,为了保证输入正确,必须先向端口“写1‖;3,D读引脚”与“读锁存器”是不同的两个数据通道。凡是 “读―修改―写” 的操作,CPU读的都是端口锁存器中的 数据。 4,为了提高电路的可靠性,端口引脚不要直接与三极管一类的 器件直接连接,应加隔离电路或与三极管之间加一个电阻.5,在总线方式时,P0口不能再做通用的I/O端口。它分时输出 地址、数据总线的信息(此时引脚不用外接上拉电阻)。 2.4.2 P1口的位结构图特点:单纯的通用I/O端口,负载能力为3个TTL输入。与P0口的 区别在于内部具有上拉电阻,所以输出时不用外接上拉电阻。读锁存器 Vcc 内部上拉电阻 内部总线 写锁存器DCLQ/Q锁存器P1.x 引脚读引脚图2-8 P1端口的结构图由于P1口只能当作通用I/O口使用,所以在电路结构上与P0口不同, 首先,它不需要多路转换器,其次为通用输出功能提供了上拉电阻。 P1口的每一位可以分别定义为输入或输出,其功能同P0口通用功能。 P1口的每一位可以驱动4个LSTTL负载。 2.4.3 P2口特点: “通用数据I/O端口”和“高八位地址总线”端口地址 1/0 控制读锁存器Vcc内部上拉电阻内部总线D CLQ /Q MUX(地址/数据=0)锁存器写锁存器P2.x 引脚读引脚图2-9 P2端口的结构图 与P0口一样,P2口在系统使用外部存储器时,做高八位的地址总线。 当P2口当作通用I/O口时,多路开关使输出锁存器的Q端与驱动器的栅 极相连构成一个双向口,其功能同P0口的通用功能。同样,P2口作 为输入时,也必须使锁存器预先置1. 应当注意的是:仅使用外部数据存储器时,P2口分两种情况: 1,仅仅使用256B的外部RAM时,既使用movx a,@r0指令访问外部 RAM,此时用8位的寄存器R0或R1作间址寄存器,这时P2口无用, 所以在这种情况下,P2口仍然可以做通用I/O端口。 2,如果访问外部ROM或使用大于256BRAM时,P2口必须作为外存储 器的高八位地址总线。 如:movx a,@dptr ;访问外部数据存储器 movc a,@a+dptr ;访问外部程序存储器 这里使用了16位的寄存器DPTR 2.4.4 P3口特点:通用I/O端口、多用途端口读锁存器替代输出功能Vcc内部总线DCLQ/Q MUX(地址/数据=0)锁存器 写锁存器P3.x 引脚读引脚图2-10 P3端口的结构图 在多用途情况下,P3口分别作为串行口、外中断输入、外部计数输入 和系统扩展时使用的WR和RD信号的端口。在这种情况下,锁存器Q 端为“1‖电平以保证与门是打开的。 在通用I/O模式下,“替代输出功能”端为“1‖电平,以保证与门打开。 并行端口在使用时应注意的几个问题D拉电流”还是“灌电流”----与大电流负载的连 接 (我们以美国ATMEL公司生产的AT89C51为例) 1, 使用灌电流的方式与电流较大的负载直 接连接时, 端口可以吸收约20mA的电流而保证 端口电平不高于0.45V(见右上图)。 Vdd VddPx.y 灌电流方式 输出”0‖点 亮LED2,采用拉电流方式连接负载时,AT89C51 所能提供“拉电流”仅仅为80μA,否则输出的 高电平会急剧下降.如果我们采用右下图的方式, Vdd 向端口输出一个高电平去点亮LED,会发现, Px.y 端口输出的电平不是“1‖而是“0‖! 当然,不是所有的单片机都是这样,PIC单 片机就可以提供30mA的拉电流和灌电流。单对 于大多数IC电路,最好还是使用“灌电流”去 推动负载。拉电流方式 输出高电平 点亮LED 单片机与继电器等大电流负载的接口Vcc 我们知道:AT89C51的端口可以吸 收约20mA的电流.对于继电器等 大于20mA的负载,单片机可以采 用右图的接法,用一个三极管来承 担负载所需的大电流. 若于负载电流易造成干扰单片机 的环境,应采用右下图”光电隔离” 的方式.其中: Vcc A 、 B两处没有 任何电的联系. Px.y A B 负载 Px.yVddJ 2.5 时钟电路与CPU时序2.5.1 时钟电路1. 内部时钟方式 内部方式的时钟电路如下图2-14所示。利用MCS-51内部的高增益反向 放大器,在XTAL1和XTAL2引脚上外界定时元件,内部振荡器电路便 产生自激振荡。定时元件一般采用石英晶体和电容组成的并联谐振回 路。晶体可以在1.2-12MHZ直接任选,电容可以在5-30pF之间选择, 电容C1和C2的大小可以起到频率微调的作用,电容大小要和晶体的 容性负载阻抗相匹配,否则不易起振。 内部时钟方式如下图:XTAL130pF XTAL230pF8051图2-11 单片机内部时钟方式 2. 外部时钟方式 外部时钟方式常用于多机系统,以便各个单片机能够同步工作。 对外部振荡信号无特殊要求,但需要保证脉冲宽度不小于20ns,且频 率应低于单片机所支持的最高频率。 对于8051单片机,外部脉冲由XTAL2引入内部电路,XTAL1接地; 对于80C51单片机,外部脉冲由XTAL1引入,XTAL2悬空。Vcc5.1k外部时钟信号 XTAL2 外部时钟信号 XTAL21 8051XTAL1 VSS1 80C51悬空 XTAL1 VSS(a)8051外部时钟方式(b)80C51外部时钟方式图2-12 单片机的外部时钟方式 2.5.2 时序定时单位单片机的工作过程就是不断的执行指令的过程。CPU每执行一条指令, 都要经过取指(取操作码)、取操作数和执行等几个过程。 CPU执行一条指令的各个微操作所对应时间顺序称为CPU时序。为了直观的 展现CPU的时序,把执行一条指令时相应信号线上有关信息的变化,按时间 序列特定的波形展示出来,这就是时序图。 由于指令的字节数不同,执行的操作也不同,因而执行不同的指令所需 要的时间差别较大。为了便于说明,人们按指令的执行过程定义了几种时序 定时单位,及振荡周期、时钟周期和指令周期,它们的相互关系如下图所示 状态周期或时钟周期 振荡周期 …. S2 S3 S4 S5 S6P1 P2S1机器周期 指令周期 图 2-13 MCS-51各周期的关系 1.振荡周期:时振荡周期也称为节拍,它是单片机最基本的 定时单位。前面介绍的时钟振荡器的周期就是振荡周期。 2.时钟周期 :又称状态周期,是由振荡器周期经2分频后获得 的。所以时钟周期是振荡周期的2倍。时钟周期被分为P1 和P2拍节。在每个时钟周期代码前板周期内,P1信号有 效,这时通常完成算术逻辑操作;而在后半周期内,P2信 号有效,完成内部寄存器直接的传送操作。时序中最小的 时间单位.其值由外接晶体或外输入时钟来决定,其值石 英振荡器频率的倒数。 例如:在单片机外接1MH的晶体,则单片机的系统时钟 的频率为1M, 时钟周期为1us. 3.机器周期:MCS-51采用定时控制方式,因此它有固定 的机 器周期。完成特定功能所需要的时间,在MCS-51单片机中 机器周期由12个时钟周期构成,并分为6个状态(S1-S6),每 个状态又分为P1和P2两拍.这样一个机器周期的12个震荡 周期可以表示为: S1P1,S1P2,S2P1,S2P2,S3P1,S3P2 … S6P1,S6P2 将12个震荡周期用6个状态和2拍来替代。 4.指令周期:这是时序图中最大的时间单位,既执行一条指令所 需要的时间.在MCS-51系统中,不同的指令它所包含的机器 周期数不同.它们分别是: 1,单机器周期指令; 2,双机器周期指令; 3,四机器周期指令 我们知道:一个机器周期包含了12个震荡周期.如果我们使用一 个12M的晶体震荡器,那么: 一个机器周期为1us, 两个机器周期为2us, 四个机器周期为4us. 可见一条指令的运算速度与它所包含的机器周期数有 关.机器周期数越少,执行的速度就越快.在MCS-51单片机的 指令系统中,除了乘、除法指令为四个机器周期外,其余都是 单周期和双周期指令. 2.5.3 典型指令的取指、执行时序在MCS-51单片机的指令系统中有: 单字节; 双字节; 三字节指令。 在MCS-51的111条指令中,可以分为六种基本的时序: 1,单字节单周期指令; 4,双字节单周期指令; 2,单字节双周期指令; 5,双字节双周期指令; 3,单字节四周期指令; 6,三字节双周期指令. 单字节单周期指令的时序:指令特点:在程序存储器ROM中仅占一个存储单元。 在ALE第一次有效(S2P1)时,从ROM中读取指令的操作码, 送入指令寄存器IR中.并译码执行,在ALE第二次有效时,封锁 PC加一,使第二次读数无效.可见: 1, ALE信号对应这从ROM中读指令,所以在一个机器周期 中CPU可以读两次指令; 2,对于单字节单周期的指令,CPU通过译码后封死PC,实际 上指令的后半部不做任何工作.S1S2S3S4S5S6读操作码一读操作无效ALE 机器周期 图 2-14 单字节单周期指令的时序 双字节单周期指令时序指令特点:一条指令长度为两个字节,并存储在ROM相邻的 两个单元中。要想完整的将这样的指令执行完,必须从ROM 中读两次操作码. 在ALE第一次有效时,CPU 从ROM的n单元中取出指令的 第一个字节OP1-1,并送入IR译码,通过译码CPU知道这是一 条双字节指令,所以使PC加一,并在ALE第二次有效时,从ROM 的n+1单元取出指令的第二个字节OP1-2送入IR进行译码,并 产生对应的操作.最后在S6P2时完成本条指令的运行.程序ROMALE n+1 n OP1-2 OP1-1读操作码一 读操作码二PCS1S2S3S4S5S6机器周期 图 2-15 双字节单周期指令的时序 单字节双周期指令的时序指令特点:单字节, 需要两个机器周期运行.如: INC DPTR DPTR为两个8位的寄存器,加一时,必须分两步完成.既第一步 DPL加一,如果DPL加一有进位则还要进行第二步对DPH加一. 在指令周期的第一个ALE时,将ROM中的操作码OP取出, 经IR译码后得知为单字节双周期指令,所以一面执行该指令, 同时封锁后面三次ALE有效时的PC+1,在第二个机器周期的 S6P2时,完成操作.ALE读操作码 读无效 读无效 读无效S1S2S3S4S5S6S1S2S3S4S5S6机器周期1机器周期2图 2-16 单字节双周期指令的时序 读外部数据存储器RAM的指令时 序设外部RAM2000H单元中有一个数x,且 DPTR中已存有该数地址2000H.则 CPU 执行外部ROM中的指令: MOVX A,@DPTR ;将外RAM的x送A中/WR /RDP2口 MCS-51 P0口 ALED7 ∶ D0 /CP/WR /RD A15 ∶ A8 A7 ∶ A0 64KRAM D0~D7S1S2S3S4S5S6S1S2S3S4S5S6ALE Psen RD P2口A15-A8(PC) A7-A0 指令 A7-A0 选中外部RAM A15-A8(DPH) 数据P0口图 2-17 读外部数据存储器RAM的指令时序 1, 在S2P2时,ALE的第一个下降沿将P0口输出的外程序 ROM的低八位地址锁存到74LS373锁存器中; 2, 在S3P2的Psen为低电平时,选中外ROM,并根据单片机 P0、P2口输出的16位地址选中movx指令(单字节),通过P0 口送至单片机内部IR中译码.经译码后产生下列的一系列 操作; 3, CPU将DPTR中的高8位(20H)送P2口输出,低八位(00H) 经P0口输出,节在S5P1时ALE第二次下降沿时,将P0口的 低八位地址锁存; 4, 在第二个机器周期的S1-S3中单片机输出/RD信号(低 电平),选中外部RAM,并根据单片机提供的2000H 这16位 地址中取出数据x. 5, CPU在S2-S3期间,将外部RAM2000H单元送到P0口上 的数据送入累加器A中. 上述过程可以分成两个指行的阶段: 1, 根据PC所指定的程序存储器的地址,将movx指令从片 外ROM中取出; 2, 经译码后将DPTR提供的外数据存储器RAM中的数据 地址取出数据,经P0口送累加器A. 在第一阶段CPU产生/Psen信号用来选通外部程序存 储器ROM; 在第二阶段CPU输出/RD信号(低电平),用来选通并读 取外部数据存储器RAM的数据. MCS-51单片机的工作方式有多种,如复位、程序执行、单步执行、低功 耗、EPROM编程与校验等。2.6 MCS-51单片机工作方式2.6.1 复位方式及复位电路1.复位方式单片机复位后不会影响内部RAM中的数据,仅将PC指向0000H,SP指向 07H,保证单片机复位信号撤出后CPU能够从起始地址0000H开始执行程序。 但单片机由于外界干扰等原因造成程序跑飞或进入死循环时,可用复位信号重 新启动程序。 复位操作还对单片机的个别引脚有影响,使P0-P3置位输入方式,使 ALE=1,/PSEN=1.寄存器 PC ACC B PSW SP DPTR P0-P3 IP IE 内容 H 00H 07H 0000H FFH XXX00000B 寄存器 TMOD TCON TL0 TH0 TL1 TH1 SCON SBUF PCON 内容 00H 00H 00H 00H 00H 00H 00H 00H 0XXXXXXXB表2-6 复位后内部寄存器的状态 2. 复位电路RST端的尾部复位电路有两种复位形式:上电自动复位和按键手动复位。 (1)上电自动复位电路 只要在RST复位端接一个电容至VCC和一个电阻至VSS,就能够实现上电自动复位。在家 电瞬间,电容通过电阻充电,就在RST端出现一定宽度的高电平,只要高电平时间足 够长,就可以使单片机有效复位。 (2)按键手动复位 按键手动复位有电平方式和脉冲方式两种。 按键电平复位时通过使复位端经过电阻与VCC接通而实现的。 按键脉冲复位则是通过利用RC微分电路产生的正脉冲来实现的。Vcc Vcc Vcc805180518051(a)上电自动复位(b)手动电平复位(c)手动脉冲复位图2-17 MCS-51复位电路 (3)系统复位在单片机的应用中,除单片机身体需复位以外,外部扩展I/O接口电路等也 需要复位,因此需要一个系统的同步复位信号.即单片机复位后,CPU开始工作 时,外部的电路一定要准备好,以保证CPU有效的对外部电路进行初始化编程. 如上所述,MCS-51的复位端RST是一个施密特触发器,高电平有效,而I/O接口 电路的复位端一般为TTL电平输入,通常也是高电平有效,但这两种复位输入端 复位有效的电平不完全相同.若将单片机的复位不同步,CPU对I/O初始化编程 无效,使系统不能够正常工作.解决的办法就是通过延时一段时间后,再对外部 电路进行初始化编程.有效的系统复位电路如下图2-18所示:Vcc Vcc180518051(a)至外部IO电路复位端(b)至外部IO电路复位端图2-18 系统复位电路 2.6.2 程序执行方式程序执行方式是单片机的最基本工作方式。所执行的程序可以在内部ROM、 外部ROM或者同时放在内外ROM中。若程序放在外部ROM中,则应使 /EA=0;否则,可令/EA=1。由于复位之后PC=0000H,所以程序的执行总是从 地址0000H开始的。但真正的程序一般不一定从0000H开始存放,此时需要 在0000H单元存放一条转移指令,使程序跳转到真正的程序入口处。2.6.3 单步执行方式在单片机应用系统的开发调试阶段,有时需要观察每条指令执行后的结 果,此时就需要用到单步执行方式。 单步执行方式是使程序执行处于外加脉冲的控制下,一条指令以条指令 地执行,即按一次键,执行一条指令。 单步执行方式可以利用MCS-51的外部中断来实现.MCS-51中断系统规 定:从中断服务程序返回以后至少要执行一条指令后才能够重新响应新的中断 请求.据此,如果将外加脉冲从/INT0引脚输入,平时保证/INT0为低电平,并通过 初始化设定外部中断0为高优先级和低电平触发方式,就能保证单片机平时处 于中断响应状态.在中断服务子程序中配合使用下面的指令就能够时下按压一 次只执行一条指令的单步操作. JNB P3.2,$; 若/INT0=0,不往下执行 JB P3.2,$; 若/INT0=1,往下执行 RETI ; 返回主程序执行一条指令 2.6.4 低功耗操作模式CHMOS型的80C51单片机有两种低功耗操作方式:待机操作方式和掉电操作 方式。 在待机方式时,CPU停止工作,而RAM、定时器、串行口和中断系统继续工 作。 在掉电方式时,仅给片内RAM供电,片内所有其他的电路均不工作。HMOS 的8051单片机只有一种低功耗方式:掉电操作方式。 1. HMOS型单片机的掉电操作方式 正常操作时,8051的内部RAM由VCC供电,当RST/VPD端的电压超过 VCC时,内部RAM将改为由RST/VPD端的电源供电。若RST/VPD端接有备 用电源,则当VCC掉电时,次备用电源就可保护内部RAM的数据不丢失。 2. CHMOS型单片机的低功耗方式 80C51单片机用软件来选择低功耗,主要由电源控制寄存器PCON中的相关位 控制,PCON寄存器格式如下:位序 位名 D7 SMOD D6 / D5 / D4 / D3 GF1 D2 GF0 D1 PD D0 IDL表2-7 PCON寄存器格式 IDL:待机方式位 当IDL=1时,激活待机工作方式 PD:掉电工作方式 当PD=1时,激活掉电工作方式 GF1 GF0:通用标志位 SMOD:串行波特率倍增位 (1)待机方式 执行一条置位IDL的指令后,80C51就进入待机方式.这时提供给 CPU的时钟信号被切断,但时钟信号仍提供给RAM,定时器,中断逻辑和 串行口.同时CPU的工作状态在待机期间被保留起来,也就是堆栈指针 SP,程序计数器PC,程序状态字PSW,累加器ACC及通用寄存器的内容. 在待机方式下VCC仍为5V,但消耗电流由正常工作方式的24MA将为 3.7MA. PCON中的标志位GF0和GF1可以用作软件标志,若置IDL=1的同 时也置GF0/GF1=1,则待机方式中激活的中断服务程序查询到此标志便 可以确定服务的性质.可以有两种两条途径退出待机方式: 一种是有任一种中断被激活,此时IDL位将被硬件清除,随之待 机状态被结束。系统退出待机方式,进入正常工作方式. 另一种是靠硬件复位,复位后PCON中各位均被清0. (2)掉电方式 CHMOS型单片机的掉电方式与HMOS不同,备用电源由VCC输 入,而不像HMOS那样由RST/VPD输入. 执行一条置位PD的指令后,80C51就进入掉电工作方式.掉电后,片内 振荡器停止工作,时钟冻结,一切工作都停止,只有片内RAM的内容被保 持,SFR内容也被破坏.掉电方式下VCC可以降到2V,耗电仅50uA. 退出掉电方式恢复正常工作方式的惟一途径是硬件复位.应在VCC 恢复到正常值后再进行复位,复位时间需10ms,以保证振荡器再启动并 启动并达到稳定,实际上复位本身只需25个振荡周期(2~4us).但在进入 掉电方式前,VCC不能掉下来,因此要有掉电方式前,VCC不能掉下来, 因此要有掉电检测电路. 2.6.5 EPROM编程和校验方式(1)内部EPROM编程 编程时,时钟频率应在4~6MHZ的范围内,有关引脚的接法和用法如下: P2.0~P2.6以及PSEN应保持为低电平;P2.7和RST应为高电平,RST的高 电平可为2.5V,其余的都以TTL的高低电平为准;EA/VPP端另加12.5V 饿编程脉冲,此电压要求稳定,不能大于12.5V,否则会破坏EPROM;在 EA/VPP出现正脉冲期间,ALE/PROG端加50ms的负脉冲,完成一次写 入. 8751的EPROM编程一般要用专门的单片机编程器(如ALL-11等)来完成. (2)EPROM程序校验 在程序的加密位尚未设置的状态下,无论在写入的当时或写入之后,均可将 片内程序存储器的内容读出进行效验.在读书时,除P2.7脚保持为TTL 低电平之外,其它引脚与EPROM的连接方式相同.要读出的程序存储器 单元地址由P1口和P2口的P2.0~2.3送入,P2口的其它引脚及PSEN保 持低电平,ALE,EA和RST接高电平,校验的单元内容由P0口送出.在校 验操作时,需在P0的各位外部加上拉电阻10k (3)程序存储器的加密位8751内部有一个加密位.一旦此加密被编程后,就可禁止用任何外部手 段对片内程序存储器进行读写.将加密位写入以建立保险的过程与正常写 入的过程相似,但加密编程脉冲后就可以使加密位写入. EPROM加密后,内部程序存储器便不能再被写入和读出校验,而且也 不能执行外部程序存储器的程序.只有EPROM全部擦除时,加密位才能被 一起擦除,以便再次写入. 第3章 MCS-51单片机的指令系统MCS-51共有111条指令,指令的长度和执行时 间因不同的指令而各不相同。3.1 3.2 3.3 3.4 3.5 3.6 3.7MCS-51指令系统概述 数据传输类指令 算术运算类指令 逻辑操作类指令 控制转移类指令 布尔(位)操作类指令 伪指令 3.1MCS-51指令系统概述所谓指令就是CPU所能进行的操作.每条指令都对应CPU的一种 操作,CPU有多少种操作就应该有多少条指令.我们把所有指令的集合 称为CPU的指令系统,MCS-51单片机的指令操作系统共包括111条指 令. 3.1.1 计算机常用的编程语言 程序是完成某项任务的计算机指令的有序集合.设计程序就要用到 程序设计语言,从使用的角度来看,程序设计语言可分为如下三种: 1.机器语言 计算机语言是计算机唯一能”懂”的语言,直接用二进制代码表示, 这种编码称为机器码或是称为机器语言。只有内存中 机器码能被计 算机直接执行.然而,不同类型CPU其机器语言必然不同,且直接用机器 语言来编程,晦涩难懂,极易出错,很难用它来进行程序设计. 2.汇编语言 为克服使用机器语言编程的缺点,人们采用采用一些符号来代表地 址或数据,用简单明了的助记符(英文缩写)表示指令的操作码,这就 形成了汇编语言.用汇编语言编制程序时,程序的每一语句都与计算机 的某一具体操作相对应,因此汇编语言是面向机器的语言.计算机不能 直接识别,必须将这种符号代码翻译成计算机可识别的机器代码, 这种翻译过程称为汇编.汇编工作通常由计算机通过一种具体”翻译” 功能的程序---汇编程序来完成,亦可以通过查指令表来完成汇编(称为 手工汇编). 采用一些符号来表示地址或数据。用简单明了的助记符(英文缩 写)表示指令的操作码,这就形成了汇编语言。3.高级语言 上述两种语言都针对计算机硬件,程序的可读性和可一直新年感可 移植性都比较差.为了克服这些缺点,人们又逐步创造出许多面向用户, 适合于不同机器,不同场合的高级语言.如:BASIC FORTRAN COBOL C语言以及目前非常流行的可视化编程设计语言VB VC等等。 这些高级语言是更符号化的语言,计算机不能直接接受,需经过复杂的 编译程序或解释程序的”翻译”才能够转化为机器代码,因此它比前两 种语言占有更多的内存和更长的时间. 3.1.2 MCS-51指令格式每条指令都有两级指令格式:汇编语言级指令和机器语言级指令。1.汇编语言级指令格式由四部分组成,指令格式如下:【标号:】 操作码 【操作数1,】【操作数2,】【操作数3,】【;注释】例如: LB: MOV A,R2 ;A&-(R2)2. 机器语言级指令机器语言指令是一种二进制代码,它具体包含两个基本的部分: 操作码和操作数。机器语言分为单字节、双字节和三字节指令,具 体格式分别为: (3)三字节指令 (1)单字节指令 操作码 第一操作数 第二操作数 操作码 (2)双字节指令操作码操作数 3.1.3 寻址方式及寻址空间寻址方式的“寻址”是指寻址参与操作的数据所在的存储器单元的地址。 MCS-51 指令系统有以下7种寻址方式: 1 立即寻址方式 所谓立即寻址,就是在指令中直接给出参与操作的数据本身,即操作数直接 出现在指令中。 例如:MOV A, #40H 该指令的功能是将立即数“40H‖传送到A中。 2 直接寻址方式 所谓直接寻址,就是在指令中直接给出参与操作的数据锁啊在的内RAM 单元的地址,即操作数直接以单元地址的形式出现在指令中。 例如:MOV 40H, A 该指令的功能是将累加器A中的内容传送到内部RAM 40H 单元中。 注意:按字节访问特殊功能寄存器只能用纸金额寻址方式。在指令中,特殊功能 寄存器既可以单元地址的形式出现,也可以特殊功能寄存器名的形式出现。 3. 寄存器寻址方式 所谓寄存器寻址,就是在指令中直接以寄存器的形式给出参与 操作的数据,即操作数放在指定的寄存器中。 例如:MOV A,R3 该指令的功能是 将当前工作寄存器R3的内容传送到A中。若R3的内 容4FH,则执行该指令后A的内容也变为4FH 所谓寄存器间接寻址,就是在指令给定的寄存器存放的不是 操作数本身,而是操作数所在的内RAM或外RAM单元的地址,即 操作数通过寄存器间接获得。 4. 寄存器间接寻址方式 假如R0的内容为65H,则指令 MOV A, @R0 的功能是以寄存器R0的内容“65H‖为地址,将与该地址对应的内 RAM单元的数据传送到A中。 5. 基址+变址寄存器间接寻址方式 基址+变址寄存器间接寻址方式又称为变址寻址方式,在指令中 以”@A+DPTRD或”@A+PC‖的形式出现。 假设A中的内容为05H,DPTR的内容为0400H,程序存储器0405H单元 的内容为2DH,则指令 MOVC A,@A+DPTR 执行后A的内容为2DH 6. 相对寻址方式 所谓的相对寻址,就是以PC的当前值为基准,加上指令中给定 的相对偏移量“rel‖,而形成有效的物理地址。 例如: 1000H: SJMP rel 该指令的操作码存放在1000H单元,偏移量存放在1001H单元, 则取出指令操作码和偏移量后,PC将指向1002H,1002H即为PC的 当前值。 7. 位寻址方式 该寻址方式可以对内部RAM和特殊功能寄存器中的可位寻址位进 行寻址,在指令中直接给出位寻址。 位寻址的寻址空间为内RAM中位寻址20H-2FH单元的128位及11 个特殊功能寄存器的83个可寻址位。 例如: MOV C, 92H 功能为将P1.2口的状态传送给位累加器C 3.1.4 指令系统分类MCS-51共有111条指令。其中单字节指令49条,双字 节指令45条,只有17条是三字节指令。 MCS-51指令系统可以分为5大类: (1)数据传送类指令(29条) (2)算术运算类指令(24条) (3)逻辑运算类指令(24条) (4)控制转移类指令(17条) (5)位操作类指令(17条) 3.1.5 指令系统标识符MCS-51单片机的指令系统采用了多种记忆符号,要 真正的理解每一条指令,必须先了解各种助记符的意义: Rn:n=0-7, 表示当前工作寄存器区的8个寄存器R0-R7 @Ri:i=0、1,表示当前工作寄存器中用于简介寻址的2个 寄存器R0和R1 Direct:表示内部RAM单元的地址,取值为00H-7FH时对应 内部RAM低128B单元;取值为80H-0FFH时,表示特殊功 能寄存器 @DPTR:表示以间接寻址方式出现的数据指针DPTR #data:出现在指令中的8位常数,也称为8位立即数 #data16:出现在指令中的16位常数,也称为16位立即数 Addr11:11位目标地址。用在ACALLA和AJMP指令中,可 以使程序转向与下一条指令首字节位于同一2KB区域的任 何单元. Addr16:16位目标地址。用在ACALLA和AJMP指令中,可 以使程序转向64KB存储器的任何单元 Rel:带符号的8位相对偏移量。用在SJMP和所有的条件转 移指令中,可以使程序转向以下条指令的手字节为基址, 以rel为偏移量的程序存储器单元。Rel的取值范围在-128-+127之间 Bit:可直接寻址位的位寻址 /bit:在位操作上,表示对位先取反,然啊后在参与运算,但 不改变指定位的原值 (x):表示x寄存器的内容或地址为x的存储单元中的内容 ((x)):表示由间接寻址的存储单元的内容 $:代表当前指令的首地址,通常用在相对转移指令中。 3.2 数据传送类指令数据传送指令的基本助记符为“MOV‖,通用格式如下: MOV &目的操作数&,&源操作数& 数据传送指令的功能就是把由“源操作数”所置顶的数据传送到 “目的操作数”所指定的存储单元或寄存器中,而“源操作数”所指 定的数据不变。 此类指令不影响 Cy AC OV标志,只影响奇偶标志P。3.2.1 内部RAM单元之间的数据传送指令内部RAM单元之间的数据传送通常是通过MOV指令来实现的,这类指 令称为一般数据传送指令。 1 以累加器A为目的操作数的传送指令 MOV A,Rn ;A← Rn MOV A,direct ;A←(direct) MOV A,@Ri ;A←(Ri) MOV A,#data ;A← data 这组指令的功能是把源操作数所制定的数据送入累加器A,源操作数可 以采用寄存器寻址、寄存器间接寻址和立即数寻址方式 2 以工作寄存器Rn(n=0-7)为目的操作数的传送指令 MOV Rn,A ;Rn ← A MOV Rn,direct ;Rn ←(direct) MOV Rn,#data ;Rn ← data 这组指令的功能是把源操作数所指定的数据送入当前工作寄存器去的某 个寄存器。 3 以间接寄存器为目的操作数的传送指令 MOV @Ri,A ;(Ri) ← A MOV @Ri,direct ;(Ri) ←(direct) MOV @Ri,#data ;(Ri) ← data 这组指令的功能是把源操作数所指定的数据送入 R0 或 R1 所指向的内 RAM单元。 4 以直接地址为目的操作数的传送指令 MOV direct ,A ; direct ← (A) MOV direct ,Rn;direct ← ( Rn ) MOV direct1 ,direct2;direct1 ← ( direct2) MOV direct , @Ri;direct ← ( (Ri) ) MOV direct , #data;direct ← data 这组指令的功能是把源操作数所制定的数据送入直接地址所对应 的内RAM单元或SFR。这里再次强调direct表示内部RAM或SFR的字 节地址5 以DPTR为目的的操作数的传送指令 MOV DPTR , #data16;DPTR &-data16 这条指令的功能是把16位立即数送入DPTR,这是整个指令系统 中仅有的一条16位数据传送指令,使用该指令可为外部程序存储器或 外部数据存储器建立一个地址指针。16位寄存器DPTR由DPH和DPL 组成。这条指令的执行结果是把高8位的立即数送入DPH,低8位立即 数送入DPL. 3.2.2 栈操作指令引入堆栈的目的,就是在子程序调用或中断时,保护和恢复现场 数据及断点地址。在指令系统中有两条堆栈操作指令。 1 进栈指令 PUSH direct;SP←(SP+1)(先变指针) (SP)←(direct)(再压栈) 这条指令先对栈指针 SP 加 1 ,然后将直接寻址的内 RAM 单元或 SFR的内容传送到SP所指向的内部RAM单元。 2 出栈指令 POP direct ;(direct)←(SP)(先出栈) SP ← SP-1 (再变指针) 这条指令先将堆栈指针SP指向内部RAM单元的内容送入直接寻 址的内RAM单元或SFR,再对栈指针SP减1. 3.2.3 数据交换指令数据交换主要在内RAM和累加器A之间进行,有整字节和半字节 两种交换指令。 1 整字节交换指令 XCH A,Rn ;A&=& Rn XCH A ,direct ;A&=&(direct) XCH A,@Ri ;A&=&(Ri) 这组指令的功能是将累加器A的内容与源操作数所制定的数据进行交换 2 低字节交换指令 XCHD A,@Ri ;A0~3&=&(Ri)0~3 这条指令的功能是将累加器 A 的低半字节与由 @Ri 指定的内部 RAM单元的低半字节交换,高半字节保持不变。 3 高 低半字节互换指令 SWAP A ;A0~3&=&A4~7 这条指令的功能是将累加器A的高半字节和低半字节交换 3.2.4 累加器A与外部RAM的数据传 送指令外部数据存储器与内部数据存储器的数据传送只能通过累加器A 进行,且只能采用间接寻址方式。 1 读外部数据存储器或外部IO口的指令 MOVX A,@Ri ;A ← ((Ri)) MOVX A, @DPTR ;A← (DPTR) 2 写外部数据存储器或外部IO口的指令 MOVX @Ri, A ;( Ri ) ← A MOVX @DPTR,A ;(DPTR) ← A MCS-51 指令系统中只有 MOVX 指令能够访问外部数据存储器, 即只有这类指令能产生 /RD或/WR信号。其中含有@Ri的指令用于访 问地址数为8位的外RAM单元或IO口;含有@DPTR 的指令用于访问 地址位数为16位的外RAM单元或IO口。 3.2.5 累加器A与ROM的数据传送指 令(查表指令)程序存储器属于只读类型,因此,有关程序存储器的指令只能 实现单方向的数据传送,且只能采用基址+变址寄存器间接寻址方式 1 基址寄存器为PC的查表指令 MOVC A,@A+PC ;A ← ((A)+(PC)) 这条指令把PC作为基址寄存器,A的内容和PC的内容相加后得到 一个16位的地址,然后将与该地址对应的程序存储器单元的内容传送 到累加器A。 2 基址寄存器为DPTR的查表指令 MOVC A,@A+ DPTR ;A ← ((A)+(DPTR)) 这条指令是把DPTR作为基址寄存器,A的内容和DPTR的内容相 加后得到一个16位的地址,然后将与该地址对以后能够的程序存储器 的单元内容送到A中 3.3 算术运算类指令算术运算类指令共24条,包括加,减,乘和除4种最基本的算术操作。 这4种指令能对8位无符号数直接进行运算;借助溢出标志,可对带符号数进 行补码运算;借助进位标志。可以实现多字节加减运算;借助调整指令,也 可对压缩BCD码进行运算。 3.3.1 加法指令 MCS-51的指令系统只有8位数据的加法运算指令,包括半加、全加及增量运算 1 不带进位的加法运算(半加) 不带进位的加法运算相当于数字电路的半加器,参与运算的数据只有被 加数和加数,而不考虑低位的进位,指令格式如下: ADD A,Rn ;A← A + Rn ADD A,direct ;A← A +(direct) ADD A,@Ri ;A← A +(Ri) ADD A,#data ;A← A + #data Cy:进位标志 它反映将两个数当作无符号数运算时有无进位的特征 Ov:溢出标志 它反映将两个数当作带符号数运算时有无溢出的特征 2 带进位加法运算(全加) 带进位的加法运算相当于数字电路的全加器,参与 运算的数据除了 被加数和加数外,还要考虑低位的进位,指令格式如下: ADDC A,Rn ;A← (A) + (Rn) + (Cy) ADDC A,direct ;A← (A) +(direct)+ (Cy) ADDC A,@Ri ;A← (A) +(Ri)+(Cy) ADDC A,#data ;A← (A)+ #data + (Cy) 这组指令常用于多字节无符号数据的加法运算。 3 加1指令 加一指令又称为增量运算,包括5条指令: INC A ;A← (A )+ 1 INC Rn ;Rn← (Rn) + 1 INC direct ;(direct)← (direct)+ 1 INC @Ri ;(Ri)←((Ri))+ 1 INC DPTR ;DPTR←( DPTR) + 1 这组指令是对累加器、寄存器、 内部RAM单元或数据指针进行加1 操作。加一指令不影响标志位的状态 4 十进制调整指令 DA A ;把A中按二进制相加的结果调整成按BCD码相加的结果 3.2.2 减法指令MCS-51的指令系统只有8位的数据的减法运算指令,且只有全 减和减量运算 带借位减法运算(全减) 带进位的减法运算相当于数字电路的全减器,参与运算的数据 除了被减数和减数外,还要考虑低位的借位指令格式如下: SUBB A,Rn ;A←( A )-( Rn) -(Cy) SUBB A,direct ;A← ( A ) -(direct)- (Cy) SUBB A,@Ri ;A← ( A ) -(Ri)- (Cy) SUBB A,#data;A← ( A ) - #data C (Cy) 这组指令的功能是从累加器A中减去由不同寻址方式确定 的操 作数及进位标志,结果让这累加器A中。1. 2 减1指令 减1指令又称为减量运算,包括4条指令: DEC A ;A← (A )- 1 DEC Rn ;Rn← (Rn) - 1 DEC direct ;direct← (direct)- 1 DEC @Ri ;(Ri)←((Ri))- 1 这组指令的功能是对累加器、寄存器以及内RAM单元的内容减1. 若元数据为00H,减1后下溢为0FFH。该组指令不影响标志位。 3.3.3 乘法指令MCS-51的指令系统中只有一条乘法运算指令,且只 能进行8位的无符号数的乘法运算,指令格式如下: MUL AB ;A← (A )×( B )低字节, B ← ( A)× (B)高字节 该指令的功能是把累加器A和累加器B的两个8位无符 号数相乘,乘积又送回到A 、B. 3.3.4 除法运算MCS-51的指令系统中只有一条除法运算指令,且只 能进行8位的无符号数的除法运算,指令格式如下: DIV AB ;A÷B→商在A中,余数在B中 该指令是把A中的8位无符号数除以B中的无符号数, 商存在A中,余数存放在B中。 3.4 逻辑操作类指令逻辑操作指令共24条,所有指令均对累加器按位进行操作,无 进位,一般不影响标志位。3.4.1 单操作数逻辑运算指令 单操作数逻辑运算指令都是针对累加器A的操作指令,执行后影 响P标志,其中带进位循环移位指令还将影响cy标志。 1 累加器A清0指令 CLR A ; A ←0 2 累加器A求反指令 CPL A ; A ←(/A) 3 累加器A循环左移指令 RL A ; A7 ←A6 ←….. ←A0 ←A7 该指令连续执行4次,效果同指令“SWAP A‖ 4累加器A带进位循环左移指令 RLC A ; CY ← A7 ←A6 ←….. ←A0 ←CY 5累加器A循环右移指令 RR A ; A0-&A7-&….. -&A1 -&A0 6 累加器A带进位循环右移指令 RRC A ; CY-&A7-&….. -&A0-&CY 3.4.2 双操作数逻辑运算指令 双操作数逻辑运算指令可进行8位无符号二进制的逻辑“与”、 “或”及“异或”运算 1 逻辑“与”指令 ANL A,Rn ;(A) ∧ R n → A ANL A,direct ;(A) ∧ (direct) → A ANL A,@Ri ;(A) ∧ (( Ri)) → A ANL A,#data ;(A) ∧ data → A ANL direct,A ; (direct) ∧ (A) → direct ANL direct,#data ; (direct) ∧ data → direct 这组指令的功能是:两个操作数按位进行逻辑“与”运算,并将 结果存入A或直接寻址的片内RAM单元(包含SFR) 2 逻辑“或”指令 ORL A,Rn ;(A) ∨ (R n )→ A ORL A,direct ; (A )∨ (direct) → A ORL A,@Ri ; (A) ∨ (( R i)) → A ORL A,#data ; (A )∨ data → A ORL direct,A ; (direct) ∨( A )→ direct ORL direct,#data ; (direct) ∨ data → direct 这组指令的功能是:两个操作数按位进行逻辑“或”运算,并 将结果存入A或直接寻址的内RAM单元 3逻辑“异或”指令 XRL XRL XRL XRL XRL XRL A,Rn A,direct A,@Ri A,#data direct,A ; (A)
(R n )→ A ; (A)
(direct) → A ;( A)
( R i ) → A ; (A ) data → A ; (direct)
(A )→ directdirect,#data ; (direct)
data → direct这组指令的功能是:两个操作数按位进行逻辑“异或” 运算,并将结果存入A或直接寻址的片内RAM单元 3.5 控制转移类指令计算机的程序一般是按照顺序执行的,但有时因为任务要求,也 可以用控制转移类指令改变程序的执行顺序。 指令共17条,包括条件转移类指令、无条件转移类指令 及子程 序调用与返回指令 3.5.1 无条件转移指令 不规定条件的转移指令称为无条件转移指令。MCS-51共有4条无 条件转移指令: 1 长转移指令 LJMP addr16 ;PC ←addr16 指令执行时把16位目标地址直接给PC,从而实现程序转移。2 绝对转移指令 AJMP addr11 ;PC ←(PC)+2,PC10-0 ←addr10-0,PC15-11不变 指令执行时,PC的高5位与指令中的11位地址拼接在一起,共同 形成16位的目标地址,从而实现现在地址(下一条指令)所在2KB范围 内的转移 3 短转移指令 SJMP rel ; PC ←(PC)+2,PC ←(PC)+rel 该指令的功能是根据指令之中给出的相对偏移量rel, 计算出程序将要转移到目标地址: 目标地址=源地址+2+rel 4 间接转移指令 JMP @A+DPTR ;PC ←(A)+(DPTR) 这条指令的功能是把累加器中的8位无符号数与数 据指针DPTR的16位数相加,结果作为目标地址,指令执 行后不改变A和DPTR的内容,也不影响标志。 3.5.2条件转移指令所谓条件转移是指程序的转移是有条件的,当满足条件时,就按 指令给定的相对偏移量进行转移;否则,程序顺序执行。 1 累加器判0转移指令 JZ rel ;若(A)=0,则PC ← (PC)+2+rel ;若(A)≠0,则PC ← (PC)+2 JNZ rel ;若(A)≠0,则PC ← (PC)+2+rel ;若(A)=0,则PC ← (PC)+2 这两条指令以累加器A的内容是否为0作为转移的条件 2 比较不相等转移指令 a=data时:PC+3→PC,Cy=0 a&data时:PC+3+rel,Cy=0 a&data时:PC+3+rel,Cy=1CJNE A, #data,rel CJNE Rn,#data,rel CJNE A,direct,rel CJNE @Ri,#data,rel 这组指令的功能是比较两个操作数是否相等,若两数不相等则转 移;若相等则顺序执行下一条指令。 3 减1不为0转移指令 DJNZ Rn,(Rn)-1→Rn, 若(Rn)≠0则(PC)+2+rel→PC 若(Rn)=0则(PC)+2→PCDJNZ direct,(direct)-1→direct, 若(direct)≠0则 (PC)+3+rel→PC 若(direct)= 0则(PC)+3→PC 这组指令对控制已知循环过程十分有用:指定任何一个工作寄存 器Rn或RAM单元direct为循环变量,对循环赋值后,每完成一次循环, 循环变量自动减1,直至为0结束。 3.5.3子程序调用与返回指令子程序是程序设计中常用的一种结构,为了缩短程序、节省存储 空间,常常用把逻辑上相对独立或具有通用意义的某段程序编写成子 程序,当某个程序需要引用该子程序时,只需通过子程序调用指令即 可完成转向子程序,在执行完毕后,再返回原程序继续执行。 在调用时需要解决: (1)保护断点 (2)建立子程序入口 为了实现自程序的调用与返回,MCS-51提供了两条调用指令 和两条返回指令。 1 绝对调用指令 ACALL addr11 ; PC ←(PC)+2,SP←(SP)+1, (SP)←PC7~0 SP ←(SP)+1,(SP)← PC15~8,PC10~0←addr11 该指令为双字节指令,执行该指令后,PC自动加2指向下一条指 令的首地址,然后将PC的值压栈保护,接着将目标地址的低11位送 到PC的低11位与PC的高5位拼成一个新的地址----子程序入口地址, 从而使程序转到被调用的子程序处去执行。 2 长调用指令 LCALL addr16 ;PC←PC+3,SP←(SP)+1,(SP)←(PC7~10) SP←(SP)+1,(SP)←(PC15~8), PC←(addr16) 该指令为3字节指令,执行该指令后,PC自动加3指向下一条指 令的首地址,然后将该地址压栈保护,接着将16位目标地址送到PC, 从而使程序转到被调用的子程序处去执行。3 一般子程序返回指令 RET ;PC15~8← ((SP)),SP←(SP)-1 ;PC7~0← ((SP)),SP←(SP)-1 当程序执行到本指令时,自动从堆栈中取出断点地址送给PC,然 后返回调用指令的下一条指令处继续往下执行。 4 中断子程序返回指令 RETI ;PC15~8← ((SP)),SP←(SP)-1 ;PC7~0← ((SP)),SP←(SP)-1 该指令与 RET 指令功能基本相同,除此之外 RETI 在返回断点的 同时,还要释放中断逻辑以接受新的中断请求。中断服务程序必须用 RETI返回。 3.5.4 空操作指令空操作指令是唯一的一条不使CPU产生任何操作的 控制指令。 NOP ;PC ←(PC)+1 NOP指令的功能是使程序计数器加1,在执行时间上 消耗12个时钟周期,因此常用NOP指令实现等待或延时。 3.6 布尔(位)操作指令MCS-51单片机的一个最大的特点就是在硬件结构上有一个布尔 处理器,对应这个处理器,指令系统中设计了处理布尔变量的指令子 集。 该位操作指令共17条,所有的位操作指令均采用位寻址方式,在 指令中位地址可用四种方式表示: (1)直接寻址方式 (2)点操作符表示方式 (3)位名称方式 (4)标号表示(自定义地址)方式3.6.1 位传送指令MOV C , bit 其中:C为PSW中的Cy; MOV bit , C bit为布尔变量的位地址。 这组指令的其中一个操作数必须是进位标志C,另一个可以是位地址。 3.6.2 位置位和复位指令1. 位置位指令 SETB C SETB bit 2.位复位指令 CLR C CLR bit;1→Cy ;1→( bit ) ;0→Cy ;0→( bit ) 3.6.3 位逻辑运算指令1 位逻辑“与”指令 ANL C, bit ;(C)∧( bit )→ C ANL C, /bit ;(C)∧ /(bit )→ C 2. 位逻辑“或”指令 ORL C, bit ;(C)∨( bit )→ C ORL C, /bit ;(C)∨/( bit )→ C 3. 位逻辑“非”指令 CPL C ;/(C ) → C CPL bit ;/(bit) →bit 3.6.4 位条件转移指令1. 累加器cy状态判断转移指令 JC rel ;若Cy=1,则(PC)+2+rel→PC ;若Cy=0,则(PC)+2→PC JNC rel ;若Cy=0,则(PC)+2+rel→PC ;若Cy=1,则(PC)+2→PC2. 位状态判断转移指令 JB bit ,rel ;若(bit)=1,则(PC)+3+rel→PC ;若(bit)=0,则(PC)+3→PC JNB bit ,rel ;若(bit)=0,则(PC)+3+rel→PC ;若(bit)=1,则(PC)+3→PC JBC bit ,rel ;若(bit)=1,则 (PC)+3+rel→PC,0→bit ;若(bit)=0,则 (PC)+3→PC 3.7 伪指令在用汇编语言进行程序编写时,除了使用指令系统规定的指令 外,还要用到一些伪指令。 伪指令是用来指示与控制汇编过程的一些命令,实行上与一般 指令相似,但并不产生机器代码。 1. 起始伪指令ORG 【标号:】 ORG 地址表达式 2. 结束伪指令END 【标号:】 END 【地址或标号】3. 字符赋值伪指令 字符 EQU 表达式4.位地址符号复制伪指令 位地址符号 BIT 位表达式 5. 字节定义伪指令DB 【标号:】 DB 字节数据表 6. 字定义伪指令DW 【标号:】 DW 字数据表7.定义空间伪指令DS 【标号:】 DS 表达式 3.8 51单片机C语言程序设计基础1.C51的数据类型与存储类型 2.C51对单片机资源的定义 3.运算符、表达式与基本语句 4.内部资源操作类程序 5.数据处理类程序 6.C51程序的设计与开发 1. C51的数据类型与存储类型1.1 数据类型 1.2 存储类型 1.3 C51的指针 C语言是一种编译型的程序设计语言,既有高 级语言具有的库函数丰富、语法限制少、可读性 强、移植性好等优点,还有汇编语言的具有面向 硬件操作,目标代码质量高等长处。此外,其模 块化设计的程序结构也为软件的开发提供了极大 的方便。 数据类型是指编程语言所使用的数据结构,主要 包括用什么数据形式、长度、范围、码制等来表 示数据与变量。 存储类型则为数据在微机存储器中的定位方式。 1.1数据类型数据类型主要包括了:位型(bit),无符号字符型 (unsigned char),有符号字符型( signed char ),无符号 整型( unsigned int ),有符号整型( signed int ),有符号 长整型( signed long ),无符号长整型( unsigned long), 浮点型( float),双精度浮点型(double)和指针型(pointer) 这十种与标准C相似的数据类型。 如下表所示:数据类型 Bit 名称 位型 长度/Byte … 长度/bit 1 值域 0或1Signed charunsigned char Signed int Unsigned int有符号字符型无符号字符型 有符号整型 无符号整型1字节1字节 2字节 2字节88 16 16-128~+1270~255 -32768~+535Signed longUnsigned long Float 指针 Sbit有符号长整型无符号长整型 浮点型 指针型 特殊位型4字节4字节 4字节 1~3字节 1位3232 32 8~24 1-~ +0~?1.176E-38~3.40E+38对象地址 0或 1Sfrsfr168位特殊功能寄存器 型16位特殊功能寄存 器型1字节2字节8160~2550~65535表 1 数据类型 除此之外,C51还有面向单片机中特殊功能寄存器的特殊位型 (sbit),8位特殊功能寄存器型(sfr),以及16位特殊功能寄存器 型(sfr16)这三种数据类型。 不同的数据类型的变量可以根据使用操作上的方便进行转换。一 种转换的方法就是使某种低层数据类型的变量等于另一种较为高层的 数据类型的变量,如此则前者自动的被赋予了后者的数据类型,另一 种方法是采用强制的数据转换运算符。 例如: unsigned char x,y;/*定义x和y为无符号字符型变量*/ unsigned int z;/*定义z为无符号整型变量*/ z=x;/*x自动转换成无符号整型变量*/ z=(int)y;/*y被强制转换成无符号整型变量*/ 位变量(bit):变量的类型是位,位变量的值可以是1(true)或 0(false)。与8051硬件特性操作有关的位变量必须定义在MCS51CPU片内存储器(RAM)的可位寻址空间中。字符变量(char):字符变量的长度为1byte即8位。这很合适51 单片机,因为51单片机每次可以处理8位数据。 整型变量(int):整型变量的长度为16位。51系列CPU将int型变 量的msb(最高位上的符号标志位)存放在低地址字节。长整型变量(long int):长整型变量的长度是32位占用4个字节, 其他方面与整型变量相似。浮点型变量(float):浮点型变量为32位占4个字节,许多复杂的 数学表达式都采用浮点变量数据类型。它用符号位表示数的符号,用 阶码和尾数表示数的大小。用它们进行任何数学运算都需要使用由编 译器决定的各种不同效率等级的库函数。Franklin C51的浮点变量数 据类型的使用的格式与IEEE-754标准(32)有关,具有24位精度, 尾数的高位始终为“1‖,因而不保存,位的分布如下: *1位符号位; *8位指数位 *23位尾数 ?符号位是最高位,尾数为最低的23位,内存中按字节存储如下:地址内容+0+1+2+3SEEE EEEEMMMM MMMM MMMM MMMM EMMM MMMM其中,S:符号位,1表示负,0表示正。 E:阶码偏移为127 M:23位尾数,最高位为“1‖ 浮点变量值-12.5的十六进制为: 0xC1480000 在编程时如果使用有符号和无符号两种数据类型,那么 就得使用两种格式类型的库函数,这将使占用的存储空间 成倍增长。因此在编程时如果只强调程序的运算速度又不 进行负数的运算时,最好采用无符号格式。 1.2 存储类型C51的存储类型是指数据在单片机存储器中的定位方 式,亦即数据定位于存储器在哪片区域中。由于C51单片 机内部有四部分存储区域:内部数据RAM,特殊功能寄存 器,外部数据RAM和程序ROM。而在内部数据RAM中含 有可位寻址区域,外部数据RAM则可以分为可用页面操作 和全区间操作的寻址区域,故可以分为6种: 数据类型 Data Bdata Idata Pdata Xdata Code长度(bit) 8 8 8 8 16 16长度(byte) 1 1 1 1 2 2值域范围 0~255 0~255 0~255 0~255 0~36值长度(bit) 8 8 8 8 16 16表2 存储类型Data:直接寻址的内部数据RAM区,共256字节,亦即全部内部数据(包 括片内RAM以及特殊功能寄存器)存储区域。 Bdata:可位寻址的内部数据RAM区,共16字节,允许采用位与字节混合 使用。 Idata:间接寻址的内部数据RAM区,共128字节。数据定义在这片存储 器中将有最快的访问速度。 Pdata:分页寻址的外部数据RAM区,共256字节,可通过MOVX A, @Ri 或MOVX @Ri,A来实现。 Xdata:全空间寻址的外部数据RAM区,64k字节。可通过MOVX A,@DPTR或MOVX @DPTR,A来实现。 Code:代码存储区,64k字节,该区中的数据只能被读出,不能写入,并 由指令MOVC A,@DPTR+A来实现的。 C51中变量的定义既要有数据类型的属性,也要 有存储类型的属性。 定义数据与变量的方法举例如下:Signed char data vary; /*定义vary为signed char型 (有符号字符型)变量,定位于data区(片内RAM中可以 直接寻址128字节单元区)*/ Float idata x,y,z; /*定义x,y,z为浮点型变量, 定位在idata区(片内RAM中间接寻址的256字节单元)*/ C51约定:在定义变量时,如果略去了存储器类型标志符, 编译器在编译该语句时会自动选择默认的存储类型。默认的 存储类型由编译控制参数中的存储器模式 SMALL,COMPACT和LARGE确定,具体见表3:存储模式SMALL COMPACT说明数据及变量放入可直接寻址的片内RAM (最大128字节,默认存储类型是data) 数据及变量放入分页寻址的片外RAM区 (最大256字节,默认的存储类型是pdata) 数据及变量直接放入片外RAM区(最大64k, 默认的存储类型是xdata)LARGE表3 存储模式及说明例如,运用C51.exe 对文件sample.c编译时,在缺省其他一些编译控制参 数的条件下,编译命令为:C51 sample.c COMPACT,则选择了COMPACT模式。 1.3 C51的指针指针就是地址,数据或变量的指针就是存放该数 据或变量的地址。C51的指针、指针变量的定义 与用法和通用的C语言基本相同,只是包括了存 储类型的属性。也就是说,除了要表明指针本身 所处的存储空间外,还需要表明该指针所指向的 对象的存储空间。 C51的指针分为存储器类型指针和通用型指针两 种,存储器型指针的定义含有指针本身及所指对 象的存储类型。 C51支持“基于存储器”的指针和“一般”指针。1.基于存储器的指针基于存储器的指针是在说明一个指针变量时,指定它所指向的对象的 存储类型。 如:char xdata* Px为指向一个定义在xdata存储器中的字符变量的指针变量。Px本身在 默认的存储区域(由编译模式决定);其长度为2个字节。2.一般指针在函数调用中,函数的指针参数需要用“一般”指针。一般指针的说明 形式为: Char *pz; 这里没有指定指针变量pz所指向的变量的存储类型,pz处于编译模式默认 的存储区,长度为3个字节,格式为:地址 内容+0 存储类型的编码+1 高地址位偏移量+2 低地址位偏移量表4 一般指针存储格式 其中,存储类型由编译模式决定,不同的存储区域的编码 如下:存储类型 编码值 Idata 1 Xdata 2 pdata 3 Data 4 Code 5表5 不同区域的编码说明在用常量做指针时,如定义外部端口的地址,必须注意正确定义存储 类型和偏移。 如:要将数值0x41写入地址为0x8000的外部数据存储器,则可写为: #includeDabsacc.h‖ XBYTE[0x; 其中,XBYTE是一个指针,它是在头文件absacc.h中定义的,定义如下: #define XBYTE((unsigned char*)0x20000L) XBYTE被定义为 (unsigned char*)0x20000L,为一般指针,其存储类型 为2,即为xdata类型,偏移量是0000,这样,XBYTE就成为指向外部数 据存储器的零地址单元的指针。而XBYTE[0x8000]则表示为外部存储器 的0x8000单元。 2 C51对单片机资源的定义2.1 特殊功能寄存器的定义特殊功能寄存器是MCS-51系列单片机各种硬件资源在内部数据存 储器的映射,通过对SFR的读写可方便地实现对单片机相应硬件资源 的操作。 一.特殊功能寄存器的字节定义 特殊功能寄存器的字节定义包括标识符定义和关键字定义。 1.标识符定义 定义符SFR与绝对字节地址值定义特殊功能寄存器。 定义格式:sfr特殊功能寄存器字节名=绝对字节地址 例:sfr P0=0x80; Sfr SCON=0x98; 说明:以上两例定义了P0,SCON为字节型特殊功能寄存器,其字节 地址分别为特殊功能寄存器空间的80H和98H。 二.特殊功能寄存器的双字节定义 定义符sfr16与低字节地址值定义有关联的双字节特殊功能 寄存器。 根据给出的绝对低字节地址,该字节和下一个字节组合, 定义为双字节特殊功能寄存器。 定义格式:sfr16 特殊功能寄存器双字节名=绝对低字节地 址 例:sfr16 DP=0x82; 说明: 因为0x82为数据指针寄存器DPTR低位(DPL)的 绝对地址,故DP被定义为双字节0x82,0x83的双字节组 合,亦即DPH和DPL的组合。 三.特殊功能寄存器的位定义 特殊功能寄存器的位定义都是运用定义符sbit来指明的, 共有如下三种定义方法。 1.定义为特殊功能寄存器的符号位 定义格式: sbit 位变量=特殊功能寄存器字节名的指定位 例: 若PSW和P1是已经被定义过的特殊功能寄存器字节 名,则 Sbit OV=PSW^2;/*定义OV为PSW的第2(D2)数据位*/ Sbit CY=PSW^7;/*定义CY为PSW的第7(D7)数据位*/ Sbit P1_0=P1^0;/*定义P1_0为端口P1的第0(D0)数据 位*/ 2.定义为特殊功能寄存器的地址位定义格式:sbit 位变量=特殊功能寄存器直接字节地址的 指定位 例:sbit RS1=0xd0^4; /*定义RS1为直接字节地址0xd0的第4(D4)数据位*/ Sbit SM2=0x98^5; /*定义SM2为直接字节地址0x98的第5(D5)数据位*/3.定义为位地址空间的地址位定义格式:sbit 位变量=位地址 例:sbit TR1=0x8e/*定义TR1为地址0x8e的位变量*/ sbit TR0=0x8c/*定义TR0为地址0x8c的位变量*/ 2.2 片内RAM中位与寄存器组的定 义MCS-51单片机片内RAM中有128位可寻址操作区,这 是通用的而非特殊功能寄存器中的位定义区。 一、片内RAM中的位定义 定义格式:sbit 位变量=字节变量^n; 其中,位变量为要定义的位变量名;字节变量为已被定义 过的并在片内RAM中可寻址的字节型变量;n为该字节变 量的第n位。 例如: unsig Sbit my_bit=ibase^0; 说明:前一句定义为ibase为定位于片内RAM中位可寻址 的无符号字符型变量(字节型),后一句定义my_bit为 ibase的第0(D0)数据位。 二、寄存器组定义 定义格式:函数名() 其中,n 表示该函数使用第几组寄存器。由于MCS-51单 片机只有4组工作寄存器组,故n通常的范围为0~3。 例如: void my_fun(void)using 3; 说明:函数my_fun()采用第3组寄存器作为工作寄存器组。 2.3 寄存器绝对地址的定义MCS-51单片机对外部设备或外围电路的接口与操作都是 通过把后者作为片外数据寄存器的一个或一些存储单元,并 采用读写操作来实现的。为了指名对片外外设或外围电路的 操作,片外RAM存储器绝对地址的定义就必不可少。除此以 外,C51对寄存器绝对地址的定义还包括了其他所有的存储 空间:片外RAM、片内ROM.从数据长度来看,定义还包括 了字节型与字型两种。 在包含头文件zbsacc.h的前提下,使用#define指令就可 以定义出不同存储空间中各个变量的绝对地址。 定义格式:#define 变量名 关键字 【绝对地址】 说明:变量名为被定义的对象;绝对地址在存储器中的绝对 地址值;关键字为所定义的存储空间与数据长度。 其中关键字有如下八种: CBYTE: 程序存储器空间,字节型 DBYTE: 片内RAM空间,字节型 PBYTE: 分页操作的片外RAM空间,字节型 XBYTE: 片外RAM空间,字节型 CWORD: 程序存储器空间,字型 DWORD: 片内RAM空间,字型 PWORD: 分页操作的片外RAM空间,字型 XWORD:片外RAM空间,字型 例 (1)#define XVAL DBYTE[0X20] /*定义字节型变 量XVAL,定位在片内RAM中,字节地址20H*/ XVAL=0x8a; /*把数据8aH赋给变量或写入20H 单元*/ Y=XVAL; /*把XVAL内容赋给变量y或从20H单 元读出数据到y变量*/ (2)#define PORT XBYTE[0X2000]/*定义字节型变量PORT,定位 在片外RAM中,字节地址为2000H*/ PORT=0X55;/*把数据55H写入该变量*/ 这样的两条C51的语句等价的汇编符号指令为:MOV DPTR,#2000HMOV A,#55H MOVX @DPTR,A 显而易见,这实现了MCS-51单片机输出数据到外设或是外围电路的 操作,而语句 #define PORT XBYTE[0X2000] ACC=PORT; 则实现了输入数据的操作。 2.4 中断的定义C51 对中断的定义主要包括如何确定中断源及相应的中 断服务程序。在通常的应用中,这中定义包括函数名,中 断源的类型号以及执行此中断服务程序所使用的寄存器组。 定义格式:VOID 函数名(void)interrupt n 【using m】 { …./*中断服务程序*/ } 前一个void表明中断无返回值,函数名()中void表明无 参数传递;interrupt m指明所使用的中断源,不同n表明 不同的中断源,见表4.4。Using m指明执行此终端函数 所使用的寄存器组(0~3),此项如缺省,则默认为使用 寄存器组0。 由于高优先级中断可以中断正在处理的低优先级中断程序, 因而必须注意寄存器的安排。 最好给每种优先级程序分配不同的寄存器组。若不使用关 键字using,则编译系统会使用当前工作寄存器组的8个寄 存器,并在保护现场时,将此组都压入堆栈。 例:void timer(void)interrupt 1 using 2 { …… } 其中,中断函数名为timer0,中断类型号为1,从表4.4可知,中 断源为定时器/计数器T0,执行此中断函数使用第2组寄存器。关于 中断定义后中断编程的方法将在4.4节中介绍。中断源类型号 0 1 2 3 4 中断源 外部中断0,INT0 定时器/计数器0,T0 外部中断1,INT1 定时器/计数器1,T1 串行端口中断,RI/TI表6 中断源的中断类型号 3 运算符、表达式与基本语句3.1 运算符和表达式 一、算术运算符和算术表达式 C51的算术运算符主要有: + (加) - (减) ×(乘) / (除) % (求余) 它们都是双目标运算符符,即要求元算符两侧各有一个运 算对象。需要指出的是: (1)两个整数相除,商取整 (2)求余运算符%只用于整数 算数运算符的顺序是先乘、除、求余再加减。 算术运算符还包括有递增、递减运算符:++和--, 它们都是单目运算符,分别使变量的值增1和减1。 例如++I和- -i分别表示把i的值加1或减1再使用; 而i++、i―则是先执行了i的值,再把i的值增1或减 1。 C51规定了运算符的优先级和结合性。当一个操 作数的两侧都有运算符时,哪一个运算符先执行, 哪一个运算符后执行,是由两个运算符的优先级 和结合性决定的。一般先由优先级的高低来决定 运算顺序,当优先级相同时,再看结合性。 二、赋值运算符和赋值表达式 C51赋值运算符号“=‖就是赋值运算符,它的作用就 是将一个数赋给一个变量。如“a=5‖的作用是执行一次赋 值操作(或称为赋值运算),把常量5赋给变量a; 也可以将一个表达式的值赋给一个变量,例如x=y+5. 这种用赋值运算符把一个变量和一个表达式连接起来的式 子就是赋值表达式。 当赋值运算两侧的数据类型不一致时,赋值时数据会 自动进行类型转换,转换的基本规律如下: (1)把数据赋给不同数据类型的变量时,数据自动变换格 式,满足被赋值变量的数据类型。 例:signed int u; u=-4.55; 则u=-4 (2)赋值运算(等号右边的变量)的数据类型自动转换 成为被赋值等号左边的变量的数据类型,加以运算和赋值。 例 unsigned char x,y; Unsigned int z; X=z+5; 则取z的低8位数据加上5,赋值给x。 (3)运用数据类型的强制转换成需要的数据类型。 例 bit clp=1; Unsigned char x; X=(unsigned char)clp+10; 则x=11。 在赋值符“=‖之前加上其他运算符,可以构成复合的运算 符C51提供了下列十个符合赋值运算符“ +=、-=、×=、/=、%=、《=、》=、&=、^=、|=、 例 p1.0接一开关,p1.1接一发光二极管,p1.1高电平时, 发光管亮,如图4.4所示。要求判断开关S的状态,开关打 开时,二极管不亮,开关闭合时,二极管亮。Vcc Vcc程序如下:#include &reg^1.h& P1.1 sbit p10=p1^0; P1.0 sbit p11=p1^1; 8051 void main() { P11=!p10; } 程序的功能是:开关S控制了引脚p1.1 LED的亮暗。 三、位操作运算符和位表达式 C51有6种位操作运算

我要回帖

更多关于 单片机检测高低电平 的文章

 

随机推荐