使用定时/plc高速计数器的使用T1对外事件计数。要求每计数100,就将T1改成定时方式,控制P3.7输出一个脉宽

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第6课--定时器.ppt 19页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
·········
··········
80C51的定时/计数器
实现定时功能,比较方便的办法是利用单片机内部的定时/计数器。也可以采用下面三种方法: 5.3.1 定时/计数器的结构和工作原理
思考题及习题 1、80C51有几个中断源?各中断标志是如何产生的?又是如何复位的?CPU响应各中断时,其中断入口地址是多少? 2、某系统有三个外部中断源1、2、3,当某一中断源变低电平时便要求CPU处理,它们的优先处理次序由高到低为3、2、1,处理程序的入口地址分别为2000H、2100H、2200H。试编写主程序及中断服务程序(转至相应的入口即可)。 3、外部中断源有电平触发和边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同?怎样设定? 4、定时/计数器工作于定时和计数方式时有何异同点? 5、定时/计数器的4种工作方式各有何特点? 6、要求定时/计数器的运行控制完全由TR1、TR0确定和完全由、高低电平控制时,其初始化编程应作何处理? 7、当定时/计数器T0用作方式3时,定时/计数器T1可以工作在何种方式下?如何控制T1的开启和关闭? 8、利用定时/计数器T0从P1.0输出周期为1s,脉宽为20ms的正脉冲信号,晶振频率为12MHz。试设计程序。 9、要求从P1.1引脚输出1000Hz方波,晶振频率为12MHz。试设计程序。 10、试用定时/计数器T1对外部事件计数。要求每计数100,就将T1改成定时方式,控制P1.7输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。设晶振频率为12MHz。 11、利用定时/计数器T0产生定时时钟,由P1口控制8个指示灯。编一个程序,使8个指示灯依次一个一个闪动,闪动频率为20次/秒(8个灯依次亮一遍为一个周期)。 12、若晶振频率为12MHz,如何用T0来测量20~1s之间的方波周期?又如何测量频率为0.5MHz左右的脉冲频率? 结束 谢谢观看 * * 软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。 采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。 采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。 一、定时/计数器的结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
二、定时/计数器的工作原理
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。 设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ?s。
定时/计数器的控制
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。 一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下: GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了或引脚为高电平这一条件。
正在加载中,请稍后...当前位置: >>
第一章 单片微型计算机及其应用概述
单片微型计算机及其应用1 单片微型计算机及其应用第一章 绪论 第二章 MCS―51单片机的结构和原理 第三章 MCS51指令系统 第四章 汇编语言程序设计 第五章 MCS-51单片机内部定时/计数器及其应用 第六章 单片机系统扩展第七章 MCS-51系统的串行接口 第八章 MCS-51 单片机的中断系统第九章 单片机应用系统的组成2 Single Chip Microcomputer 本章内容第章什么是单片机单片机的结构特点绪 论单片机特点及应用3 一、什么是单片机1、微型计算机硬件结构 ――常见的微机外形台式微机立式微机便携式微机 微型计算机硬件结构 ――微机硬件组成显示器 主机 键盘 鼠标5 微型计算机硬件结构 ―― 内部结构CPU输 入 设 备输 入 接 口 电 路运算器 控制器输 出 接 口 电 路输 出 设 备存储器 硬件系统6 微型计算机系统微型计算机系统CPU输 入 设 备输 入 接 口 电 路运算器 控制器存储器 硬件系统输 出 接 口 电 路硬件系统――构成微机 的实体和装置输 出 设 备 软+件 系 统软件系统――微机系统所 使用的各种程序的总称软件系统与硬件系统共同 构成实用的微机系统,两 者是相辅相成、缺一不可 的。7 2、单片微型计算机微型计算机系统CPU输 入 设 备输 入 接 口 设 备运算器 控制器输 出 接 口 设 备输 出 设 备软+件 系 统存储器硬件系统单片微型计算机是指集成在一个芯片上的微型计算机, 简称单片机 ―― 单片机实质上就是一个芯片8 几种单片机封装形式9 单片机内部结构示意图T INT定时器/计数器中断系 统P0-P3并 行 I/ O 口CPU存储 器串 行 I/ O 口TxD RxD10 单片机应用系统单片机应用系统单片机应用系统由硬件和软件组 成 硬件是应用系统的基础单 片 机+接口 电路 及外 设等+软 件软件是在硬件的基础上对其资源 进行合理调配和使用,从而完成 应用系统所要求的任务,二者相 互依赖,缺一不可硬件注:本课程的重点 1.掌握单片机应用系统硬件原理的分析方法。 2.掌握软件设计与调试的基本技能。11 二、单片机的结构特点1、存储结构。采用ROM和RAM严格分 开的哈佛结构,可分为:内部ROM、 RAM,外部ROM、RAM。 2、引脚采用分时复用技术。由于芯片集 成度高,而引脚又不宜过多,因此将部 分引脚设计为多功能的,例如,地址总 线和数据总线采用分时复用等。12 3、特殊功能寄存器(21个) 采用特殊功能寄存器 来控制单片机的功能状态,如定时/计数器、 串行口和中断逻辑等。 4、全双工串行接口 内部具有全双工串行接口, 可实现单机或多机通讯,为实现分布式控制 系统提供了可能。 5、布尔处理器 内部具有布尔处理器,可十分 方便的进行二进制位逻辑运算,进行组合逻 辑设计。13 三、单片机的特点及应用1. 单片机的特点体积小,重量轻 电源单一,功耗低功能强,价格低运行速度快,抗干扰能力强,可靠性高。可以嵌入到电子产品中――嵌入式应用系统14 2. 单片机应用电讯方面工业方面汽车方面民用方面 数据处理方面仪表方面15 A、单片机应用模式1、单机应用 即在一个应用系统中仅使用了一个单片机,其主要应用 领域有:智能产品、智能仪表、测控系统、数控控制机智能 接口。 2、多机应用 多机应用是单片机在高科技领域中应用的主要模式,其 高可靠性、高控制功能及高运行速度的“三高”技术,在未 来的高科技工程系统中采用单片机多机系统作为主要的发展 方向。其应用模式可分为功能弥散系统、并行多机处理系统 和局部网络系统。16 B、单片机的供应状态单片机通过执行指令流来完成预先设定的功能, 其指令的存放方式取决于片内ROM的配置情况: 1、片内ROM配置 即单片机片内带有掩模 ROM,其内容由厂家出厂时设定,因而其生产 周期长、经济风险大但成本较低。征对以上特 点,已有厂家推出了一次性(即OTP型)用户 可编程的单片机,因而兼具成本低、周期短、 低风险等优点。17 2、片内EPROM配置 适用于样机开发,可 多次重写。 3、片内E2PROM配置 适用于样机开发, 可多次重写,其重写比EPROM更方便,目 前使用最为广泛。4、片内无ROM配置 由于片内无ROM,因 而需在片外扩展ROM,其电路复杂,灵活 性差,已逐渐被淘汰。18 C、单片机的等级集成电路依据其使用环境可分为三个等级 1、商用级 环境 2、工业级 温度范围为0~70OC,限用于机房及办公 温度范围为-45~85OC3、军用级 温度范围为-50~125OC 不同级别之间价格相差很大,如军用级为商用级的 10倍乃至上百倍。单片机为工业级产品。19 3. 单片机种类◆生产厂商:?美国微芯片公司:PIC16C××系列、PIC17C××系列、PIC1400 系列, ?美国英特尔公司的MCS-48和MCS-51系列, ?美国摩托罗拉公司的MC68HC05系列和MC68HC11系列, ?美国齐洛窆镜Z8系列, ?日本电气公司的μPD78××系列, ?美国莫斯特克公司和仙童公司合作生产的F8(3870)系 列等。20 A、单片机的分类(按用途)(1)通用型单片机 它可向开发者提供较多资源, 具有较强的通用性,适应性较强,应用较为广泛, 便于普及和推广,但有时会造成大量资源的浪费。(2)专用型单片机 专门征对特殊使用场合的具体 要求而设计,通常是微控制系统的集成产品,因而 其抗干扰能力比通用型强,适用于各种恶劣环境, 但由于其专用性强,其应用范围受到了很大的限制。21 B、按字长分类(1)4位机 主产于日本,如SM系列,UPD系 列等,其特点是价癖阋耍涫翟怂隳芰 差。 (2)8位机 目前市面上的主导机型,如Intel, Motorola,Zilog等厂家的产品,由于其功能强 大,价竦土分址倍啵荡砟芰σ 般,应用范围较广。22 (3)16位机、32位机 具有强大的数值处 理能力,且具有并行功能,适用于有大量 数据处理的应用系统,由于其字长较长, 运行速度较高,因而数据处理速度高。它 的发展壮大直接推动了信息化时代的到来。 如TMS320C50,行一次乘法运算仅需 60ns。 ◆单片机的发展经历了由4位机到8位机,再到 16位机的发展过程 ◆目前8位单片机仍是单片机的主流机型;23 第二章 MCS―51单片机的结构和原理? ? ???2-1 关于MCS-51系列 2-2 MCS-51系列单片机的结构原理 2-3 MCS-51单片机的引脚及其片外总线结构 2-4 MCS-51单片机的工作方式 2-5 MCS-51单片机的时序24 2-1 关于MCS-51系列一、MCS-51系列型号 型 号 51
89C52 89C2051 片内程序存储器 NO 4K ROM 4K EPROM NO 4K E2PROM 8K E2PROM 2K E2PROM 片内数据存储器 128Bytes 128Bytes 128Bytes 256Bytes 128Bytes 256Bytes 128Bytes25 二、MCS-51的主要特点1、单+5V供电,40引脚封装 2、8位字长CPU 3、片内有振荡电路和时钟电路 4、32根I/O线 5、64K外部RAM(不含内部RAM)26 6、64K外部ROM(含内部ROM) 7、2个16位定时/计数器(8X52有3个) 8、具有2个优先级别的5个中断源( 8X52有6 个) 9、可编程的全双工串行口,如工作方式、波 特率等 10、布尔处理器 11、128个用户可寻址位单元12、128字节内部RAM( 8X52有256个字节)27 2-2 MCS-51系列单片机的结构原理一、基本组成T0 T1时钟电路ROMRAM定时计数器CPU并行接口 串行接口 中断系统P0 P1 P2 P3TXD RXDINT0 INT1结构框图? 并行I/O口:4个 ? 8位的I/O口P0、 中央处理器 CPU:8位, P1、P2、P3。 ? 内部ROM: 运算和控制 ? 串行口:一个全 4KB掩膜ROM, 功能 ? 中断控制系统: 双工串行口。 ? 时钟电路:可 用于存放程序、 5个中断源(外 产生时钟脉冲 原始数据和表 ? 中断2个,定时 内部RAM:共 ? 序列,允许晶 定时/计数器: 格。 /计数中断2 256个RAM单 两个16位的定 振频率6MHZ和 个,串行中断1 元,用户使用 时/计数器,实 12MHZ 个) 前128个单元, 现定时或计数 用于存放可读 功能。 写数据,后 128个单元被 专用寄存器占 用。 28 1、8051单片机的基本组成1. 2.3.4.5. 6. 7.8.中央处理器CPU:8位,运算和控制功能 内部RAM:共256个RAM单元,用户使用前128个单元, 用于存放可读写数据,后128个单元被专用寄存器占用。 内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表 格。 定时/计数器:两个16位的定时/计数器,实现定时或计数功 能。 并行I/O口:4个8位的I/O口P0、P1、P2、P3。 串行口:一个全双工串行口。 中断控制系统:5个中断源(外中断2个,定时/计数中断2 个,串行中断1个) 时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和 29 12MHZ 4K2 . 存 储 器1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20片内 ROM 87518031805189C51片内 RAM40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 24 22 211 2 3 4 5 6 7 RAM 8
11 12 13 1428 27 26 25 24 23 22 21 20 19 18 17 16 1564K1 2 3 4 5 6 7 RAM 8
11 12 13 1428 27 26 25 24 23 22 21 20 19 18 17 16 151 2 3 4 5 6 7 8 9 10 11 12 13 14276428 27 26 25 24 23 22 21 20 19 18 17 16 15EPROM276464K1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15EPROM256B(字节)30 org(1)程序存储器中断入 口地址0FFFH 0FFEH0000h ljmp main org 002bh Main: mov sp,#60h ……... . .中断50023HFFFFH002BH串行口中断 定时器1中断 外部中断1 定时器0中断 外部中断0 0000H是程序执行的起始单元, 在这三个单元存放一条 无条件转移指令(64K)001BH 0013H中断4 中断30FFFH (4K) 0000H内部EA=1 0000H外部EA=00FFFH (4K) 0000H(PC)000BH H H中断2 中断18位程序存储器程序存储器资源分布31 110 1 0第3区 第2区 第1区18H~1FH10H~17H 08H~0FH 00H~07H 片内RAM地址(2)数据存储器FFFFH1 0 0第0区寄存器区RS1 RS0工作寄存器区选择位RS0、RS17FH(64K)数据缓冲区/堆栈区7F 7830H 2FH 20H07 R7R0 R7 R0 R7 R0 R7 R0003区外部FFH 80H 7FH (低128B) 00H (高128B) 专用 寄存器 内部 RAM 0000H1FH 18H 17H 10H 0FH 08H 07H 00H可作一般RAM 读写也可位寻 址区2区工作寄存器区1区 0区数据存储器内部RAM存储器 32 RAM位寻址区位地址表(P11)单元地址 MSB2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H 7F 77 6F 67 5F 57 4F 47 3F 37 2F 27 1F 17 0F 07 7E 76 6E 66 5E 56 4E 46 3E 36 2E 26 1E 16 0E 06 7D 75 6D 65 5D 55 4D 45 3D 35 2D 25 1D 15 0D 05位地址7C 74 6C 64 5C 54 4C 44 3C 34 2C 24 1C 14 0C 04 7B 73 6B 63 5B 53 4B 43 3B 33 2B 23 1B 13 0B 03 7A 72 6A 62 5A 52 4A 42 3A 32 2A 22 1A 12 0A 02 79 71 69 61 59 51 49 41 39 31 29 21 19 11 09 01LSB78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00注意: 一个单元地址对应有8个位地址 MSB――Most Significant Bit (最高有效位) LSB ――Least Significant Bit (最低有效位)33 (3)特殊功能寄存器(高128个单元)MCS-51内部安排有21个特殊功能寄存器 各特殊功能寄存器的符号及地址见表2-2。分 别由于以下各个功能单元: ? CPU:ACC、B、PSW、SP、DPTR(由两 个8位寄存器DPL、DPH组成) ? 并行口:P0、P1、P2、P3 ? 中断系统:IE、IP ? 定时/计数器:TMOD、TCON、TH1、TL1、 TH0、TL0 34 ? 串行口:SCON,SBUF,PCON 3、CPU由运算器、控制器和若干SFR(ACC,B, PSW,SP,DPTR)构成。 (1)运算器:实现数据的算术运算和逻辑运 算。 (2)累加器ACC:提供一个操作数并存放运 算结果,其进位标志CY同时也是布尔处理 器的累加器。 (3)寄存器B:用于乘法和除法操作,也用 作暂存器。?36 (4)CPU标志寄存器PSW?CY AC F0 RS1 RS0 OV ― P?? ? ?CY:进位标志,有进位或借位 时为1,否则为0 AC:辅助进位标志当D3向D4有 进位或借位时为1,否则为0 F0:用户标志 RS1、RS0:工作寄存器组 OV:溢出标志,结果超过128~+127时,OV=1,否则为01 1 0 01 0 1 0第3区第2区 第1区 第0区 寄存器区18H~1FH 10H~17H 08H~0FH 00H~07H 片内RAM地址RS1 RS037 (4)CPU标志寄存器?MOVSP,#60HP:奇偶校验标志,当ACC中“1”的个数为 奇数个时,P=1 MOV DPL,#0FFH MOV ? PSW.1:保留位,用户可使用。 DPH,#0FH ? 椎栈指针SP:先入后出的特殊存储器指针。 ? 数据指针DPTR:用于存放16位地址,可分为 DPH和DPL。38 4、并行I/O口P1. 0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3. 0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 24 22 21 P0. 0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7片外扩展存储器时P0、 P2口自动作为总线使用(1)特点:?4个8位并行I/O口:P0,P1,P2,P3; ?均可作为双向I/O端口使用。输入时可 以缓冲,输出时可以锁存。 P0:访问片外扩展存储器时, 复用为低8位地址线和数据线 P2:高8位地址线。 P1:双向I/O端口 P3:第二功能3980318051P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2. 0 (2)I/O口的字节地址和位地址(3)下面分别介绍4个I/O口的结构40 ?B、P1口的位结构 P1口由于只能作为I/O口使用,因而输出控制电路 结构同P0口不同。42 C、P2口位结构P2口既可用作I/O口,也可用作高8位地址总线。43 D、P3口位结构P3口既可用I/O口,又分别具有第二功能,但二者不 能混用,其第二功能如下表所示。44 E输出举例+5V指令1:MOV P1,#00H 指令2:MOV P1,#0FFH 指令3:MOV P1,#0AAH 指令4:CLR P1.0 指令5:SETB P1.0ALE P1. 0 P1. 1 P1. 2 P1. 3 P1. 4 P1. 5 P1. 6 P1. 7 WR RD 1 0 1 0 1 0 1 0 1 0 1 01 01 046 F你知道P3.4 对应寄存器A 哪一位吗?输入举例读端口:89C51ALEMOV P3, #B MOV A, P3P3.41 1+5 V 4.7 k WS0P3. 0 P3. 1 寄存器A P3. 2 P3. 3 P3. 40 1 1 1 1 1 1 1 1 ××××××××1 1 1 1 1 1P3. 5P3. 6 P3. 7 WR RD注:当I/O端口作为输入使 用时,需先向端口写入 “1”,使内部的FET截止, 再读入引脚的状态。你知道这是 为什么吗?47 2-3 MCS-51单片机的引脚及其片外总线结构一、MCS-51单片机信号引脚简介P1. 0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST 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 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 24 22 21 VCC P0. 0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA ALE PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2. 0(1)、电源线:VCC(+5V)、VSS(地) (2)、振荡电路:XTAL1、XTAL28031C51(3)、复位引脚:RST(4)、并行口:P0、P1、P2、P3(5)、EA:访问程序存储控制信号 (6)、PSEN:外部ROM读选通信号 (7)、ALE:地址锁存控制信号P3口线的第二功能481、管脚图 二、片外三总线结构1、地址总线(AB) 由P2,P0提供16位地址2、数据总线(DB)由P0口提供8位数据3、控制总线(CB)由P3口和RST、EA、ALE、PSEN组成49 2-4 MCS-51单片机的工作方式一、复位方式复位方式、程序执行 在振荡电路工作时,在RST引脚上加上一个至 方式、单步执行方式、 少保持2个机器周期的高电平,单片机完成复位。 掉电方式、节电方式? ? ?其复位电路结构和内容如图所示 复位电路 复位不影响RAM内容。使PC指向0000H,重新执 行程序。 复位可分为上电自动复位和按键复位两种方式。51 二、程序执行方式本方式是单片机的基本工作方式,复位 后,程序自0000H开始执行。 ? 用户的程序一般不可能从0000H开始存 放。因此,需要从0000H开始存放一条 转移指令,以使执行转移到用户程序的 入口地址。?54 三、单步执行方式在外界脉冲的控制下,单片机每执行一条 指令就暂停下来。55 四、掉电和节电方式用于低功耗系统设计D7 D0PCONSMOD― ― ―GF 1GF0PDIDL56 五、编程和校验方式对于内部含有EPROM或EEPROM的单片 机,可用于对其编程或对其校验。57 2-5MCS-51单片机的时序一、时序 ? 在执行指令的过程中,CPU的控制器发出的 一系列特定的控制信号在时间上的相互关系。 ? 内部控制信号和外部控制信号。58 二、区别几个概念?1、振荡周期(时钟周期):振荡信号周期, fOSC ? 2、状态周期:又叫S周期,可分为P1和P2两拍, 其中P1通常完成逻辑操作,而P2通常完成内部 寄存器与寄存器间的数据传输,fosc/2。 ? 3、机器周期:单片机的基本操作周期,fosc/12。 (教材P25)包含六个状态周期。59 ?4、指令周期:执行一条指令的周期,分别有单、双和四机器周期指令。 ?5、ALE信号:可作为一种周期信号使用。60 三、MCS-51指令的取指/执行时序指令的处理 都包括取指 (取操作码或 操作数)和执 行(指令的逻 辑功能)两个 阶段,每出现 一次ALE信号, CPU就进行一 次取指操作。61 三、MCS-51指令的取指/执行时序例:取指过程 执行过程运算器 ①② 累加器AMOV A,#09H程序计数器74H 09H;把09H送到累加器A中外部地址总线AB地址寄存器0002H PC= H内 部 数 据 总 线0000H存 储 器(PC) (PC) (PC) H 0 0 0 0 1 0 0 1
1 1 0 1 0 0地址 译码指令的处理都包 括取指(取操作 码或操作数)和 执行(指令的逻 辑功能)两个阶 段,每出现一次 ALE信号,CPU 就进行一次取指 操作寄存器区 数据缓冲器 内部控制信号 指令 寄存器 译码 外部数据总线DB时钟及清零外部控制总线CB62 四、访问外部ROM时序在S1P2时刻 3.在S3P1时刻 ALE信号有效。4.在S4P2后开始 第二次读入,其 过程与第一次相 同。/PSEN开始有效, 可以用它选通外部 ROM的使能端,被 选种的ROM单元的 内容,从P0口读入 2.P0口送出ROM 的低8 CPU,然后/PSEN 位地址,P2口送出高8位 失效。地址,A7-A0只持续到 S2结束,故在外部要用 锁存器,可用ALE作为 锁存信号,A15-A8在整 个读指令过程中都有效63 五、访问外部RAM时序在同一机器周期的S5状态产 生的ALE信号的下降沿,将 P0总线上出现的低8位地址 锁存在外部的锁存器中。读数据本章作业:除7题外64 第章MCSSingle Chip Microcomputer本章内容 寻址方式 数据传送类指令 算术运算类指令 逻辑操作类指令 控制转移类指令 位操作指令 常用伪指令6551 指 令 系 统 概 述??MCS-51系列单片机的指令系统专用于51系列单片 机,共有111条指令,具在丰富灵活的寻址方式, 其指令格式与8086的指令系统相同,甚至某些指令 还完全相同。使用时应注意区别。 在111条指令中,从存储空间的占用上看,单字节 指令占49条,双字节指令占45条,三字节指令占17 条;从执行时间上看,在111条指令中,单机器周 期指令占64条,双机器周期指令占45条,仅乘法和 除法两条指令为四机器周期指令。因而无论是存储 空间的利用率,还是时间的执行效率都是较高的, 再加上灵活的寻址方式,特别适合于实时测量和控 制场合。因而,单片机又常被称为微控制器。66 §3-1 指令的格式及标识一、指令的格式指令按字节长度可以分为三种:7 0单字节指令:7操作码0 7例如: MOV A,R00双字节指令:7操作码0数据或寻址方式7 0 7例如:MOV A,30H0三字节指令:操作码数据或寻址方式数据或寻址方式 例如:MOV DPTR,#2010H指令的格式:标号: 操作码操作数或操作数地址;注释操作码助记符、目的操作数、源操作数是指令的核心部分。方号 67 中内容为可选项,其有无视具体的指令而异。 二、关于标号标号不允许只用数字,而应以字母打头,后 面跟数字,不可使用运算符号,不能同十六 进制数发生混淆,较好的取名原则是见名知 义。便于程序员在调试程序时更加顺利,往 往一个标号就是一个功能入口,因而在使用 标号时应特别小心,用并非每句指令都需要 标号。68 三、关于指令中的符号标识符 号 Rn Ri #data addr16 addr11 direct 含 表示作为间接寻址的地址指针R0~R1 表示8位立即数,即00H~FFH 表示16位地址,用于64K范围内寻址 表示11位地址,用于2K范围内寻址 8位直接地址,可以是内部RAM区的某一单元或某一专用功能寄存器的地址 义 表示当前选定寄存器组的工作寄存器R0~R7#data16 表示16位立即数,即0000H~FFFFHRelBit (X) ←带符号的8位偏移量(-128~+127)位寻址区的直接寻址位 X地址单元中的内容,或X作为间接寻址寄存器时所指单元的内容 将 ← 后面的内容传送到前面去69 四、关于注释为了增强程序的可读性,使别人易读,或 防 止 日久 遗 忘, 可 适当 加 些注 释 。注 释 由 “;”开始。70 §3-2寻址方式在程序行中,操作码代表了该句指令的功 能,而功能的对象却由操作数决定,由操作 数指出参与运算的数或该数所在的地址。取 得操作数的地址的方法叫做寻址方式。寻址 方式与计算机的存储空间结构是密切相关的。 灵活运用各种寻址方式,可以大大的提高程 序的运行效率。71 MCS-51基本七种寻址方式寻址方式 寄存器寻址 寻址空间 R0~R7 A,B,AB,DPTR 内部 RAM 的低 128 字节 SFR 直接寻址 位地址 00~7FH SFR 中的位寻址空间 ROM 立即寻址 内部 RAM(Ri,SP) 寄存器间接寻址 外部 RAM(Ri,DPTR) 变址寻址 ROM(A+PC,A+DPTR) ROM 相对寻址 位地址 00~7FH 位寻址 SFR 中位寻址区72 一、寻址方式(找信方式)我的信在他 那!找信去!①②你能说出第 二封信的 “地址”吗?注:找信是寻找信的“地 址”!73 目的地信立即数寻址 直接寻址寄存器寻址寄存器间接寻址 变址寻址 相对寻址 位寻址MOV P1, #55H MOV A, #01H74操作数目的地#55H #XXH 目的地立即数寻址P32 直接寻址P32 寄存器寻址P31 寄存器间接寻址P33 变址寻址P33 相对寻址P34直接给出地址 20H――直接寻址注:寻址是寻操作数的“地 操作数 址”! 内部RAM目的地 或SFR区20HXXH位寻址P35MOV P1, 20H75 目的地立即数寻址 直接寻址R0-R7寄存器寻址寄存器间接寻址 变址寻址 相对寻址 位寻址你能说出为什么 叫寄存器寻址吗?目的地A B DPTR操作数寄存器XXHMOV P1, A76 你能说出1号箱 立即数寻址 子和2号箱子分 别对应内存中哪 直接寻址 一部分吗?目的地寄存器寻址寄存器间接寻址内部RAM变址寻址 相对寻址 位寻址目的地3AH65H操作数R0寄存器R1 DPTR3AH寄 存 器 间 接 寻 址 寄 存 器MOV P1,@R077 错!MOV P1,R0 MOV P1,@R0 MOV P1,20H MOV P1,#20H寻址比较错!① ② ③ ④ 直接将20H这个数送P1口 地址在寄存器R0里 地址是寄存器R0 地址是内存20H对!错!78 寻址比较对!MOV P1,R0 MOV P1,@R0 MOV P1,20H MOV P1,#20H ① ② ③ ④错!直接将20H这个数送P1口 地址在寄存器R0里面 地址是寄存器R0 地址是内存20H错!错!79 错! 错!MOV P1,R0 MOV P1,@R0 MOV P1,20H MOV P1,#20H寻址比较① ② ③ ④ 直接将20H这个数送P1口 地址在寄存器R0里面 地址是寄存器R0 地址是内存20H对!80错! 对!MOV P1,R0 MOV P1,@R0 MOV P1,20H MOV P1,#20H寻址比较错!① ② ③ ④ 直接将20H这个数送P1口 地址在寄存器R0里 地址是寄存器R0 地址是内存20H错!错!81 内部RAM 内部RAM立即数寻址 直接寻址3AH 46H65H操作数寄存器寄存器寻址寄存器间接寻址 变址寻址 相对寻址 位寻址目的地3AH 46HADPTR PC基址寄存器 12H变址寄存器 34HMOVC A, @A+DPTR82 立即数寻址直接寻址PC 2056H寄存器寻址寄存器间接寻址 变址寻址 相对寻址 位寻址? ? ?PC 2002H? ? ? 操作数目的地2002H + XXH =2056H PC 54HSJMP 54H83 立即数寻址 直接寻址想一想: 如果想使27H单 元的第3位置1, 该怎么办呢?28H 0 27H 0 0 1 0 0 0 0 0寄存器寻址寄存器间接寻址 变址寻址 相对寻址 位寻址? ? ?21H 20H? ? ?84 例:SETB单元地址 MSB LSB 2FH 7F2EH 2DH 2CH 2BH 2AH 29H 28H 77 6F 67 5F 57 4F 473DH7E 76 6E 66 5E 56 4E 46 7D 75 6D 65 5D 55 4D 45 7C 74 6C 64 5C 54 4C 44位寻址地址表位地址7B 73 6B 63 5B 53 4B 43 7A 72 6A 62 5A 52 4A 42 79 71 69 61 59 51 49 41 78 70 68 60 58 50 48 4027H26H 25H 24H 23H 22H 21H 20H3F37 2F 27 1F 17 0F 073E36 2E 26 1E 16 0E 063D35 2D 25 1D 15 0D 053C34 2C 24 1C 14 0C 043B33 2B 23 1B 13 0B 033A32 2A 22 1A 12 0A 023931 29 21 19 11 09 013830 28 20 18 10 08 00 85 立即数寻址 直接寻址SETB 3DH寄存器寻址寄存器间接寻址 变址寻址 相对寻址 位寻址28H 0 27H 0 0 1 0 0 0 0 0? ? ?21H 20H? ? ?86 §3-3 MCS―51指令系统的分类2.1 数据传送指令(29条) 2.2 算术运算指令(24条) 2.3 逻辑运算指令(24条) 2.4 控制转移指令(17条) 2.5 位操作指令(17条) 2.6 常用伪指令(17条)87 2.1 数据传送指令(29条 不影响标志位CY AC OV) ――8位数据传送指令(15条)MOV &目的操作数&,&源操作数& A Rn MOV A Rn目的地址A源地址数 据20Hdirect1 , direct2@Ri @Ri #dataMOV A,#20H88 2.1 数据传送指令(29条) ――16位数据传送指令(1条)MOV DPTR,#data16――外部数据传送指令(4条)MOVX &目的操作数&,&源操作数&A MOVXA@DPTR , @DPTR@Ri @Ri89 ――交换和查表类指令(9条)1)字节交换指令(3条)direct XCH A4)查表指令(2条)MOVC A , @A+PC MOVC A , @A+DPTR,@DPTR @Ri5)堆栈操作指令(2条)PUSH direct POP direct2)低半字节交换指令(1条)XCHD A , @Ri3)累加器A中高4位和低4位交换(1条)SWAP A90 举例例3-1 将片内RAM30H单元的内容送到片外60H; 将片外4312H单元的内容送到片内31H单元:MOV MOV MOVMOV MOV MOVA,30H R0,#60H @R0,ADPTR,#4312H A, @DPTR 31H,A91 2.2算术运算类指令(24条) ――普通加法指令(4条)Rn ADDA ,direct @Ri #dataADD ADD ADD ADDA,Rn A,direct A, @Ri A,#data注意:1.本指令影响Cy,AC,Ov,P等标志。 2.求和操作既可看成是有符号数运算, 也可看成是无符号数运算,完全由程序员编 程时自行设定。 3.计算机运算时的规定参见教材P38。93 2.2算术运算类指令(24条) ――带进位加法指令(4条)RnADDC A , direct @Ri #dataADDC A,Rn ADDC A,direct ADDC A, @ Ri ADDC A,#data 除相加时要考虑进位外,其余操作与前 面相同。 94 2.2算术运算类指令(24条)――减法指令(4条)RnSUBB A , direct @Ri #dataSUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data 减法指令是带借位的,若不需要带借位减,则 在作减法指令前清除借位位,即CLR C 减法指令影响OV、CY、AC标志位95 ――加1减1指令助记符格式INC A INC Rn INC direct INC @Ri INC DPTR DEC A DEC Rn DEC direct DEC @Ri 机器码(B) 01rrr 0101 direct rrr 相应操作 A?A+1 Rn?Rn+1 (direct)?(direct)+1 (Ri)?(Ri)+1 DPTR?DPTR+1 A?A-1 Rn?Rn-1 影响PSW的P标志 n = 0 ~ 7 rrr=000~111 , i=0,1 指令说明 影响PSW的P标志 n = 0 ~ 7 rrr=000~111 , 机器 周期 1 1 1 1 2 1 1 1 i=0,1 1960 0 0 1 0 1 0 1 (direct)?(direct)+1 direct 0001011i (Ri)?(Ri)-1 ――乘法指令(1条)MUL A B――除法指令(1条)DIV A B两个8位操作数相 乘,形成16位的积, 其中A为积的低位 而B为积的高位。 需要进行更多位的 乘法运算,需另外 编程方能实现。举例见教材P40两个8位操作数相除, 其中A为被除数而B为 除数;运算后,结果仍 然在AB中,其中A为商 而B为余数。 同乘法指令相同, 需要进行更多位的除法 运算,需另外编程方能 实现。97 十制调整指令DA A ;实现BCD码加法 BCD码相加后,根据Ac和Cy的状态对A中的数 作适当调整,使运算结果为BCD码。 这条指令对加法结果的调整规则是: (1)若累加器A低4位大于9或辅助进位标志AC= 1.则低4位加6; (2)若累加器A高4位大于9或CY=1,则高4位加6; (3)若1、2条件都满足时,则A加66H; (4)若1、2条件都不满足时,则A加00H; (5)若果加器A的最高位因调整而产生进位时,将CY 置1,若不产生进位整前的状态而并不清零。 DA指令只影响进位标志CY。98 例3-3 设ACC中为压缩BCD码56H,R3中为压缩BCD 码67H,且Cy=1,求ACC与R3的压缩BCD码之和MOV A,#56H MOV R3,#67H ADDC A,R3 DA A ;A=?(A) =(R3)=+)(Cy)= 和 =BCD码为124调整 +) 10010099 2.3逻辑及移位类指令 ――逻辑与指令(6条)助记符格式 ANL A,direct ANL A,Rn 机器码(B)
direct 01011rrr 相应操作 A?A∧direct A?A∧Rn 指令说明 按位相与 n = 0 ~ rrr=000~111 7 , 机器 周期 1 1ANL A,@RiANL A,#data ANL direct,A ANL direct,#data0101011i data direct
direct dataA?A∧(Ri)A?A∧#data (direct)?(direct)∧A (direct)? (direct)∧#datai=0,111不影响PSW的P标志 不影响PSW的P标志1 2100 ――逻辑或指令(6条)助记符格式 ORL A,direct ORL A,Rn ORL A,@Ri ORL A,#data ORL direct,A ORL direct,#data 机器码(B)
direct 01001rrr 000100data
direct data 相应操作 A?A∨direct A?A∨Rn A?A∨(Ri) A?A∨#data (direct)?(direct)∨ A (direct)? (direct)∨#data 不影响PSW的P标 志 不影响PSW的P标 志 指令说明 按位相或 n=0~7, rrr=000~111 i=0,1 机器 周期 1 1 1 1 1 2101 ――逻辑异或指令(6条)助记符格式 XRL A,direct XRL A,Rn XRL A,@Ri XRL A,#data XRL direct,A 机器码(B) 相应操作 指令说明 按位相异或 n=0~7, rrr=000~111 i=0,1 机器 周期 1 1 1 1 不影响PSW的P标志 不影响PSW的P标志 1 20 1 1 0 0 1 0 1 A?A?(direct) direct 01101rrr A?A?Rn 100100 data A?A? (Ri) A?A?#data0 1 1 0 0 0 1 0 (direct)?(direct)?A direct (direct)? X R L
(direct)?#data direct data direct,#data102 ――累加器A清0和取反指令助记符 格式 CLR A CPL A机器码(B) 10100相应操作 A?00H A?A指令说明 A中内容清0,影响P标志 A中内容按位取反,影响P标志机器 周期 1 1103 ――循环移位指令?RL A RR AA.7A.0?A.7A.0?RLC A RRC ACYA.7A.0?CYA.7A.0104注意:执行带进位的循环移位指令之前,必须给CY置位或清零。 例3-4 设(20H)=(X7X6X5X4X3X2X1X0) (21H)=(Y7Y6Y5Y4Y3Y2Y1Y0) 试编程使(30H)=Y2Y1Y0X4X3X2X1X0 程序清单: MOV 30H,20H ANL 30H,#B; B:二进制 MOV A,21H O:八进制 RL A D:十进制 SWAPA H:十六进制 ANL A,#H ORL 30H,A105 例3-5 若ACC=X7X6X5X4X3X2X1X0,试编程将A中 的低5位送至P1口,但不能影响P1口的高3位。程序清单: MOV A,#0AAHANL P1,#BORL P1,A106 2.4 控制转移类指令 ――无条件转移指令(4条)1) 长转移指令:LJMP AAAAH ; AAAAH?PC? ? ?PC=AAAAHAAAAH AAA9H假设执行该指 令前,PC的值 为0000H。? ? ?PC=H H注意:该指令可以转移到64 KB程序存储器中的任意位置。107 2)绝对转移指令 AJMP addr11 ; PC+2?PC, addr11 ?PC.10~PC.0操作码(第一字节) A10 A9 A8 0 0 0 0 1操作数(第二字节) A7 A6 A5 A4 A3 A2 A1 A0程序计 数器PC PC高5位 (保持不变) PC低11位11位转移地址的形成示意图108 3)相对转移指令例: SJMP 03H? ? ?PC H H 2002H03H就是当前PC值 与目的PC值相对差PC PC PC PC PC PC? ? ?H 0000H03H109 ――条件转移指令(8条)1)累加器A判0指令(2条)助记符格式 机器码(B) JZ rel JNZ rel 10000 相应操作 若A=0, 则PC?PC+rel, 否则程序顺序执行 若A≠0, 则PC?PC+rel, 否则程序顺序执行 机器 周期 2 22)减1非零转移指令(2条)助记符格式 机器码(B) 相应操作 机器周期 2 D J N Z 1 1 0 1 1 r r r Rn?Rn-1,若Rn≠0,则PC?PC+rel, Rn,rel rel 否则顺序执行 D J N Z
direct,rel direct rel (direct)?(direct)-1,若(direct) ≠0,则PC?PC+rel,否则顺序执行2110 3)比较转移指令(4条)助记符格式 机器码(B) 相应操作机器 周期 2C J N E
A,#data,rel data rel C J N E 10111rrr Rn,#data,rel data rel C J N E 1011011i @Ri,#data,rel data rel C J N E d i r e c A,direct,rel rel若A≠#data, 则PC?PC+rel,否则顺 序执行;若 A&#data,则CY=1,否则 CY=0 若 Rn≠#data,则PC?PC+rel,否则 顺序执行;若Rn&#data,则CY=1,否 则CY=0 若(Ri)≠#data,则PC?PC+rel,否 则顺序执行;若(Ri)&#data,则CY=1, 否则CY=0 若A≠(direct),则PC?PC+rel,否 t 则顺序执行;若A&(direct),则CY=1, 否则CY=0222111 ――调用和返回指令(8条)1)绝对调用指令(1条)助记符格式 机器码(B) 相应操作PC ?PC+2 SP ? SP+1,(SP)?PC0~7 SP ? SP+1,(SP)?PC8~15 PC0~10 ? addr11机器周期A C A L L a10a9a810001 addr11 addr7~022)长调用指令(1条)助记符格式 机器码(B) 相应操作 PC?PC+3 S P ? SP+1,SP?PC0~7 S P ? SP+1,SP?PC8~15 PC? addr16 机器周期 L C A L L addr15~8 addr16 addr7~02112 3)返回指令助记符格式 RET 机器码(B)
相应操作 PC8~15 ? (SP), SP ?SP-1 PC0~7 ? (SP), SP ?SP-1 子程序返回指令 机器周期 2RETIPC8~15 ? SP, SP ?SP-1 PC0~7 ? SP, SP ?SP-1 中断返回指令24)空操作助记符格式NOP机器码(B)相应操作空操作指令说明消耗1个机器周期113 举例例3-6 根据累加器A命令键键值,设计命令键操作程 序入口跳转表。程序如下: CLR C RLC A ;乘2,若用LJMP指令则乘3 MOV DPTR,#JPTAB JMP @A+DPTR JPTAB: AJMP CCS0 AJMP CCS1 AJMP CCS2114 例3-7 测试P1口输入的100个数中0~9各数的概率分布程序 MOV 40H,#100 CHK3: CJNE A,#3,CHK4 READ:MOV A,P1 INC 33H CHK0: CJNE A,#0,CHK1 DJNZ 40H,READ INC 30H SJMP EEND DJNZ 40H,READ CHK4: CJNE A,#4,CHK5 SJMP EEND INC 34H CHK1: CJNE A,#1,CHK2 DJNZ 40H,READ INC 31H SJMP EEND DJNZ 40H,READ CHK5: CJNE A,#5,CHK6 SJMP EEND INC 35H CHK2: CJNE A,#2,CHK3 DJNZ 40H,READ INC 32H SJMP EEND DJNZ 40H,READ 115 SJMP EEND CHK6: CJNE INC DJNZ SJMP CHK7: CJNE INC DJNZ SJMP CHK8: CJNE INC DJNZ SJMPA,#6,CHK7 36H 40H,READ EEND A,#7,CHK8 37H 40H,READ EEND A,#8,CHK9 38H 40H,READ EENDCHK9: INC 39H DJNZ 40H,READ EEND: SJMP $116 2.5 位操作类指令RAM 位寻址区位地址表单元地址 MSB2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H 7F 77 6F 67 5F 57 4F 47 3F 37 2F 27 1F 17 0F 07 7E 76 6E 66 5E 56 4E 46 3E 36 2E 26 1E 16 0E 06 7D 75 6D 65 5D 55 4D 45 3D 35 2D 25 1D 15 0D 05位地址7C 74 6C 64 5C 54 4C 44 3C 34 2C 24 1C 14 0C 04 7B 73 6B 63 5B 53 4B 43 3B 33 2B 23 1B 13 0B 03 7A 72 6A 62 5A 52 4A 42 3A 32 2A 22 1A 12 0A 02 79 71 69 61 59 51 49 41 39 31 29 21 19 11 09 01LSB78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00117 1.位传送指令助记符格式 MOV C,bit MOV bit,C 机器码(B) 10010 相应操作 CY? bit bit? CY 指令说明 位传送指令,结果影响CY标志 位传送指令,结果不影响PSW 机器周期 2 22.位置位和位清零指令助记符格式 CLR C CLR bit SETB C SETB bit 机器码(B)
相应操作 CY? 0 指令说明 位清0指令,结果影响CY标志 位清0指令,结果不影响PSW 位置1指令,结果影响CY标志 位置1指令,结果不影响PSW 机器周期 1 1 1 11181 1 0 0 0 0 1 0 bit? 0 bit
CY?1 1 1 0 1 0 0 1 0 bit? 1 bit 3.位运算指令助记符格式 ANL C,bit ANL C/bit ORL ,bit 机器码(B)
bit 相应操作 CY? CY∧bit CY? CY∧bit CY? CY∨bit CY? CY∨bit CY?CY bit?bit 指令说明 位与指令 位与指令 位或指令 机器周期 2 2 2ORL C/bitCPL C CPL bit bit10010位或指令位取反指令 位取反指令,结果 不影响CY22 2119 例3-8 设A、B、D代表位地址,试编程实现D 为A与B 之异或,即D=AB+AB 。MOV C,B ANL C,/A ;C与A相与 MOC D,C MOV C,A ANL C,/BORL C,DMOV D,C120 4.位转移指令助记符格式 JB bit,rel JNB bit,rel JBC bit,rel 机器码(B) bit rel
bit rel 相应操作 若bit=1,则PC?PC+3+rel,否则顺 序执行 若bit=0,则PC?PC+3+rel,否则顺 序执行 若 bit=1,则PC?PC+3+rel,bit?0, 否则顺序执行 机器周期 2 2 2121 5.判CY标志指令助记符格式 JC rel JNC rel 机器码(B) 10000 相应操作 若CY=0,则PC?PC+2+rel,否则顺序执 行 若CY≠0,则PC?PC+2+rel,否则顺序执 行 机器周期 2 2122 常用伪指令? ? ? ? ? ? ? ?定位伪指令ORG定义字节数据伪指令DB定义字数据伪指令DW 定义空间伪指令DS 符号定义伪指令EQU或= 数据赋值伪指令DATA 数据地址赋值伪指令XDATA 汇编结束伪指令END123 例3-9 编程实现下图所示的逻辑功能(P1.1) U (P2.2) V (TF0) W (IE1) X (20H.0) Y (21H.1) Z MOV C,P2.2 ORL C,TCON.5 ORL C,/00H ANL ANL C,F0 C,/09H124U(V+W)+ +Q (P3.3) Q=U(V+W)(X+Y)ZANLC,P1.1MOV F0,C MOV C,TCON.3MOV P3.3,C 补例: 条件转移类指令范例――方案一将00H~0FH这16个数顺序地置入片内 RAM20H~2FH单元中。 MOV R0,#20H MOV R7,#16 还有什么方法实 CLR A 现循环的终止? LOOP:MOV @R0,A INC A INC R0 DJNZ R7,LOOP SJMP $125JMP1.ASM 条件转移类指令范例――方案二MOV R0,#20H MOV R7,#0FH CLR A LOOP:MOV @R0,A INC A INC R0 CJNE A,#0FH,LOOP SJMP $126JMP2.ASM 条件转移类指令范例――方案三MOV R0,#20H MOV A,#0FH ;???? MOV 30H,#00H LOOP:MOV @R0,30H INC 30H INC R0 DEC A JNZ LOOP SJMP $127JMP3.ASM 条件转移类指令范例――方案四MOV R0,#20H MOV A,#0FH MOV 30H,#00H LOOP:MOV @R0,30H INC 30H INC R0 SUBB A,#01H JNC LOOP SJMP $128JMP4.ASM 练习1设内部RAM中33H单元中内容为44H,34H单元中 内容为0AFH,R0中内容为33H,R1中内容为00H,给 出以下每一条指令执行后A中的值和PSW中P的值。 MOV A, #34H MOV A, 34HMOV A, R1MOV A,@R0 注意:对PSW中P标志的影响。129 练习2设内部RAM30H单元中内容为52H,请给出以下程 序结果:MOV MOV MOV MOV MOV A, #30H A, 30H R0, #30H A, @R0 30H, #30H设P1口内容为0AAH(P1口地址为90H),请给出 以下程序结果:MOV MOV MOV MOV MOV R0, #30H 10H, P1 A, 10H @R0, A 40H, @R0130 本章主要知识点? ?指令的七种寻址方式。? 难点:寄存器间接寻址各类指令的主要功能。? 难点:查表指令 ? 难点:条件转移指令?作业: 2.2 2.4 2.6131 第章 汇 编 语 言 程 序 设 计Single Chip Microcomputer 本章内容§4-0概述§4-1 循环程序设计 §4-2 运算程序设计 §4-3 数据的拆拼和转换§4-5 查表程序 §4-6 散转程序设计 §4-7 I/O端口控制程序 §4-8 子程序调用时的参数传递132 概 述一、设计语言? ?? ???最早人们只能用机器语言(二进制)编写程序; 为了方便记忆,人们开始用助记符形式的汇编语言编写 程序,称为低级语言。然后再用汇编系统将其翻译成机 器语言,该过程称为汇编; 为了用更接近人的语言编写程序,程序设计师们发明了 高级语言,如: BASIC、FORTRAN、PASCAL、 C、JAVA 然后再用编译系统将其翻译成机器语言,该过程称为编 译; 机器只能识别机器语言。所以必须用编译系统将高级语 言编写的源程序编译成机器语言,用汇编系统将用汇编 语言编写的源程序汇编成机器语言; 由低级或高级语言构成的程序称为源程序,由机器语言 133 构成的程序称作目标程序; 源程序低级语言 汇编目标程序机器语言高级语言编译机器语言134 二、程序设计方法一、程序设计利用计算机能够接受的语言把解决问题的方法和步骤 描述出来,也就是编制计算机的程序,人们常说的软件设 计。对于单片机应用程序,我们可以把它看成是操作系统 和应用软件的集合。二、程序设计步骤用汇编语言编写一个程序的过程大致可分为以下几 个步骤: 1、分析问题,明确所要解决问题的具体要求。135 2、确定算法。根据实际问题的要求和指令系统的 特点,决定所要采用的计算公式和计算方法,这就是常 说的算法。算法是进行程序设计的依据,它决定了程序 的正确性和程序的质量。3、制定程序框图。根据算法,制定出运算步骤的顺 序,再把运算过程画成流程图。 4、确定数据格式,分配工作单元,将程序框图进 一步细化。 5、根据流程图和指令系统,编写出汇编语言源程 序。 6、程序测试。由于单片机没有自开发功能,因而 必须借助仿真器,以单步、断点、连续方式调试程序, 直到完全正确为止。特别地,对于有硬件的应用系统, 必须将软件和硬件结合起来调试,直到软件、硬件能协 调一致,浑然一体为止。136 7、程序优化。这一环节很容易被广大设计人员所 忽略。它是指从程序结构上对程序加以调整,精减一 些冗余指令,以加快程序的执行速度,节省程序存储 空间,从而提高系统的可靠性。137 三、程序设计实例引入实例 假设一个班有50个人, 共有3门选修课: ? 计算机算法 ? 服装CAD设计 ? 德语 请找出: ? 同时选了三门课的同学;?138 问题的解决?第一步 如何在计算机中表示选修某门课的所有 同学 选修这门人数计算机算法 服装CAD设计 德语4 12 25 29 39 5 12 23 25 29 39 2 25 39学生的学号这个过程实际上是设计数据结构的问题139 问题的解决?第二步 设计思路:找出同时选了三门课的同学计算机算法 CAD设计 德语这个过程实际上是设计算法的过程,既构建模型。 140 找出第一个学生 N他选计算机吗?Y第 三 步 : 设 计 流 程他选了德语吗?N NY他选了CAD吗?重复该过程Y记录要找的人N还有学生吗?Y 下一个学生结束141 几点启示? 整体构思;? 构建整体流程框图;? 结构合理,流程清晰,简单明了;? 局部模块化;142 为什么要用流程图???符合人进行逻辑思考的习惯计算机从根本上来说,没有任何逻辑 性,所以,你必须告诉它,先做什么,后做什么,遇到什么情况又该做什么, 等等 ? 流程图设计本身是一个逐步求精的过 程,最终将任务划分为若干能由机器 指令实现的小模块143 §4-1 循环程序设计一、循环程序结构 在单片机应用程序设计中, 循环程序的使用非常广泛。单循 环的结构如下图所示: 其主体为循环体,由循环 工作部分和修改控制变量构成。开始 置初值 循环工作部分 修改控制变量 循环结束控制 Y 结束144同其他语言一样,循环 程序可以实现嵌套,构成多重 循环。但切不可形成交叉。只 能将整个循环程序作为外循环 的循环体。N 二、循环程序设计举例例1、延时程序设计 DELAY: MOV DE1: MOV NOP DE2: DJNZ DJNZ RET R7,#200 R6,#123 R6,DE2 R7,DE1 ;1个机器周期 ;1 ;1 ;2 ;2 ;2如晶体振荡器频率为12MHz,则其延时时间为: 1+(1+1+2*123+2)*200+2=50.003ms 这是一个50ms的精确延时程序。145DELAY.ASM 例2、数据求和在RAM中,从50H开始连续存放N个单字节无符 号数,N存放的R2中,试编程求这N个数的和,结果 放在R4R3中。程序清单如下:NSUM: LOOP: MOV R0,#50H MOV A,R3 ADD A,@R0 MOV R3,A CLR A ADDC A,R4 MOV R4,A INC R0 DJNZ R2,LOOP RET146 §4-2 运算程序设计一、多字节加法ADDC ADDC ADDC ADDCA,Rn A,direct A, @Ri A,#data例4-3-1 设有两个4字节的二进制数2F5BA7C3H和 14DF35B8H,分别放在以40H和50H为起始地址的单元中(低 位在低地址),试编程求这个数之和,结果放在以40H为起 始地址的单元中。 ORG 0000H JASUB: CLR C LJMP JAFA JASUB1:MOV A,@R0 ORG 0100H ADDC A,@R1 JAFA:MOV R0,#40H MOV @R0,A MOV R1,#50H INC R0 MOV R2,#04H INC R1 LCALL JASUB DJNZ R2,JASUB1 LJMP $ RET 147 以上为主程序 END MULADD.ASM 本程序适合于N个字节的两数求和, 但并不严密,当最后一次加法有位时 并没有相应处理,实际应用时应根据实 际情晟宰餍薷摹148 补:多字节BCD码加法例2:有两组BCD码分别存放在23H、22H单元和33H、32H单元, 求它们的和并送入43H、42H单元中去。(高位在前,低位在后)分析:A? ? ?43H 42H? ? ?33H 32H11 1000? ? ?BCD码11H BCD码83H14923H 22H00? 0011? ? 例2:有两 组BCD码(如:1183H和 5678H),分别存放在23H、22H单元和 33H、32H单元,求它们的和,并送入 43H、42H单元中去。(高位在前,低位 在后) 解:开始 (22H)?A(32H)+A?A十进制调整A?(42H)流程图(框图)如何? 请同学们自己绘制流 程图。(23H)?A (33H)+A?A十进制调整A?(43H)结束150 开始 (22H)?AORG 0000H MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $ END(32H)+A?A十进制调整A?(42H) (23H)?A此条加法指令可否 改用带进位的(ADDC)?(33H)+A?A十进制调整A?(43H)结束151 PC PC PC PC PC PC PC PC PC PC PCORG CLR MOV ADD DA MOV MOV ADDC DA MOV END2000H C A,22H A,32H A 42H,A A,23H A,33H A 43H,AA10 11 0111? ? ?0011 + 00 10 11 11 0143H 42H? ? ?33H32H11 1000? ? ?23H 22H00?0011? ?152 多字节BCD码加法(P53)与多字节加法程序类似,但需在加法 指令后加一条十制加法调整指令。主程 序与前面相同。ORG 0000H LJMP JABCD ORG 0100H JABCD: MOV R0,#40H MOV R1,#50H MOV R2,#04H LCALL DADD LJMP $ 以上为主程序 DADD:CLR C JAD1: MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A INC R0 INC R1 DJNZ R2,JAD1 RET BCDADD.ASM 153 二、多字节减法多字节减法程序和多字节加法程序类似, 只需将加法指令换为减法指令即可。 例4-3-2 在43H~40H依次存放被减数 443ADD7BH;在53H~50H中依次存放减数 14DF35B8H,试编程求二者之差154 ORG0000HLJMP JIAN ORG JIAN:MOV 0100H R0,#40HMOV R1,#50H MOV R2,#04H LCALL JIANSUB LJMP $ 以上为主程序JIANSUB:CLR JIAN1: MOV SUBB MOV INC INC DJNZ RET ENDC A,@R0 A,@R1 @R0,A R0 R1 R2,JIAN1此程序也可以推广到N个字节的情 况。155 四、多字节数乘法MCS-51系列单片机指令系统仅能提供8位乘法指令 若需行8位以上的乘法运算,则需通过编程实现。 设(R4)(R3)中为十六位被乘数,R2中为8位乘数,其 积存放在R7R6R5中。 由于(R4)(R3)*(R2)=[(R4)*256+(R3)]*(R2) =(R4)*(R2)*256+(R3)*R2 R4 × R3 R2B+ B R7 A R6A(R3)*(R2) (R4)*(R2)*256R5156 CHENFA:MOV A,R2 MOV B,R3 MUL AB ;(R3)*(R2) MOV R5,A MOV R6,B MOV A,R2 MOV B,R4 MUL AB ;(R2)*(R4) ADD A,R6 MOV R6,A MOV A,B ADDC A,#00H MOV R7,A RET157 五、多字节除法51指令系统提供一条8位的除法指令,但要想用于 多位除法运算则较为困难。因此,在进行多字节除法运 算时,多采用手工算法相同的思路。 商数 除数 被除数 ― 除数 ;够减则商1,否则商0 余数 ;够减则商1,否则商0并恢复余数 ― 除数 余数 ;够减则商1,否则商0并恢复余数 ― 除数 …... 以上为右移对齐的手工算法,计算机的算法仍采用 这种方法,只不过是采用左移对齐的办法,称为“恢复 余数法。158 Cy R6 R5 ― R2 R5被除数除数商数,够减则商1,否则商0 并恢复余数159 除法次数--&R7清进位,(R6)(R5)左移一位移出一位--&标志位(R6)-(R2)Y N 商1 保存余数 (R7)-1=0? Y 返回 N160标志位=1? N 进位位=1?Y 商0并恢复余数 程序清单: DSUB:MOV DV1: CLR MOV RLC MOV MOV RLC MOV CLR SUBB JB JNC ADDR7,#08H C A,R5 A R5,A A,R6 A 07H,C C A,R2 07H,GOU GOU A,R2AJMP DV2 GOU: INC R5 ;商1 DV2: MOV R6,A ;保存余数 DJNZ R7,DV1 RET;被除数左移1位;07H=1,则够减 ;C=0,则够减 ;恢复余数161 本程序仅适用于商小于255的情辏 R6&R2,若商大于255,必须加以适当调 整。本程序关键在于商只有“0”或“1” 两种情辏虼耍看紊獭1”均采用左 移后加1的方法来实现。162 §4-3 数据的拆拼和转换在实际应用中,经常会遇到实际需要的数据格式同得 到的数据格式不完全相符的情况,如采集到的数据、运算 的结果、输出的数据等,这就需要对其进行适当的转换, 以符合实际情况的要求。这就是通常所说的数据拆拼和转 换。一、数据的拆拼程序清单:BBCD:MOV ANL MOV MOV A,7CH A,#0FH R5,A A,7CH例4-4-1 转换前 7CH中为压缩BCD码XY 0Y转换后 R6R5中为非压缩BCD码 0XANL A,#0F0H SWAP A MOV R6,A RET163 例4-4-2 拆拼前 (20H)=X7X6X5X4X3X2X1X0 拆拼后 (21H)= X0X1X2X3X4X5X6X7DESORT: MOV MOV MOV RESO: CLR MOV RLC MOV MOV RRC MOV DJNZ RET A,20H R6,A R7,#08H C A,R6 A R6,A A,21H A 21H,A R7,RESOA6 A5 A4 A3 A2 A1 A0 0 A7 A7 0 0 0 0 0 0 0 0A5 A4 A3 A2 A1 A0 0A6A6 A7 0 0 0 0 0 0164 补充内容压缩BCD码拆开变成ASCII码例1:将20H单元的两个压缩BCD码拆开变成ASCII码,存入21H、22H 单元。(假设20H中的BCD码为)? ? ?B A? ? ?22H什么是BCD码? 什么是ASII码? BCD码与ASII码关 系 高四位ASII码低四位ASII码 压缩BCD码16521H 20H11 0100? ? ? 方法1:将BCD码除以10H,恰好是将BCD 码分别移到了A、B的低4位。然后再各自 与30H相或,即成为ASCII码。方法2:利用半字节交换指令来实现。167 二、数据的转换在计算机内部,问荻际且远制的形式存 储,但是,当我们在作I/O操作时,往往需要其它形式 的数据袷剑ASCII码、BCD码、八制数等,这就 需要做一些数据袷降幕セ徊僮鳌 1、ASCII码到二进制数的相互转换 二进制与ASCII码的相互关系为: 数字0~9对应的ASCII码为30H~39H,即加30H 字母A~F对应的ASCII码为41H~46H,即加37H (1)ASCII到二进制的转换 通过以上介绍的二者之间的关系,不难画出流程图:170 例4-4-3 开始 取操作数转换前 R2为ASCII码,转换后 ASCTOHEX: MOV CLR SUBB MOV CJNE NEXT: JC SUBB TOK: MOV RETR2为二进制清进位标志 减30H 差&9? N 转换正确 Y 减07H 转换正确A,R2 C A,#30H R2,A A,#0AH,NEXT TOK A,#07H R2,A结束171 (2)二进制到ASCII码当二制数&0AH时,加30H即得相应的ASCII,当二制数介于0AH、 0FH之间(包0AH、0FH),则加37H即得到相应的ASCII。下例 为另一算法。例4-4-4 转换前 R2为二制, 转换后 R2为ASCII码 HEXTOASCII: MOV ANL ADD DA ADDC DA MOV RET A,R2 A,#0FH A,#90H A ;若R2&9,则加66H,且产生Cy A,#40H A R2,A172 2、BCD码与二制的相互转换(1)BCD到二进制的转换例4-4-5 如下图所示+6*102+1*10+5 =[(3*10+6)*10+1]*10+540H 41H42H 5H 1H 6H40H 41H15H 36HR2 R31FH 0EH 二进制数43H压缩BCD码3H非压缩BCD码由压缩BCD码到非压缩BCD码的转换较为简单, 173 在前面我们已经涉及,在此不再重复。 高位BCD码的地址-&(R0) +6*102+1*10+5 =[(3*10+6)*10+1]*10+5R3R2计数初值 3-&(R7)初值送结果单元 0-&(R3) ((R0))-&(R2)(R3R2)*10-&(R3R2)40H41H42H 43H5H 1H 6H 3HR0(R0)-1-&(R0) (R3R2)+((R0))+(Cy)-&(R3R2) (R7)-1=0? Y 结束 N174 BCDHEX:ML10:MOV MOV MOV MOV MOV MOV MOV MUL MOV MOV XCH MOV MUL ADD MOVR7,#03H R0,#43H R3,#00H A,@R0 R2,A A,R2 B,#0AH AB R2,A A,B A,R3 B,#0AH AB A,R3 R3,A;计数初值 ;指向高位 ;结果单元清零;转换初值送R2;R2乘10 ;暂存R2*10低位 ;暂存R2*10高位 ;R3*10 ;R3*10低位加 ;为什么不处理B175 JAFA:DEC MOV ADD MOV MOV ADDC MOV DJNZ RETR0 ;指向下一位 A,@R0 A,R2 ;结果与低单元相加 R2,A A,R3 A,#00H;加低位位位 R3,A ;保存结果 R7,ML10由于二位压缩BCD码的表示范围为0~9999, 其对应二制为0~270H,不会超过两个字节,因 而不必考虑R3*10的高位。176 (2) 二进制到BCD的转换例4-4-6 如下图所示 40H 41H 5H4H8H 3H 1HR2 R315H 36H 二进制数42H 43H44H非压缩BCD码如上图所示,双字节二进制数的表示范围为 0~65535,因而需要5个BCD码位来表示。从二进制到 BCD码,我们采用连减的办法,其原理如下: 待转换的二进制数-104 够减,万位加1,再减177不够减,恢复余数,再减103 以此类推,直到得到个位为止。 104=2710H103=03E8H102=0064H10 =0AHBBCD:MOV R0,#44H ;数据指针 MOV R7,#04H ;计数初值 MOV DPTR,#PWTAB MOV R6,#00H ;偏移量 BBC1: MOV A,R6 MOVC A,@A+DPTR MOV R4,A ;查幂值表低位 INC R6 MOV A,R6 MOVC A,@A+DPTR MOV R5,A ;查幂值高位 INC R6 MOV @R0,#00H178 BBC2: CLR C MOV A,R2 SUBB A,R4 MOV R2,A MOV A,R3 SUBB A,R5 MOV R3,A JC BBC3 INC @R0 SJMP BBC2 BBC3: MOV A,R2 ADD A,R4 MOV R2,A MOV A,R3 ADDC A,R5 MOV R3,A;减低位;减高位;不够减则恢复余数 ;够减则结果单元加1;恢复余数低位;恢复余数高位179 DEC DJNZ MOV MOV RET PWTAB:DB DB DB DBR0 ;指向下一单元 R7,BBC1 ;未减完则继续 A,R2 @R0,A ;保存个位 10H,27H 0E8H,03H 64H,00H 0AH,00H ;1 ;100 ;10180 §4-5 查表程序查表程序中一种常用的非数值运算程序,应 用非常广泛。使用查表程序可以完成数据的 补偿、计算、转换等各种功能,具有程序简 单、执行速度快、精度高等优点,而这正是 单片机在测控场合或智能化仪表中所需要的。181 一、以DPTR为基地址的查表程序MOVC A,@A+DPTR 1、其操作步骤如下: ? 初始化DPTR: 将表格的首地址放入DPTR 中,作为基地址。 ? 初始化ACC: A中应该放所要查询的数据在 表格中的顺序号。 ? 执行结果: 在执行该指令后,A中存放的是 182 在表格中查到的数据。 注意事项???在查询表格时,若所要查询的数据是双字 节的,则在初始化A中的数应为顺序号的2 倍,且应执行两次本指令。 对于单字节表格而言,表项的个数应不大 于256个,若大于256时,则应适当修改 DPTR的值。 表格的存放位置。183 二、以PC为基地址的查表指令?MOVC A,@A+PC表格存放地址=PC+偏移量+X(表项)184 1、操作步骤(1) 将待查表的项数送给ACC。 ? (2) 叠加偏移量,表头和当前PC的地址偏移量 加到表项上。 ? (3) 执行结果。?185 2、注意事项(1) 对于双字节表格,其处理方法与以DPTR 为基地址的情况相同。 ? (2) 对于单字节表格而言,其项数应不大于 256。 ? (3) 对于双字节表格而言,其项数应不大于 128。?186 三、两种方式的比较1、PC仅能对所谓本地表格操作,即表格项数 不得大于256,且偏移量可能随程序的变化 而变化,计算较为麻烦,其优点是少用寄存 器。 2、DPTR使用起来非常灵活,表项数不受限制, 且表格可以放在64K的任意地方。187 例4-5-1设有一个巡回检测报警系统需对16路输入值 进行比较,当每一路输入值超过该路的报警 值时实现报警。 ? 函数Y的内存地址=函数表首地址+(X*2) ? 查表前,路数Xi在R2中,查表后的值存放在 (R4R3)中。188 查表程序清单?? ? ? ? ? ? ? ? ? ? ?TB1:TAB1:?MOV A, R2 ADD A, R2 ;路数Xi*2?A MOV R3, A ;保存 ADD A, #data=?? MOVC A, @A+PC ;1 XCH A, R3 ;1 ADD A, #data+1 ;2 ;data=? MOVC A,@A+PC ;1 MOV R4,A ;1 RET ;1 DW 05F0H,0E89H,0A695H,1EAAH DW 0D9BH,7F93H,H DW FH,1A66H,22E3H DW 1174H,16EFH,33E4H,6CA0H189 例4-5-2在一个温度测量装置中,测出的电压与温度 为非线性关系。设测得的电压为X,用10位二 制数表示。现要求采用查表法实现线性化 处理。V 非线形V1=KT1V1190T1T 分 析10位二进制位的表示范围为0~1023,因而有 1024个电压值,从而可以建立一个表格,其 项数为1024个。 ? 存放温度值Y的单元地址=表首地址+(X*2) ? 设测得的电压值已存放在20H,21H中, (20H为高字节),查表后的温度值存放在22H, 23H中,(22H为高字节)。?191 例4-5-2 程序清单? ? ? ? ? ? ?LTB2:?? ? ? ? ? ?MOV DPTR,#TAB2 MOV A,21H; (20H21H)*2 CLR C RLC A MOV 21H,A MOV A,20H;表首+ (20H21H)*2 RLC A ;为什么不清C MOV 20H,A MOV A,21H ADD A,DPL MOV DPL,A MOV A,20H ADDC A,DPH;为什么带进位加 MOV DPH,A测得的电压值 存放(20H21H) 中(20H为高字 节),查表后的 温度值存放在 (22H23H)中 (22H为高字节)192 例4-5-2 程序清单(续)CLR A ;查表 为什么清A?? ? MOVC A,@A+DPTR ? MOV 22H,A ? INC DPTR ? CLR A ? MOVC A,@A+DPTR ? MOV 23H,A ? RET ? TAB2: DW ………….. ;温度表值 193 ? DW …………..? §4-6 散转程序设计在程序设计中,不外有三种情 况:顺序、循环和条件分支程 序。其中顺序程序设计最为简 单,而循环程序设计在前面已 经学习过。分支程序(如下图 所示)又可分为两大类:字节 条件和位条件,即CJNE和JC、 JB、JZ类指令。位条件转移 指令很容易实现简单条件转移, 当要实现多分支转移时,可以 通过CJNE来实现,这就是所 谓散转程序设计,但实现起来 则较为麻烦。Y (A)=0? N Y (A)=1? N Y(A)=2?N194 例4-6-1(A)=0? N (A)=1? N (A)=2? Y Y Y操作2 操作0操作1测试P1口输入的 100个数中0~9各 数的概率分布程序N终点195 例4-6-1 程序清单(教材P45) MOV 40H,#100 CHK3: CJNE READ:MOV A,P1 INC CHK0: CJNE A,#0,CHK1 DJNZ INC 30H SJMP DJNZ 40H,READ CHK4: CJNE SJMP EEND INC CHK1: CJNE A,#1,CHK2 DJNZ INC 31H SJMP DJNZ 40H,READ CHK5: CJNE SJMP EEND INC CHK2: CJNE A,#2,CHK3 DJNZ INC 32H SJMP DJNZ 40H,READ SJMP EENDA,#3,CHK4 33H 40H,READ EEND A,#4,CHK5 34H 40H,READ EEND A,#5,CHK6 35H 40H,READ EEND196 CHK6: CJNE INC DJNZ SJMP CHK7: CJNE INC DJNZ SJMP CHK8: CJNE INC DJNZ SJMPA,#6,CHK7 36H 40H,READ EEND A,#7,CHK8 37H 40H,READ EEND A,#8,CHK9 38H 40H,READ EENDCHK9: INC 39H DJNZ 40H,READ EEND: SJMP $利用条件转移类 指令来实现分支,程 序较为简单,容易实 现,但应特别注意的 是:在分析问题时, 一定要逻辑严密,充 分判断出各种可能出 现的条件标志。197 二、利用转移指令来实现的程序散转? ? ? ? ? ?JMP @A+DPTR 其执行过程可以分为三步: (1)将转移表首地址送入DPTR作为基地址。 (2) 将条件标志单元内容装入A中作为变址,在装 入前,还应根据转移表项内容作相应变化。 (3)实现转移。 我们可以根据转移表的不同来分为三种散转程序:198 1、采用转移指令表的散转程序设计这类散转程序的核心部分――转移表部分由 无条件转移指令AJMP或LJMP构成。其转移范围分别为64K或2KBytes。199 例4-6-2 要求根据R7的内容转向各个 操作程序。? ??? ?即(R7)=0,转向OPR0 即(R7)=1,转向OPR1 即(R7)=2,转向OPR2 …………………………… 即(R7)=n,转向OPRn200 例4-6-2程序清单? ? ??? ??? ? ?JUMP1: MOV DPTR,#JPTAB1 MOV A,R7 ADD A,R7 ;(R7)*2?(A) JNC NOAD ;判断是否有进位, INC DPH ;有加到高字节地址 NOAD: JMP @A+DPTR JPTAB1:AJMP OPR0 AJMP OPR1 …………….. AJMP OPRn 201 例4-6-2 注意事项(1)在本例中,由于AJMP指令的指令长度为2个字 节,因而在散转时采用自加的方法使变址实现乘2; 若改用LJMP指令,由于其指令长度为3字节,因而 应使变址乘3来修下正。当修正产生进位时,要将 进位加到DPH中。 (2) 由于R7是单字节,因而散转点不能大于256个。 为了克服此局限性,我们考虑:通过修改DPTR的 办法来增加散转点,使这最大散转点N可达到 N&=(最大存储容量―散转表首地址)/3。202 例4-6-3 要求根据R6R7中的数据转向 对应的操作程序(P65)JUMP2: MOV MOV MOV MUL ADD MOV DPTR,#JPTAB2 A,R6 B,#03H ;(R6)*3?(BA) AB A,DPH DPH,A203 例4-6-3续??? ? ? ? ? ? ? ?MOV A,R7 MOV B,#03H MUL AB XCH A,B ADD A,DPH MOV DPH,A XCH A,B JMP @A+DPTR JPTAB2:LJMP OPR0 LJMP OPR1 …………….. LJMP OPRn204 2、采用转向地址偏移量表散转程序本方法的关键在于建立一个转向地址偏移量 表,需要程序员认真计算,否则会产生错误。205 4-6-4 要求按R7的内容转向5个操作程序。 JUMP3: MOV A,R7 MOV DPTR,#TAB3 MOVC A,@A+DPTR JMP @A+DPTR TAB3: DB OPR0-TAB3 DB OPR1-TAB3 ……………………. DB OPR4-TAB3 OPR0: OPR1: OPR2: …… 本例的散转范围小于256,同上例一样,本例也可通过 变通的方法,使这能在64K范围内实现散转。206 3、采用转向地址表的散转程序(P66)本方法的关键在于将散转点的地址直接建立 表格,然后利用查表程序,从而实现散转。例4-6-5 要求根据R7的内容转向相应的操作程 序中去,设各操作程序有入口地址分别为 OPR0,OPR1,….OPRn207 例4-6-5程序? ? ??? ? ? ? ? ??? ??MOV DPTR,#TAB4 ;指向地址表 MOV A,R7 ADD A,R7 ;R7*2 JNC NADD INC DPH ;加进位 NADD:MOV R3,A MOVC A,@A+DPTR ;查高位地址 XCH A,R3 INC A MOVC A,@A+DPTR ;查低位地址 MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR ;实现散转208 例4-6-5程序(续)TAB4: DW OPR0 DW OPR1 DW OPR2 ……………. DW OPR低位字节在高地址本例也能通过修改DPTR的方法来使散转点大 于256个。209 三、采用“RET”指令的散转程 序本方法的关键在于将操作程序的目的地址压 入椎栈,然后通过“RET”指令来将目的地 址弹入到PC中,从而实现程序转移。即利用 RET指令来代替两个POP指令。 例4-6-6 要求根据R7的内容转向各处操作程序,设各 操作程序的转向地址分别为 210 OPR0,OPR1,…..OPRn 例4-6-6程序JUMP5: MOV MOV ADD JNC INC MOV MOVC XCH INC MOVC PUSH PUSH RET DPTR,#TAB5 A,R7 A,R7 ;R7*2 NADD DPH R3,A A,@A+DPTR ;查高位地址 A,R3 A A,@A+DPTR ACC ;低位地址 03H ;PUSH R3高位地址NADD:?? ? ? ? ? ? ? ?TAB5:??DW OPR0 ;转地址表 DW OPR1 ……………. DW OPRn211 小结以上方法可灵活使用,需对地址差值进行计 算的方法,其差值会因程序的变化而变化, 使用时要小心从事。对于椎栈操作不太熟悉 的同学,在使用“RET”实现散转时,更要 小心谨慎。212 §4-7 I/O端口控制程序通过前面的学习,我们知道单片机有32个I/O 口可供编程者使用。由于结构上的原因,I/O 口作为输出时,由于端口具有锁存功能,不 需外接锁存器;但是,当把它作为输入口时, 虽然具有输入缓冲器,但不具有输入锁存器, 因此在CPU完成读引脚前,输入的数据必须 一直保持在引脚上。为此,我们需要借助一 些特定的接口电路来实现输入功能。213 一、BCD拨码盘与单片机的接口如右图所示,A为公共 端,当A接VCC时,拨 码盘输出正逻辑,当A 接GND时,拨码盘输 出负逻辑。其输出范围 为,因而称 之为BCD拨码盘。类 似于电度表的计量数字。214 BCD拨码盘与单片机的接口BCD拨码盘与单 片机的接口电路 如右图所示:通 过读取P1口的低 四位即可获得 BCD拨码盘的状 态信息。215 二、多片BCD拨盘与单片机的接口??如图所示:通过对P1口 的高四位进行扫描,使 P1.4~P1.7依次为“0”, 然后查询P1口低四位的 状态,从而得到拨盘的 状态信息。 由于拨盘在控制端为 “0”时选中该位,因 此拨盘的输出为反码, 经与非门后,读出的状 态信息为正码。216 三、拨码输入程序??? ? ??? ? ? ? ? ??? ?将4位BCD码按千,百,十,个位依次读入,然后存放在 30H_33H中。 RDS: MOV R0,#30H MOV R2,#7FH MOV R3,#04H LOOP: MOV A,R2 MOV P1,A MOV A,P1 ANL A,#0FH MOV @R0,A INC R1 MOV A,R2 RR A MOV R2,A DJNZ R3,LOOP RET217 §4-8 子程序调用时的参数传递??在进行程序设计时,为保证程序的高效、可靠的运 行,增加程序的可读性、可懂性,我们提倡结构化 编程,而结构化编程的重要一点就是子程序的编制。 在进行程序设计时,有些程序段是被多次使用 到,但每次使用时,需要对某个寄存器的内容稍作 修改。为了避免多次多次重复编写同样的程序,节 省存储空间,我们就可以把这样的程序段独立出来, 形成一个独立的子程序,每次要使用前,先对需要 修改的寄存器进行修改后,用ACALL或LCALL调 用,这里修改的寄存器我们称之为入口参数,子程 序执行的结果,我们称之为出口参数,参数修改方 式则称之为参数传递。218 一、通过寄存器传递参数?这种方法应用最为广泛、 也最易使用,它是在调用 子程序之前,对需要修改 的寄存器预先修改后,再 来调用子程序。219 例4-8-1 试编程对30H~3AH单元清零? ? ??? ??? ? ?MAIN: ………..………… MOV R0,#30H MOV R7,#0AH LCALL SUBRT …………………. SUBRT: MOV A,#00H RESU: MOV @R0,A INC R0 DJNZ R7,RESU RET220 二、通过椎栈传递参数例4-8-2 试编程对30H~3AH单元清零MAIN: …………….. MOV 70H,#30H MOV 71H,#0AH PUSH 70H PUSH 71H LCALL SUBRT ……………………… SUBRT:POP DPH POP DPL POP 07H POP 00H SUB1: MOV A,#00H LOOP: MOV @R0,A INC R0 DJNZ R7,LOOP PUSH DPL PUSH DPH RET 对于简单程序而言, 这种方法反而较笨,较 易引起混淆。221 三、利用数据指针传递参数在这种方法中,待传递的参数不是放在调用 指令之前,而是紧跟在调用指令之后,此法 对参数量大的情况特加有用。 ? 例4-8-3 将表格中的数据送打印机打印?222 ?? ? ? ? ? ? ? ? ? ??? ? ?MAIN: …………….. ACALL PRINT DB ‘THIS IS AN EXAMPLE DB 0AH,0DH,00H NEXT: ………………… PRINT:POP DPH POP DPL PPP1: MOV A,#00H MOVC A,@A+DPTR ;查表 INC DPTR JZ PPEND ;判断是否结束 PPP2: …………….. ;打印子程序 …………….. SJMP PPP1 ;未完则继续 PPEND:JMP @A+DPTR;转向主程序NEXT处,取代返回 指 ;令 223 本章作业:1,2,4,8224 第 章Single Chip Microcomputer 本章内容定 时 计 数 器 及 其 应 用§5-1 定时/计数器工作原理及结构 §5-2 定时/计数器方式和控制寄存器 §5-3 定时/计数器的工作方式 §5-4 定时/计数器的应用举例225 第五章 MCS-51单片机内部定时/计 数器及其应用51系列单片机内部提供2个定时/ 计数器T0和T1,即可用作定时器, 也可用作计数器,还可作为串行口 的波特率发生器,定时/计数器同软、 硬件结合使用,可给应用系统的设 计带来很多方便之处。226 §5-1定时/计数器的工作原理及结构一、计数器的工作条件1、 控制信号有效“1” 2、 有计数信号源二、脉冲输入 方式1、定时: C/T=0,计数脉 冲fosc/122、 计数: C/T=1, 计数脉冲从Ti 端输入TRi227 三、定时/计数器工作原理1、定时方式:C/T=0,当控制信号为“1”时,每一 个机器周期,加1计数器做一次加1操作,直至加到 全“1”,再过一个机器周期,计数恢复为全“0”, 且TFi=1。 2、计数方式:C/T=1,当控制信号为“1”时,外部 计数脉冲加在T0(P3.4)或T1(P3.5)引脚上,在该引 脚上每产生一个下降沿,加1计数器做一次加1操作, 直至加到全“1”,再产生一个下降沿,计数恢复 为全“0”,且TFi=1。其计数频率比定时器方式低, 应不大于fosc/24。228 四、定时/计数器是可编程的定时/计数器的工作方式分别有8位、13位和 16位三种长度,它在后台运行,程序的运行 和定时/计数器的加1操作是并行的。我们可 通过查询TFi的状态来了解它的工作情况。可 通过预设计数器的初值来改变计数长度。229 五、定时/计数器的硬件构成TMOD、TCON分别控制定时/计数器的工 作状态和工作方式。TH0、TL0,TH1、TL1 分别为T0、T1的加1计数器。230 231 §5-2 定时/计数器的方式和控制寄存 器定时/计数器是可编程的,程序员只需对几个 特殊功能寄存器进行简单的操作,既可完成 对定时/计数器的操作。这几个特殊功能寄存 器为TH1、TL1,TH0、TL0,TCON和 TMOD ? TH0、TL0和TH1、TL1分别是定时/计数器 的计数核心,但加1计数器的运行则由TMOD 和TCON来控制。?232 一、定时器方式寄存器TMODTMOD格式如下:TMODD7D6D5 M1D4D3D2D1 M1D0 M088H GATE C/TM0 GATE C/T定时器1定时器01、定时/计数器工作方式选择位233 1、定时/计数器工作方式选择位表5.1 方式选择位意义 M1 M0 0 0 1 1 0 1 0 1 工作方式 方式0 方式1 方式2 方式3234功能说明 13位计数器 16位计数器 自动再装入8位计数器 2、C/T功能选择C/T=0 对内部脉冲计数,计数频率为fosc/12 C/T=1对Ti引脚输入脉冲计数,计数频率不大于 fosc/24。 GATE=0,由TRi来启动和停止定时/计数器 GATE=1,TRi必须同INTi一起来启动和停止定时/计 数器,即TRi=INTi=1时,定时器启动,其中一个为 “0”时,停止计数。 注意:T0和T1的控制是严格独立的 TMOD不能位寻址,使用时必须用字节传送指 令,复位时,TMOD=0 235 二、定时/计数器控制寄存器TCON?TCON格式如下:8FH TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0TCON88H定时控制中断控制TFi:计数器溢出标志,计数器溢出时,由硬件对TFi 置“1” ,并申请中断。进入中断后,由硬件自动 清零,也可由软件清零。 TRi:计数器运行控制位,由软件置“1”或清零来启 动和停止计数器。236 二、定时/计数器控制寄存器TCON?其余位为有关中断的控制,以后再详 讲。注意:T0和T1的控制是严格独立的 ? TCON可位寻址,可分别用位名来进行 寻址,不必记忆位地址。 ? 复位时,TCON=0237 §5-3 定时/计数器的工作方式?通过前面的学习,我们可以知道:通过对C/T 的不同选择,可以选择内、外部脉冲计数方 式。而对M1M0的设置,可以使T0和T1工作 在四种工作方式。238 一、方式013位定时/计数器方式。由TLi(4~0)和THi(7~0) 组成。T=(213-A)*12/fosc 微秒239 方式01、C/T=0 ? 定时时间 T=(213-A)*12/fosc 微秒 ? 式中,A为定时器初值. 2、C/T=1 3、GATE=0 4、GATE=1240 二、方式1? ?方式1为16位定时/计数器方式。由TLi(7~0)和 THi(7~0)组成。其余与方式0相同。 定时时间 T=(216-A)*12/fosc 微秒 式中,A为定时器初值.241 三、方式2方式2为能自动重置计数器初值的工作方式,TLi为8 位计数器,THi为计数器初值暂存器。 ? 定时时间 T=(28-A)*12/fosc 微秒 ? 式中,A为定时器初值.242 四、方式3方式3仅适用于T0。此时,TH0和TL0分别为2个8 位计数器,TL0由T0的控制位来控制,而TH0则由 T1的控制位来控制。而T1则可工作在方式0、1、2 的任一方式,但其启动则由控制方式控制,将T1置 为方式3时则停止计数。243 几种方式的区别:方式0、1、2仅在于位数不同, 方式3则是增加了一个计数器资源而已。244 §5-4 定时/计数器的应用举例?定时/计数器是可编程的,在使用前,必须通 过软件对其初始化。245 一、定时/计数器的初始化步骤1、确定工作方式――对TMOD置初值 2、置定时/计数器初值。即初始化TH0、TL0,TH1、 TL1,在用作计数器时,除定量计数外,一般不设 初值。 ? 计数:A=2n-待计数值 ? 定时: A=2n-定时值*fosc/12 3、如需中断,则开放中断,否则略去。 4、启动定时/计数器;对TRi置“1”。 5、通过中断或TFi来获知定时/计数器的工作状态。 6、停止定时/计数器;不需要再用时,应对TRi清零。246 二、应用举例?例5-4-1 利用T1在P1.1口上输出周期为1ms的方波。 假定fosc=6MHz根据要求可知:定时/计数器应工作在定时器方式,即 C/T=0定时时间应为0.5ms,方式0为13位方式,故 其工作方式可为方式0,因而,TMOD=00H。 ? 定时时间 T =(213-X)*12/(6*106)=500 (微秒) ? X=;F806H0 0 0 1 1 1 1 10 0 0 0 0 1 1 01 1 1 1 1 0 0 0X X X 0 0 1 1 0247 二、应用举例? ? ? ? ? ? ? ??由于TMOD和TCON在复位时均为“00”,故不必 对其重新置数。 BEGIN: MOV TL1,#06H MOV TH1,#0F8H SETB TR1 LOOP: JBC TF1,PTF0 AJMP LOOP PTF0: MOV TH1,#0F8H MOV TL1:#06H CPL P1.1 AJMP LOOP 248 二、方式2应用?例5-4-2 由P3.4(T0)引脚输入低频脉冲信号, 其重复周期大于1ms,要求在P3.4每发生一 次负跳变时,由P1.0输出一个宽为500US的 负同步脉冲,与此同时由P1.1输出一个宽为 1ms的正同步脉冲。249 二、方式2应用? ???将T0工作在计数方式,初值设为0FFH,则每在 P3.4上产生一个脉冲,T0溢出,然后将T0改为 500US的定时方式。 设晶振频率为6MHz,则500US定时器的初值X为: (28-X)*2*10-6=500*10-6 由此可得:X=06H 考虑到程序中标有“*”号指令执行的时间, 将初值修正为0AH。250 例5-4-2? ?程序BEGIN:?? ? ? ? ? ? ? ?MOV MOV MOV CLR SETBDEL1: RESP1:?? ? ?AJMP CLR MOV MOV MOV SETB CLR SETB AJMPDEL2:?TMOD,#06H TH0,#0FFH TL0,#0FFH P1.1 TR0 JBC TF0,RESP1 DEL1 TR0 TMOD,#02H TH0,#0AH TL0,#0AH P1.1 P1.0 TR0 ;* JBC TF0,RESP2 DEL2;检测外部信号跳变;*检测第一次500US251 例5-4-2RESP2: DEL3: AJMP RESP3: CLR TR0 AJMP程序SETB P1.0 JBC TF0,RESP3 ;检测第二次500US DEL3 CLR P1.1BEGIN252 三、门控位的应用GATE=1时,可测量INTi引脚上的脉冲的宽 度。 ? 例5-4-3 利用T0门控位测试INT0引脚上出现 的正脉冲的宽度,并以机器周期的形式显示 在显示器上?253 BEGIN:WAIT1: WAIT2: WAIT3:MOV TMOD,#09H MOV TL0,#00H MOV TH0,#00H JB P3.2,WAIT1 ;等待变低 SETB TR0 JNB P3.2,WAIT2 ;等待变高 JB P3.2,WAIT3 ;等待变低 CLR TR0 MOV R0,#DISBUF MOV A,TL0 XCHDA,@R0 INC R0 SWAP A XCHDA,@R0 INC R0 MOV A,TH0254 DIS:XCHDA,@R0 INC R0 SWAP A XCHDA,@R0 LCALL DISUP AJMP DIS ………………..本章作业:1,2,3,4,8255 第章 单 片 机 的 系 统 扩 展Single Chip Microcomputer 本章内容概述 §6-1 单片机最小应用系统 6.2 单片机的外部扩展性能 §6-3 程序存储器的扩展 §6-4 数据存储器的扩展§6-5 I/O口的扩展256 概述??51系列单片机在一个芯片上集成了许多硬件资源, 它们能够完成复杂的软件工作和较为简单的硬件操 作,在一定程度上相当于一台单板机的功能。但在 完成一些复杂的控制时,就比不上单板机的功能强 大了。 在做一些智能仪器、仪表,小型检测和控制时,往 往利用单片机的最小系统就能满足要求。但在大多 数情况下,在构造一个工业控制系统时,最小系统 一般不能满足系统的需求,这时,就必须在单片机 外部扩展相应的芯片,以满足系统的要求,这就是 系统扩展。 单片机的系统扩展包括ROM扩展、RAM扩展、I/O 扩展、定时/计数器扩展、中断扩展及其它特殊功能 257 的扩展。 问题的提出在单片机应用 系统的设计中, 往往出现RAM, ROM或者I/O口 不够的情况, 怎么办?ROM的扩展 RAM的扩展 并行I/O口的扩展258 §6-1 MCS-51单片机最小应用系统原则上,一个单片机应用系统除必 须具有单片机外,只要有振荡电路、复 位电路和ROM就能工作了,当然,它 们都不能没有电源提供。这就是单片机 的最小应用系统。一、C51/89C2051 最小应 用系统259 特?点晶振4个并口??1、有大量I/O线,在不 需外部ROM的系统中, EA端应接VCC。 2、内部RAM和ROM大 小有限,但在数据量小 的小系统中基本够用。 3、应用系统开发具有 特殊性。程序量较小, 外部电路简单。我们推 复位 电路 荐使用89C51或 89C2051。?260 二、8031最小应用系统由于8031内部 无ROM,因此, 由8031组成的 最小应用系统 必须在片外扩 展ROM 与8051构成的 最小系统相比, 除均需要振荡 电路和复位电 路外,其EA端 必须接地。261 6.2 单 片 机 的 外 部 扩 展 性 能数据线由P0口提供,其宽度 为8位,它为三态双向口,是 使用最为频繁的通道。单片 机与外部交换的数据、指令 等大都经P0口传送宽度为16位,其高8位地址总 线由P2口提供,低8位地址总 线由P0口经地址锁存器锁存后 提供。用作地址总线后的P2口 不能再用作I/O口使用控制总线: /EA /PSEN /RD /WR ALE262 二、MCS-51单片机的系统扩展能力1、地址范围 0000H~0FFFFH,共64KBytes。 2、空间重叠外部RAM和外部ROM地址空间重叠,但因其 选通信号、访问指令不同,因而不会造成访 问混乱。 3、扩展I/O与外部RAM统一编址 单片机不再另外提供信号作扩展I/O用, 而是同外部RAM统一编址,因而会占用部分 263 RAM地址空间。 §6-3 程序存储器的扩展在51系列单片机中,ROM的寻址范 围为64KBytes,在片内无ROM或 ROM空间不够的情况下,我们需要 在片外扩展ROM,以满足系统和需 求。264 §6-3 程序存储器的扩展我们还是本着三总线的扩展方法来座其扩展方法:片选则由 P2口剩余 部分经译码 后提供。 高8位地 址由P2口 直接提供。1、地址总线 2、数据总线 3、控制总线低8位地址则 由P0口经地 址锁存器后 提供数据总线 直接由P0 口提供265 4、外部ROM访问时序266 二、外部EPROM扩展电路1、使用单片的EPROM扩展电路267 EPROM扩展实例 ----在8031单片机上扩展4KB EPROMP2.3 A11 P2.0 P0.7 D7 Q7``` `````` ```A8 A712根地址线373D0 G Q08031P0.0A02732O7 . . . O0ALE8根数据线PSENOE CE控制线268 2、使用多片的EPROM扩展电路15 14 13 12 11 10 9 1 1 0 1 0 1 0 1 1 * * * * * * * * * * * *8 * * *7 * * *6 * * *5 * * *4 * * *3 * * *2 * * *1 * * *0 * * *地址C000H DFFFH A000H BFFFH 6000H~ 7FFFH269 P2.515 14 13 12 11 10 9 0 0 0 0 0 1 * * * * * * * *8 * *7 * *6 * *5 * *4 * *3 * *2 * *1 * *0 * *地址0000H 1FFFH 2000H 3FFFH 270 4000H~ 5FFFH010************* 注 意利用线选法时,电路简单,但地址线 利用率较低,造成地址空间浪费。 ? 利用地址译码法时,地址空间完全利 用,但电路比较复杂。?271 在集成电路技术比较发达的今天,这种方法已 不多用,可用1至2片即可达到最大扩展容量。如:272 §6-4 数据存储器的扩展?51单片机的片内RAM为128Bytes或 256Bytes,一般情况下都能满足应用系统的 需求,但当数据量较大时,就需要在片外扩 展RAM,其最大容量可达64KBytes。由于 片外扩展I/O与外部RAM采用统一编址,因而 外部RAM的实际容量有时不能达到 64KBytes。273 一、数据存储器扩展的方法数据存储器的扩展方法与程序 存储器的扩展方法基本相同。 我们还是本着三总线的扩展方 法来解RAM的扩展方法:274 数据存储器扩展片选则由P2口 剩余部分经译 码后提供 1.低8位地址则由P0口经地 址锁存器后提供,其余部 分地址由P2口直接提供。2.数据总 线直接由 P0口提供。3.控制总线的连接275 二、外部RAM访问方法1、低8位地址总线寻址的外部RAM区 MOVX A,@Ri MOVX @Ri,A 2、16位地址总线寻址的外部RAM区 MOVX A,@DPTR MOVX @DPTR,A277 三、常用数据存储器的扩展电路1、常用静态RAM的引脚图2、扩展单片6116数据存储器举例2、扩展单片6264数据存储器举例278 2、EEPROM的扩展电路(P EEPROM具有程序存储器和数 据存储器的特点。既可在线修 改数据,还能保证掉电后数据 不丢失。因而既可用作数据存 储器,也可用作程序存储器。282 EEPROM的扩展电路283 284 §6-5 I/O口的扩展51系列单片机有32个I/O口,且大多数情晗 不能完全提供给用户,因此在需要大量I/O口 时,我们必须对其行扩展。 ? 从功能上看,单片机的I/O口有两种类型:基 本I/O和可编程I/O。基本I/O结构简单但功能单 一,仅适用于简单的数据输入和输出;可编 程I/O功能丰富但成本较高,使用较灵活。?285 一、简单I/O口的扩展?? ?I/O口的扩展原则为“输入三态、输出锁存”,因此 利用TTL或MOS电路可进行简单I/O口的扩展。 如:用8位三态缓冲器74LS244可扩展输入口; 用8D锁存器74LS273、74LS373、74LS377 等可组成输出口。 利用片选信号对外部I/O进行编址,对其访问就象访 问外部RAM一样。使用MOVX指令。 /RD及/WR信号参加片选。286 1、单个I/O口的}

我要回帖

更多关于 计数器使用特点是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信