MOVX和MOVC的异同点单片机原理及应用试卷

问题补充&&
MOVX和MOVC的异同点
本页链接:
•3回答
•9回答
•2回答
•8回答
•10回答
•10回答
•5回答
•3回答
•2回答
•9回答
•7回答
大家都在关注
•7回答
•10回答
•7回答
•6回答
•10回答
•9回答
•1回答
•5回答
•6回答
•1回答
•5回答
•2回答
•5回答
•2回答
•5回答
•2回答
猜你感兴趣
服务声明: 信息来源于互联网,不保证内容的可靠性、真实性及准确性,仅供参考,版权归原作者所有!Copyright &赞助商链接
当前位置: >>
单片机原理及应用
单片机原理及应用常州轻工职业技术学院 前言当今,单片微型计算机技术迅速发展,由单片机技术开发的智能化测 控设备和产品广泛应用到各个领域,单片机技术产品和设备促进了生产技 术水平的提高。企业迫切需要大量熟练掌握单片机技术,并能开发、应用 和维护管理这些智能化产品的高级工程技术人材。 单片机以体积小、功能强、可靠性好、性能价格比高等特点,已成为 实现工业生产技术进步和开发机电一体化和智能化测控产品的重要手段。 本教材内容分为十章。以 MCS-51 系列单片机为介绍对象,分别介绍 MCS-51 系列单片机结构原理、MCS-51 单片机指令系统、汇编语言程序设计、并行 I/O 口的使用、并行 I/O 口的扩展方法及使用、中断系统 和定时/计数器、A/D 转换接口和 D/A 转换接口技术、键盘与显示器接 口技术等内容。 本教材由杨文新、龚益民、韩迎辉老师编写,谢丽华、刘军良老 师参与本书图表的绘制。编者 2004 年 7 月1 目录第一章 认识单片机 ?????????????????3 第二章 MCS-51 单片机指令系统????????????14 第三章 汇编语言程序设计 ??????????????27 第四章 并行 I/O 口 ????????????????33 ????????????? 40第五章 并行 I/O 口的扩展第六章 中断系统 ??????????????????49 第七章 第八章 第九章 第十章 附录一 附录二 附录三 定时/计数器 A/D 转换接口 D/A 转换接口 ??????????????? 55 ?????????????? 60 ???????????????63 ?????????????67键盘与显示器接口WAVE 软件的操作使用 ASCII 码表 MCS-51 单片机指令系统表附录四 单片机练习题 附录五 单片机实验指导书2 第一章 认识单片机一、什么是单片机 单片机是将CPU、 存储器、 输入/输出接口、 定时/计数器等集成在一块芯片上, 是目前销量最大、 应用面最广、价格最便宜的微型计算机。如图1-1所示:取指令程序 存储器 CPU定时/计数器I/O 口外设图 1-1 单片机结构框图例1-1单片机彩灯控制系统(单片机控制8个发光二极管每隔0.1秒轮流点亮。) 使用单片机实验板进行演示。二、典型单片机产品 1.MCS-51系列 美国Intel公司生产的8位字长单片机。基本型产品有、8751等。 2.AT89C51系列 美国ATMEL公司生产的8位字长单片机。与MCS-51系列单片机兼容,内含4KB的flash存储器。 三、MCS-51单片机的内部的硬件结构及引脚 (一) MCS-51单片机内部的总体硬件结构 8051单片机的内部基本结构,如图1-2所示。 (二) MCS-51单片机的引脚 8051单片机是HMOS工艺制造,外形为40条引脚,如图1-3所示。因为受芯片引脚数量的限制, 有很多引脚具有双功能。 1、主电源引脚 VCC:芯片工作电源端,接+5V。 Vss:电源接地端。 2、时钟振荡电路引脚 XTAL1:内部晶体振荡电路的反相器输入端。接法如图1-5。 XTAL2:内部晶体振荡电路的反相器输出端。接法如图1-5。 3、控制信号引脚 RST ――――RST为复位信号输入端。外部接复位电路。接法如图1-4。 ALE――――ALE为地址锁存允许信号。 在不访问外部存储器时,ALE以时钟振荡频率的1/6 的固定频率输出,用示波器观察ALE引脚上的脉冲信号是判断单片机芯片是否正常工作的一种简便1 方法。 到外部ROM取指令时,PSEN 自动向外 PSEN ―――― 外部程序存储器ROM的读选通信号。 发送负脉冲信号。 EA ――――为访问程序存储器的控制信号。外部时钟源外部计数脉冲振荡器和时 钟电路程序存储器 4KB ROM数据存储器 256B RAM/SFR两个 16 位 定时器/计数器8051 CPU 64K 字节 总线扩展控制 中断系统 并行 I/O 端口 全双工 串行口外中断控制 图1-2外部设备串行通讯8051单片机的内部基本结构4、并行I/O端口引脚 P0口(P0.0 ~ P0.7);P1口(P1.0 ~ P1.7);P2口(P2.0 ~ P2.7);P3口(P3.0 ~ P3.7)。(a)引脚图 图1-3 MCS-51引脚图(b)逻辑符号2 (三)复位电路与时钟电路1.复位电路 (1)复位电路单片机的RST引脚是复位信号输入端,RST引脚上保持两个机器周期(24个时钟周期)以上的 高电平时,可使单片机内部可靠复位。 单片机常用的外部复位电路如图1-4。(a)上电复位电路 图1-4(b)上电复位兼手动复位电路 MCS-51的复位电路(2)复位状态 复位后,单片机内部的各寄存器的内容将被初始化,包括程序计数器PC和特殊功能寄存器,其 中(PC)=0000H,特殊功能寄存器的状态见表1-1。复位不影响片内RAM和片外RAM中的内容。 表1-1 复位后特殊功能寄存器的初始状态SFR名称 ACC B PSW SP DPL DPH P0 ~ P3 IP IE 初始状态 00H 00H 00H 07H 00H 00H FFH ХХХ00000B 0ХХ00000B SFR名称 TMOD TCON TH0 TL0 TH1 TL1 SBUF SCON PCON 初始状态 00H 00H 00H 00H 00H 00H 不确定 00H 0ХХХХХХХB2.时钟电路时钟电路用于产生时钟信号,时钟信号是单片机内部各种微操作的时间基准,在此基础上,控 制器按照指令的功能产生一系列在时间上有一定次序的信号,控制相关的逻辑电路工作,实现指令 的功能。 电容容量范围为30PF± 10PF,石英晶体频率的范围为1.2~12MHZ,常用6MHZ或12MHz。3 图1-5 8051的外接石英晶体的时钟电路3.时序单位OSC 时钟 ALE图1-6 时序图(1)时钟周期(是时钟信号频率fosc的倒数) 时钟周期 = 1 / fosc (2)机器周期: 机器周期 = 12 × 时钟周期 (3)指令周期 一条指令从被读取到被执行的整个过程所需的时间称为指令周期。 思考题: fosc分别为6MHZ和12MHZ时,机器周期分别为多少? 四、MCS-51单片机的内部硬件的主要功能 (一)中央处理单元CPU 它由运算器和控制器两部分组成。 1.运算器 运算器是进行各种算术运算和逻辑运算的部件。与运算器有关的寄存器包括ACC、B、PSW。 (1)累加器 ACC(8 位寄存器) (2) B 寄存器(8 位) (3)程序状态字寄存器 PSW (8 位) PSW 主要用于存放程序状态信息以及运算结果的标志,所以又称标志寄存器。其格式如下(D1 位没有定义) : D7 D6 D5 D4 D3 D2 D1 D0CY AC F0 RS1 RS0 OV ― PCY―― 进位标志位。4 AC―― 辅助进位标志位。 F0 ―― 用户标志位 RS1、RS0 ――工作寄存器区选择控制位 OV―― 溢出标志位。 P ―― 奇偶标志位。2.控制器 (1)控制器的组成控制器是由程序计数器PC、指令寄存器、译码器、定时与控制电路等组成的。 (2)程序计数器PC PC是一个16位的寄存器,PC中的内容是下一条将要执行的指令代码的起始存放地址。当单 片机复位之后,(PC)=0000H,引导CPU到0000H地址读取指令代码,CPU每读取一个字节的 指令,PC的内容会自动加1,指向下一个地址,使CPU按顺序去读取后面的指令,从而引导CPU 按顺序执行程序。 (二)存储器 1.8051 的存储器分为两大存储空间: 程序存储器(ROM)空间 (1)片内 4KB 的程序存储器,其地址为 0000H~0FFFH (2)片外 64KB 的程序存储器,其地址为 0000H~FFFFH 数据存储器(RAM)空间 (1)片内 256B 的数据存储器,00H~7FH 为通用的数据存储区,80H~FFH 为专用的特殊 功能寄存器区 (2)片外 64KB 的数据存储器,其地址为 0000H~FFFFHFFFFH 60KB 外部 ROM 1000HFFFFH64KB 外部 RAM 0FFFH 4KB 内部 ROM (EA=1) 程序存储器 0FFFH 4KB 外 部 ROM (EA=0) 80H 7FH FFH 特 功 殊 能 寄 器 存0000H0000H00H 内部数据存储器内 部RAM0000H外部数据存储器图 1-7 8051 的存储器结构与 8051 不同的是, 8751 片内包含 4KB 的 EPROM 程序存储器, 8031 内部不包含程序存储器。 而2.程序存储器5 (1)程序存储器主要用于存放程序和表格常数。 (2)程序存储器分为片内、片外两部分,总容量最大为 64KB,地址为 0000H~FFFFH。 (3) EA 引脚的接法 对于
等片内有程序存储器的芯片, EA 引脚应该接高电平;对于 8031 这种片内无 程序存储器的芯片, EA 引脚应该接低电平。3.数据存储器 数据存储器主要用于存放各种数据。以下只对内部数据存储器进行介绍。7FH用户区30H 2FH 位寻址区(位地址 00~7F) 20H 1FH 工作寄存器区 3(R0~R7) 工作寄存器区 2(R0~R7) 工作寄存器区 1(R0~R7) 工作寄存器区 0(R0~R7) 00H 图 1-8 内部数据存储器的结构(1) 低 128B 的内部数据存储器 按其功能不同划分为三个区域。 ①工作寄存器区( 00H~1FH ) 该区均分为四个小区,任何时候,只有一个区的工作寄存器可以工作,称为当前工作寄存 器区。 当前区的选择可通过对寄存器 PSW 中的 RS1、RS0 两个位的设置来进行,见表 1-2。 表 1-2RS1 0 0 1 1当前工作寄存器区的选择RS0 0 1 0 1 当前工作寄存器区 0区 1区 2区 3区思考题:单片机复位时,当前工作寄存器区是哪个?6 ②位寻址区(20H~2FH) 位寻址区有 16 个单元组成,共 128 个位,每个位具有位地址,表 1-3 中表格数据是每个位的位 地址。 每个单元也可作一般的数据缓冲单元使用。 表 1-3 片内 RAM 的位寻址字节地址 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H 7FH 77H 6FH 67H 5FH 57H 4FH 47H 3FH 37H 2FH 27H 1FH 17H 0FH 07H 7EH 76H 6EH 66H 5EH 56H 4EH 46H 3EH 36H 2EH 26H 1EH 16H 0EH 06H 7DH 75H 6DH 65H 5DH 55H 4DH 45H 3DH 35H 2DH 25H 1DH 15H 0DH 05H 7CH 74H 6CH 64H 5CH 54H 4CH 44H 3CH 34H 2CH 24H 1CH 14H 0CH 04H 位地址映象 7BH 73H 6BH 63H 5BH 53H 4BH 43H 3BH 33H 2BH 23H 1BH 13H 0BH 03H 7AH 72H 6AH 62H 5AH 52H 4AH 42H 3AH 32H 2AH 22H 1AH 12H 0AH 02H 79H 71H 69H 61H 59H 51H 49H 41H 39H 31H 29H 21H 19H 11H 09H 01H 78H 70H 68H 60H 58H 50H 48H 40H 38H 30H 28H 20H 18H 10H 08H 00H③用户区 ( 30H~7FH) 为一般数据缓冲区,堆栈区通常也设置在这个区域内。 (2)高 128 字节(特殊功能寄存器区) 8051 内部有 21 个特殊功能寄存器 (简称 SFR) 它们均为 8 位的寄存器, , 离散分布在 80H~FFH 区域,剩下 107 个单元是没有定义的,用户不能使用。见表 1-4。 有 11 个 SFR 的字节地址可被 8 整除(地址以 0 和 8 结尾) ,可以位寻址(表中已给出它们的位 地址) 。7 表1-4SPR 名称 B 寄存器 符号 B D7 F7 F6特殊功能寄存器地址对照表位地址/位定义 F5 F4 F3 F2 F1 D0 F0 字节地址 (F0H)累加器 AACCE7E6E5E4E3E2E1E0(E0H)程序状态字PSWD7 CYD6 AC BE ----B6 P3.6 AE --A6 P2.6D5 F0 BD -----B5 P3.5 AD --A5 P2.5D4 RS1 BC PS B4 P3.4 AC EA A4 P2.4D3 RS0 BB PT1 B3 P3.3 AB ET1 A3 P2.3D2 OV BA PX1 B2 P3.2 AA EX0 A2 P2.2D1 -----B9 PT0 B1 P3.1 A9 ET0 A1 P2.1D0 P B8 PX0 B0 P3.0 A8 EX0 A0 P2.0(D0)中断优先级控制IPBF -----(B8H)I/O 端口 3P3B7 P3.7(B0H)中断允许控制IEAF EA(A8H)I/O 端口 2P2A7 P2.7(A0H)串行数据缓冲 串行控制SBUF SCON 9F SW0 9E SW1 96 P1.6 9D SW2 95 P1.5 9C REN 94 P1.4 9B TB8 93 P1.3 9A RB8 92 P1.2 99 TI 91 P1.1 98 RI 90 P1.0(99H) (98H)I/O 端口 1P197 P1.7(90H)定时/计数器 1(高字节) 定时/计数器 0(高字节) 定时/计数器 1(低字节) 定时/计数器 0(低字节) 定时/计数器方式选择 定时/计数器控制TH1 TH0 TL1 TL0 TWOD TCON GATE 8F TF1 C/T 8E TR1 W1 8D TF0 W0 8C TR0 GATE 8B IE1 C/T 8A IT1 W1 89 IE0 W0 88 IT0(8DH) (8CH) (8BH) (8A) (89H) (88H)电源控制与波特率选择 数据指针高字节 数据指针低字节 堆栈指针 I/O 端口 0PCON DPH DPL SP P0 87 P0.7 86 P0.6 85 P0.5 84 P0.4 83 P0.3 82 P0.2 81 P0.1 80 P0.0(87H) (83H) (82H) (81H) (80H)※ 五、 计算机中的数制与编码 (一)常用数制 数制也就是进位制,计算机中常用的进位制有二进制(B字母结尾)、十进制(D字母结尾,可 省略)、十六进制(H字母结尾)等。其中二进制是计算机内部使用的,十进制、十六进制通常是8 人们书写程序或描述计算机工作过程时使用的。(二)数制间的转换 三种进制的对应关系见表1-5。 表1-5 三种进制数对照表 十六进制(H) 十进制 (D) 二进制(B) 十六进制 (H) 十进制 (D) 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 10 01
9 .A B C D E F 8 9 10 11 12 13 14 15二进制(B) 10 01 1.十进制转换为二进制 整数部分的转换方法称为D除2取余法‖。小数部分的转换方法称为D乘2取整法‖。 2.二进制转换成十进制 将二进制数的各个非零位分别乘以位权之后相加求和。 3.十进制转换成十六进制 整数部分的转换方法称为D除16取余法‖。小数部分的转换方法称D乘16取整法‖。 4.十六进制转换成十进制 将十六进制数的各个非零位分别乘以位权后相加求和。 5.二进制与十六进制之间的转换 二进制数转换成十六进制数的方法是:4位二进制数对应于1位十六进制数(对应关系见表 1-4)。 十六进制数转换为二进制数的方法是:将每1位十六进制数用对应的4位二进制数替换。练习: 1.将194转换成二进制数 2.将120转换成十六进制数 3.将B转换成十进制数 4.将19BH转换成十进制数 5.将二进制数0B转换为十六进制数6.将十六进制数 7B.25H 转换为二进制数(三)常用二进制编码1. 二进制编码的十进制数 十进制数用二进制编码的形式来表示,称为二――十进制编码,即:BCD码(Binary Decimal)。最常用的是8421BCD码。 Code9 表1-5列出了BCD码(8421码)与十进制数的对照表。互换时,可以按4位对应1位的原则,进行 转换。 十进制数 0 1 2 3 4 表1-6 BCD(8421)码与十进制数的对照表 BCD 码 十进制数 BCD 码 10
6 7 8 9 11 课堂练习: (1)将79.32转换成BCD码 (2)将BCD码01转换成十进制 2. 字符编码(ASCll码) 计算机中的各种字符, 包括 0 ~9数字、 大小写英文字母、 标点符号及用于控制的特殊符号等, 也必须用二进制编码表示。在计算机中一般统一使用ASCII码来表示字符。 ASCII码是美国信息交换标准代码的简称。每个字符的ASCII码是由7位二进制数构成,第八位 (最高位)通常定为奇偶校验位。 例如:数字 0~9的ASCII码为30H~39H;大写字母A~Z的ASCII码为41H~5AH。 (四)带符号数的表示 在计算机中是使用数字D0‖和D1‖来表示数的符号的。如,D+‖号用D0‖表示;DC‖号用D1‖表示。 一个数在计算机中有三种表示方法:原码、反码、补码。 下面以8位带符号数为例进行介绍。 1、 原码 最高位(D7位)作符号位,用D0‖或D1‖表示数的正或负,其余位为数值位,用来表示该数的 大小,即绝对值。 例: [+ 112 ] 原码 = B [C 112 ] 原码 = B 原码所能表示的十进制范围是:C 127 ~ +127。 2、反码 正数的反码与原码相同;负数的反码,符号位为1,数值位是将原码的数值位按位取反(即原来 是D0‖的,取为D1‖,原来是D1‖的,取为D0‖)。 例:[+112] 反码 = B [C 112] 反码 =B 反码可表示的十进制范围是:C 127 ~ + 127。 3、补码表示法 正数的补码与原码相同;负数的补码,符号位为D1‖,数值位是将反码的数值位加1形成。10 例:[+112] 补码 = B [C 112] 补码= B 用补码可表示的十进制范围是:C 128 ~ +127。 因为带符号数用补码表示,可以简化运算,所以较常用。 (五)无符号数 无符号的8位二进制数没有符号位,8位均为数值位。即: 8位无符号二进制数对应的十进制范围为(0 ~ 255)。11 第二章MCS-51 单片机指令系统一、指令的表达形式每条指令有两种不同的表达形式: 1.二进制代码(机器码)指令 2.助记符(汇编语言)指令 助记符指令: MOV A, # 30H 二进制代码指令: 10000 助记符指令必须转换成二进制代码指令才能存入存储器。 本章仅介绍助记符指令格式,对应的机器码格式可参考附录。二、汇编语言指令格式操作码 [第一操作数] [,第二操作数] [,第三操作数] (1)操作码:用来规定指令进行何种操作,是指令中不能空缺的部分。 (2)操作数:表示参与指令操作的数据或数据所在的地址。为可选项。 有两个操作数时,前一个为目的操作数,后一个为源操作数。三、指令中有关操作数符号的说明Rn――工作寄存器R0~R7(n= 0、1、2…7)。 Ri ――工作寄存器R0和R1(i=0或1)。 Direct――内部RAM的单元地址,地址范围为00~FFH。 # data――8位立即数,即常数。 # data16――16位立即数。 addr16――16位目的地址。 Addrll ――11位目的地址。四、MCS-51单片机指令系统MCS―51的指令按功能分为五大类:数据传送、算术运算、逻辑运算、控制转移和位操作指 令。 (一) 数据传送类指令 注意:源操作数在传送前后保持不变。 1. 内部数据传送指令 指令 MOV MOV MOV MOV 功能说明 ; A←(Rn) ; A←(direct) ; A ← ((Ri)) ; A←#data ; Rn←(A) Rn←(direct);A,Rn A, direct A,@Ri A,#dataMOV Rn,AMOVMOV Rn, Rn,# dataRn←# data12 MOV direct , A ;direct ←(A) MOV direct , Rn ;direct ←(Rn) MOV direct , @R direct ←((Ri)) MOV direct1,direct2 ; direct1←(direct2) MOV direct, # direct←#data MOV @Ri, A ; ( Ri) ←( A) MOV @Ri, ( Ri) ←( direct) MOV @Ri, # ( Ri) ←#data MOV DPTR, #data16 ;DPTR←#data16【例2-1】 设(30H)=40H,(40H)=10H,(P1)=0CAH,试判断下列程序执行后的结果。 MOV R0,#30H ; R0←#30H MOV A, @R0 ; A←(30H),(A)= 40H MOV R1, A ; R1←(A),(R1)=40H MOV B, @R1 ; B←(40H),(B)=10H MOV @R1, P1 ; (R1) ←(P1),(40H)=0CAH MOV P2, P1 ; P2←(P1),(P2)=0CAH 结果是:(A)=40H,(B)=10H,(40H)=0CAH,(P2)=0CAH 2.外部数据传送指令 此类指令完成对片外RAM单元中数据的读/写操作。 (1)读指令 MOVX A ,@DPTR MOVX A , @Ri (2)写指令 MOVX @DPTR , A MOVX @Ri , A;A←((DPTR)) ; A←((Ri));(DPTR)←(A) ; (Ri)←(A)注意: 用R0和R1间接寻址时, 要占用P2寄存器放外部RAM的高8位地址, R0和R1放低8位地址。 使用时,要先将低8位地址送入Ri(R0或R1),高8位地址送入P2寄存器,然后再用上 述指令。 【例2-2】 将片外RAM1000H单元中的内容送到2000H单元。 方法一 MOV DPTR ,#1000H ; DPTR←#1000H MOVX A ,@DPTR ; A←((DPTR)) MOV DPTR ,#2000H ; DPTR←# 2000H MOVX @DPTR ,A ;(DPTR)←(A) 方法二 MOV P2 ,#10H MOV R0 ,#00H MOVX A,@R0 MOV P2 ,#20H ;P2←#10H ;R0←#00H ;A←((R0)) ;P2←#20H13 MOVX @R0,A;(R0)←(A)注意:在两个片外RAM单元之间是不能直接进行数据的传送的,必须经过片内的累加器A来间接 地传送。 3.访问程序存储器的传送指令(查表指令) MOVC A,@A+PC ;PC←(PC)+1 , A←((A)+(PC)) MOVC A,@A+DPTR ;A←((A)+(DPTR)) 其功能是到程序存储器中查表格数据送入累加器A。程序存储器中除了存放程序之外,还会放 一些表格数据,又称查表指令。指令中的操作数为表格数据。 前一条指令将A中的内容与PC的内容相加得到16位表格地址;后一条指令是将A中的内容与 DPTR中的内容相加得到16位表格地址。 4.数据交换指令 XCH A,Rn XCH A,direct XCH A,@Ri ; (A)←→(Rn ) ; (A)←→(direct ) ;(A)←→((Ri))XCHD A, @R (A)3~0 ←→((Ri))3~0 5.堆栈操作指令 在片内RAM的00H~7FH地址区域中,可设置一个堆栈区,主要用于保护和恢复CPU的工作现 场。 (1)进栈指令 PUSH SP←(SP)+1 ; (SP)←(direct); (2)出栈指令 POP direct←((SP)); SP ←(SP)-1;二、算术运算类指令注意大部分指令的执行结果将影响程序状态字PSW的有关标志位。 (一)加法指令 ADD A, Rn ADD A, direct ADD A, @Ri ADD A, # data ADDC A, Rn ADDC A, direct ADDC A, @Ri ADDC A, # data ;A←(A)+(Rn ) ;A←(A)+(direct) ;A←(A)+((Ri)) ;A←(A)+ data ;A←(A)+(Rn )+(CY) ;A←(A)+(direct)+(CY) ;A←(A)+((Ri))+ (CY) ;A←(A)+ data+(CY)如果把参加运算的两个操作数看作是无符号数(0~255),加法运算对CY标志位的影响如下:14 (1) 若结果的第7位向前有进位(C7’= 1),CY=1 (2) 若结果的第7位向前无进位(C7’= 0),CY=0 【例2-3】 设有两个无符号数放在A和R2中, (A) 0C6H 设 = (198) (R2) 68H , = (104) , 执行指令:ADD A,R2 试分析运算结果及对标志位的影响。 解: 写成竖式 (A)
+ 104 302(R2) +
(A) 1 结果是:(A)= 2EH, CY=1。 (二)加1指令 INC A INC Rn @Ri ;A←(A)+1 ;Rn←(Rn)+1 ;(Ri)←((Ri))+1 ;DPTR←(DPTR)+1INC direct ;direct←(direct)+1 INC INC DPTR这组指令的功能是使源操作数的值加1。 【例2-4】 设有两个16位无符号数,被加数存放在内部RAM的30H(低位字节)和31H(高 位字节)中,加数存放在40H(低位字节)和41H(高位字节)中。试写出求两数之和,并把结果 存放在30H和31H单元中的程序。 参考程序为: MOV R0,#30H MOV R1,#40H MOV A,@R0 ADD A,@R1 MOV @R0, A INC R0 INC R1 MOV A,@R0 ADDC A,@R1 MOV @R0, A (三)减法指令 1.带借位减法指令 SUBB A, Rn SUBB A,@Ri ;A←(A)C(Rn)C(CY) ;A←(A)C((Ri))C(CY)15; 地址指针R0赋值 ; 地址指针R1赋值 ;被加数的低8位送A ;被加数与加数的低8位相加,和送A,并影响CY标志 ;和的低8位存30H单元 ;修改地址指针R0 ;修改地址指针R1 ;被加数的高8位送A ;被加数和加数的高8位与CY相加,和送A ;和的高8位存31H单元SUBB A, direct ;A←(A)C(direct)C(CY) SUBB A,#data ;A←(A)C data C(CY) 该组指令的功能是从累加器A减去源操作数及标志位CY,其结果再送累加器A。CY位在减法 运算中是作借位标志。 SUBB指令对标志位的影响如下: (1)若第7位向前有借位(C7’= 1),则CY=1; (2)若第7位向前无借位(C7’= 0),则CY=0, 【例2-5】 在A和R3中存有两个无符号数, 设(A)=98H,(R3)=6AH,CY=1,执行指令: SUBB A, R3 分析执行结果及对标志位的影响 解: (A) CY (A) C
H 6AH C 1 2DH (R3) C 结果是: (A)=2DH,CY=0 2.减1指令 DEC A DEC Rn DEC direct DEC @Ri; A←(A)-1 ; Rn←(Rn)-1 ; direct←(direct)-1 ; (Ri) ←((Ri))-1这组指令的功能是使源操作数的值减1。 (四)十进制调整指令 DA 码相加的结果。 (1) ADD或ADDC指令的结果是二进制数之和。 (2) DA 指令的结果是BCD码之和 十进制调整指令执行时会对Cy位产生影响。 【例2-6】MOV A, #75H MOV R3, #69H ADD A, R3 ;(A)=DEH,CY=0 MOV B, A ;(B)= DEH DA A ; (A)=44H,CY=1 (五)乘法指令 MUL AB ; BA←(A)×(B) 指令的功能是把累加器A和寄存器B中两个8位无符号整数相乘,并把乘积的高8位存于寄存器B 中,低8位存于累加器A中。 乘法运算指令执行时会对标志位产生影响:CY标志总是被清0,即CY=0;OV标志则反映乘积 的位数,若OV=1,表示乘积为16位数;若OV=0,表示乘积为8位数。16A指令专用于实现BCD码的加法运算,其功能是将累加器A中按二进制相加后的结果调整成BCD (六)除法指令 DIV AB ; A商,B余←(A)÷ (B) 指令的功能是把累加器A和寄存器B中的两个8位无符号整数相除,所得商的整数部分存于累加 器A中,余数存于B中。 除法指令执行过程对标志位的影响:CY位总是被清0,OV标志位的状态反映寄存器B中的除数 情况,若除数为0,则OV=1,表示本次运算无意义,否则,OV=0。三、逻辑运算类指令在MCS―51指令系统中,逻辑运算类指令有25条,可实现与、或、异或等逻辑运算操作。这类 指令有可能会影响CY和P标志位的状态。 (一)累加器A的逻辑操作指令 1、累加器A清0 CLR A 2、累加器A取反 CPL A ; A←( A ) 【例2-7】 设(A)=33H,执行指令 CPL A 结果是:(A)= 0CCH 3、累加器A循环左移 RL AD7←D0; A←00H利用左移指令,可实现对A中的无符号数乘2的目的。 【例2-8】 执行下列指令后,A中的内容如何变化? MOV A,#11H ;(A)=11H(17) RL A ;(A)=22H(34) RL A ;(A)=44H(68) RL A ;(A)=88H(136) RL A ;(A)=11H(17) 4、累加器A带进位循环左移 RLC ACY D7←D05、累加器A循环右移RR AD7→ D0对累加器A进行的循环右移,可实现对A中无符号数的除2运算。 6、累加器A带进位循环右移 RRC ACY D7→ D0 17 7、累加器A半字节交换 SWAP AD7~D4D3~D0功能是将累加器A中内容的高4位与低4位互换。 【例2-9】 设(A)=63H,执行指令 SWAP A 结果为:(A)= 36H。(二)逻辑与指令 ;A←(A)∧(Rn) ; A←(A)∧(direct ) ;A←(A)∧((Ri)) ; A←(A)∧ #data ;direct ←(direct )∧(A)ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#dataANL direct,AANL direct,#data ;direct ←(direct )∧ #data 功能是将目的操作数和源操作数按位进行逻辑与操作,结果送目的操作数。 在程序设计中,逻辑与指令主要用于对目的操作数中的某些位进行屏蔽(清0)。方法是:将 需屏蔽的位与D0‖相与,其余位与D1‖相与即可。 (三)逻辑或指令 ;A←(A)∨(Rn) ; A←(A)∨(direct ) ;A←(A)∨((Ri)) ; A←(A)∨ #data ;direct ←(direct )∨(A)ORL A,Rn ORL A,direct ORL A,@Ri ORL A,#dataORL direct,AORL direct,#data ;direct ←(direct )∨ #data 功能是将目的操作数和源操作数按位进行逻辑或操作,结果送目的操作数。 逻辑或指令可对目的操作数的某些位进行置位。 方法是: 将需置位的位与D1‖相或, 其余位与D0‖ 相或即可,常用于组合数据。 (四)逻辑异或指令18 XRL A,Rn XRL A,direct XRL A,@Ri XRL A,#data;A←(A)(Rn) ; A←(A)(direct ) ;A←(A)((Ri)) ; A←(A) #dataXRL direct,A ;direct ←(direct )(A) XRL direct,#data ;direct ←(direct ) # data 功能是将目的操作数和源操作数按位进行逻辑异或操作,结果送目的操作数。 逻辑异或指令可用于对目的操作数的某些位取反,而其余位不变。方法是:将要取反的这些 位和D1‖异或,其余位则和D0‖异或即可。 【例2-10】 将工作寄存器R2中数据的高4位和R3中的低4位拼成一个数,并将该数存入30H。 MOV MOV ANL MOV MOV ORL MOV 【例2-11】 XRL ANL MOV ANL ORL R0,#30H A, B, A A, R3 ;屏蔽高4位 ;组合数据 A,B R2 ;屏蔽低4位 ;中间结果存B寄存器 A, #0F0H ;R0作地址指针ANL A,#0FH@R0, A ;结果存30H单元。 分析下列程序的执行结果。 ;(A)=77H ;(A)= 77HFFH = 88H ;(A)=88H ∧ 0FH = 08H ;(P1)=64H ;(P1)=64H∧F0H = 60H ;(A)= 08H∨60H=68H A,#0FFH A, #0FH P1,#64H P1,#0F0H A,P1MOV A, #77H四、控制转移类指令转移指令的功能是通过修改程序计数器PC的值,使程序执行的顺序发生变化,从而改变程序执 行的方向。 (一)无条件转移指令 无条件转移指令是使程序无条件转移到指定的地址去执行。 1、长转移指令 LJMP addr16 (addr16)处执行。 addr16可表示的地址范围是(0000H~FFFFH)。 ;PC←addr16 指令的功能是将指令提供的16位地址(addr16)送入PC,然后程序无条件地转向目标地址19 2、绝对转移指令 AJMP addr11 ; PC←(PC)+2 PC10~0←addr11 指令的功能是先使程序计数器PC值加2(完成取指并指向下一条指令的地址),然后将指令提 供的addrll作为转移目的地址的低11位, 和PC当前值的高5位形成16位的目标地址, 程序随即转移到 该地址处执行。 3、相对转移指令 SJMP rel ; PC←(PC)+2 + rel 操作数为相对寻址方式。指令的功能是先使PC+2(完成取指并指向下一条指令地址),然后把 PC当前值与地址偏移量rel相加作为目标转移地址。即: 目标地址= PC + 2 + rel =(PC)+ rel rel是一个带符号的8位二进制数的补码(数值范围是 C128~+127),所以SJMP指令的转移 范围是:以PC当前值为起点,可向前(DC‖号表示)跳128个字节,或向后(D+‖号表示)跳127字 节。 当满足转移范围的条件下,可采用DSJMP addr16‖形式。 4、间接转移指令 JMP @A+DPTR ; PC←(A)+(DPTR) 指令的功能是将累加器A中8位无符号数与DPTR的16位内容相加,和作为目标地址送入PC,实 现无条件转移。 (二)条件转移指令 条件转移指令要求对某一特定条件进行判断,当满足给定的条件,程序就转移到目标地址去 执行,条件不满足则顺序执行下一条指令。可用于实现分支结构的程序。 这类指令中操作数都为相对寻址方式,目标地址的形成与SJMP指令相类似。当满足转移范 围的条件下,均可用Daddr16‖代替Drel‖。 1、累加器A的判零转移指令 JZ rel ;若(A)=0 则PC←(PC)+2 + rel ,若(A)≠0 则PC←(PC)+2 JNZ 若(A)≠0 则PC←(PC)+2 + rel , 若(A)= 0 则PC←(PC)+2 第一条指令的功能是如果累加器A的内容为零,则程序转向指定的目标地址,否则程序顺序执 行。 第二条指令的功能是如果累加器A的内容不为零,则程序转向指定的目标地址,否则程序顺序 执行。 【例2-12】 将片内RAM的40H单元开始的数据块传送到片外RAM的1000H开始的单元中, 当 遇到传送的数据为零则停止传送。 START:MOV R0,#40H MOV DPTR,#1000H LOOP:MOV A,@R0 JZ ABD MOVX @DPTR,A ;片内RAM数据块首址 ;片外RAM数据块首址 ;取数 ;等于零,结束 ;不为零,送数20 INC R0 INC ABD:SJMP 2、比较转移指令CJNE CJNE CJNE CJNE A, A, Rn, #data, rel direct,;地址指针加1 ;地址指针加1 ;转LOOP,继续取数 ;踏步DPTR ABDSJMP LOOP; 若(A)≠data,则PC←(PC)+3+ rel ,若(A)=data,则PC←(PC)+3 ; 若(Rn)≠data,则PC←(PC)+3+ rel , 若(Rn)=data,则PC←(PC)+3 ,若((Ri))=data,则PC←(PC)+3rel ; 若(A)≠(direct),则PC←(PC)+3+ rel,若(A)=(direct),则PC←(PC)+3#data, rel@Ri, #data, rel ; 若((Ri))≠data,则PC←(PC)+3+ rel该组指令的功能是将前两个操作数进行比较,若不相等则程序转移到指定的目标地址执行,相 等则顺序执行。 指令执行过程中,对两个操作数进行比较是采用相减运算的方法,因此比较结果会影响CY标 志。如前数小于后数,则CY=1,否则,CY=0。我们可以进一步根据对CY值的判断确定两个操作 数的大小,实现多分支转移功能。 【例2-13】 当Pl口输入数据为55H时,程序继续运行,若不为55H则程序进入等待状态。 程序如下: WAIT:MOV A, P1 ; A←(P1) CJNE A,#55H,WAIT ;(A)≠ 55H,转向WAIT;(A)=55H,则顺序执行 …… 【例2-14】 某温度控制系统中,温度的测量值T存在累加器A,温度的给定值Tg存在60H单元。 要求:T=Tg时,程序返回(符号地址为FH); T&Tg时,程序转向降温处理程序(符号地址为JW); T<Tg时,程序转向升温处理程序(符号地址为SW),试编制程序。 相应的程序如下: CJNE A,60H,L00P ;T ≠ Tg,转向 L00P AJMP FH ;T=Tg,转向FH LOOP: JC SW ; T&Tg,转向SW AJMP JW 3、循环转移指令 DJNZ Rn, 若(Rn)C1≠0,则PC←(PC)+2+ rel , 若(Rn)C1=0,则PC←(PC)+2 DJNZ direct, 若(direct)C1≠0,则PC←(PC)+3+ rel ,若(direct)C1=0,则PC←(PC)+3 第一条是将Rn的内容减1后进行判断,若不为零则程序转移到目标地址处执行;若为零,则程 序顺序执行。 第二条是将direct单元的内容减1后进行判断,若不为零,则程序转移到目标地址;若为零,则 程序顺序执行。 【例2-15】 将片内RAM的30H~39H单元置初值00H~09H。 MOV R0,# 30H ;设定地址指针 MOV R2,# 0AH ;数据区长度设定 MOV A,#00H ;初值装入A LOOP :MOV @R0,A ;送数21; T&Tg,转向JW INC R0 INC A DJNZ R2, LOOP HERE:SJMP HERE;修改地址指针 ;修改待传送的数据 ;未送完,转LOOP地址继续送,否则传送结束 ;踏步(三)子程序调用和返回指令 单片机的应用程序由主程序和子程序等形式组成。 主程序可通过调用指令去调用子程序,子程序执行完后再由返回指令返回到主程序, 因此, 调用指令应放在主程序中,返回指令应放在子程序中(放在最后一条的位置)。 同一个子程序可以被多次调用,子程序还可调用别的子程序,称为子程序嵌套。 1、调用指令 (1) 长调用指令 LCALL addr16 addr16:子程序入口地址 (2)绝对调用指令 ACALL addr11 addr11:子程序入口地址的低11位(高5位由PC定) 2、返回指令 (1)子程序返回指令 RET 指令的功能:从子程序返回到主程序的断点地址。图 2-1 子程序的调用和返回示意图(2)中断返回指令 RETI 指令的功能:从中断服务程序返回到主程序的断点地址。 (四)空操作指令 NOP ;PC←(PC)+1 该指令执行时不进行任何有效的操作,但需要消耗一个机器周期的时间,所以在程序设计中22 可用于短暂的延时。五、位操作指令在MCS-51存储器中有两个可位寻址的区域,可利用位操作指令对这些位进行单独的操作。 存储器中的两个位寻址区的分布是: (1) 片内RAM的20H~2FH区域; (2) 特殊功能寄存器中地址可被8整除的单元。 位操作指令中,bit是位变量的位地址,可使用四种不同的表示方法,下面以CY位为例进行说 明。 (1) 位地址(如:D7H) (2) 位定义名(如:CY) (3) 寄存器名.位(如:PSW.7) 注意:累加器必须表示成:ACC.0~ACC.7。 (4) 字节地址.位(如:D0H.7) 标志位CY在位操作指令中称作位累加器,用符号C表示。 (一)位传送指令 MOV C, bit MOV bit, C ; CY←(bit) ; bit ← (CY)第一条指令的功能是将bit位的内容传送到CY,第二条指令是将CY的内容传送到bit位。 (二)置位和清零指令 CLR CLR C ; CY←0 bit ←0SETB C ; CY←1 SETB bit ←1 前两条指令的功能:位清零。 后两条指令的功能:位置1。 【例2-16】 SETB RS1 CLR RS0 ;设定工作寄存器2区为当前工作区 (三)位逻辑运算指令 ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit CPL C CPL bit 【例2-17】;CY←(CY)∧(bit) ;CY←(CY)∧( bit ) ;CY←(CY)∨(bit) ;CY←(CY)∨( bit ) ;CY←( CY ) ;bit←( bit )用编程的方法实现图2-2所示电路的功能。23 图 2-2程序清单: MOV C, P1.1 ORL C, P1.2 ANL MOV C, P1.0 P1.3, C(四)位条件转移指令 1、判CY的条件转移指令 JC JNC 则程序顺序执行。 第二条指令也是对CY进行判断,若(CY)= 0,则转移;若(CY)=1,则顺序执行。 若发生转移,则:目标地址=PC+2+ rel 转移范围与SJMP rel 指令相同, 当满足转移范围的条件下,可用Daddr16‖代替Drel‖。 2、判位变量的条件转移 JB bit ,rel JNB bit ,rel JBC bit ,rel 第一条指令的功能是若bit位内容为1,转移到目标地址,目标地址=(PC)+3 +rel;若为0,程 序顺序执行。 第二条指令的功能是是若bit位内容为0(不为1),转移到目标地址,目标地址=(PC)+ 3+ rel; 若为1,程序顺序执行。 第三条指令的功能是若bit位内容为1,则将bit位内容清0,并转移到目标地址,目标地址=(PC) + 3+ rel;若bit位内容为0,程序顺序执行。 rel rel第一条指令功能是对CY进行判断,若(CY)=1,则转移到目标地址去执行;若(CY)=0,24 第三章一、程序设计概述 (一)程序设计语言 1.机器语言汇编语言程序设计机器语言是用机器码编写程序。能被计算机直接识别和执行。 2.汇编语言 汇编语言是用助记符编写程序。 汇编:计算机不能直接识别和执行汇编语言程序,而要通过D翻译‖把源程序译成机器语言程序 (目标程序)才能执行,这一D翻译‖工作称为汇编。汇编有人工汇编和计算机汇编两种 方法。 反汇编:有时需要根据已有的机器语言程序,将其转化为相应的汇编语言程序,这个过程称为 反汇编。 汇编语言是面向机器的, 每一类计算机分别有自己的汇编语言。 汇编语言占用的内存单元少, 执行效率高,广泛应用于工业过程控制与检测等场合。 本章将介绍MCS-51系列单片机的汇编语言程序设计。 3.高级语言 高级语言是一种面向算法和过程并独立于机器的通用程序设计语言。如BASIC、C语言等。 在MCS―51系列单片机开发应用中,单片机C语言,C51正得到越来越广泛的应用。(二)MCS―51单片机汇编语言语句格式标号:START:操作符MOV操作数A, 30H;注释;A←(30H)1.标号 标号用来标明语句地址,它代表该语句指令机器码的第一个字节的存储单元地址。 标号一般规定由1~8个英文字母或数字组成,但第一个符号必须是英文字母。 2.注释 注释只是对语句或程序段的含义进行解释说明,以方便程序的编写、阅读和交流,简化软件的 维护,一般只在关键处加注释。 (三)伪指令 伪指令:伪指令只用于汇编语言源程序中,对汇编过程起控制和指导的作用,不生成机器码。 汇编结束,自动消失。 MCS―51单片机主要有8条伪指令。 1.定义起始地址伪指令ORG ORG 16位地址或标号 功能:定义以下程序段的起始地址。25 【 例3-1】 地址0000H指令代码022000源程序ORG 0000HLJMP MAIN ORG 0023H LJMP SERVE1 ORG 2000H MAIN:MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H SETB TR1;上电转向主程序 ;串行口中断入口地址 ;转中断服务程序 ;主程序 ;设T1作方式2 ;赋计数初值 ;启动T10023H 02XXXX H H DF3 758BF3 D28E2.汇编语言结束伪指令END END伪指令放在源程序的末尾,用来指示源程序到此全部结束。 3.赋值伪指令EQU EQU用于给它左边的D字符名称‖赋值,其格式为: 字符 EQU 操作数 操作数可以是8位或16位二进制数,也可以是事先定义的标号或表达式。 【例3-2】 ORG 0500H AA EQU R1 A10 EQU 10H MOV R0,A10 MOV A,AA;R0←(10H) ; A←(R1)┇ 注意:EQU伪指令中的字符必须先赋值后使用,故该语句通常放在源程序的开头。 4.数据地址赋值伪指令DATA 其格式为: 字符名称 DATA 表达式 DATA伪指令功能和EQU相类似,它把右边D表达式‖的值赋给左边的‖字符名称‖。这里的表达 式可以是一个数据或地址,也可以是一个包含所定义字符名称在内的表达式。 DATA伪指令和EQU伪指令的主要区别是:EQU定义的字符必须先定义后使用,而DATA伪指 令没有这种限制,故DATA伪指令可用于源程序的开头或结尾。 5.定义字节伪指令DB 其格式为: 标号: DB 项或项表 项或项表: 可以是一个8位二进制数或一串8位二进制数 (用逗号分开) 数据可以采用二、 。 十、 十六进制和ASCll码等多种表示形式。 标号:表格的起始地址(表头地址) 。 指令的功能是把D项或项表‖的数据依次定义到程序存储器的单元中,形成一张数据表(只是 一张定义表,数据并未真正存入这些单元) 。 6.定义字伪指令DW26 其格式为 标号: DW 项或项表 DW伪指令的功能和DB伪指令相似,其区别在于DB定义的是一个字节,而DW定义的是一个 字(即两个字节) ,因此DW伪指令主要用来定义16位地址(高8位在前,低8位在后) 。 7.定义存储空间伪指令DS 其格式为: 标号: DS 表达式 DS伪指令指示汇编程序从它的标号地址开始预留一定数量的存储单元作为备用, 预留数量由 DS语句中D表达式‖的值决定。 8.位地址赋值伪指令BIT 其格式为: 字符名称 BIT 位地址 将位地址赋值给指定的字符。 【例3-3】K1 A2 BIT BIT P1.0 20H(四)机器汇编 试对如下源程序进行机器汇编: ORG 1000H SUM DATA BLOCK START: MOV MOV CJNE 1FHDATA 20H R0,#BLOCK A,@R0 A,#00H,LOOPHERE: SJMP HERE LOOP: CLR A NEXT: INC R0 ADD A,@R0 DJNZ BLOCK,NEXT MOV SUM,A SJMP HEREEND ;教师演示(五)汇编语言程序设计步骤和基本程序结构 1.汇编语言程序设计步骤 (1) 分析问题 (2) 确定算法 (3) 设计程序流程图 标准的流程图符号见下图:27 程序执行顺序流 流线 端点符号 向线 程序的开始和结束符 号 处理符号 表示处理功能判断符号表示判断功能 用来实现流 程图之间的连接连接符号图 3-1 流程图符号(4)分配内存单元:分配内存工作单元,确定程序和数据区的起始地址。 (5)编写汇编语言程序 (6)调试程序: 2. 基本程序结构 包括顺序结构、分支结构、循环结构。图 3―2 三种基本程序结构流程图 3. 程序质量的评判标准 (1) 能可靠地实现系统所要求的各种功能 (2) 本着节省存储单元,减少程序长度和加快运算时间的原则 (3) 程序结构清晰、简捷,流程合理,各功能程序模块化、子程序化。 二、顺序结构程序设计 1. 顺序结构程序 【例3-4】 编写运算程序。 设数a存放在R1中,数b存放在R2中,计算y=a2-b,并将结果放入R4和R5中。 ORG 0000H MOV A,R128 MOV B,A MUL AB CLR C SUBB A,R2 MOV R4,A MOV A,B SUBB A,#00H MOV R5,A SJMP $ END 【例3-5】编写拆字程序。 将MCS―51片内RAM中20H单元中的高半字节送21H单元的低半字节,低半字节送22H单元 的低半字节,两个单元的高半字节为0。 程序如下: MOV A,20H SWAP A ANL A,#0FH MOV 21H,A MOV A,20H ANL A,#0FH MOV 22H, A 课堂练习: 1. 编写拼字程序。 将8051片内RAM50H单元中的高半字节和51H单元的低半字节拼成一个数, 送52H单元。 【例3-6】编写查表程序。 将十六进制数转换为ASCII码。设1位十六进制数存在R0寄存器的低4位,转换后的ASCII码仍 送回R0中。 解:待转换的十六进制数为0~F。根据ASCII码表可知,0~9的ASCII码为30H~39H,A~F的 ASCII码为41H~46H。将以上ASCII码值列成表格。 ORG 0000H MOV DPTR,# ASCTAB MOV A, R0 ANL A,# 0FH MOVC A,@A+DPTR ;A中为表格中数据的序号,DPTR中放表头地址 MOV R0, A SJMP $ ASCTAB:DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H END29 三、分支结构程序设计 在程序设计中, 经常需要计算机对某情况进行判断, 然后根据判断的结果选择程序执行的流向, 这就是分支程序。 在汇编语言程序中,通常利用条件转移指令形成不同的程序分支。 1.单分支程序 【例3-7】 在片内RAM 30H单元中存有一个带符号数, 试判断该数的正负性, 若为正数, 将6EH 位清0;若为负数,将6EH位置1。 SUB1:MOV A, 30H ;30H单元中的数送A JB ACC.7,LOOP ;符号位等于1,是负数,转移 CLR 6EH ;符号位等于0,是正数,清标志位 RET ;返回 LOOP::SETB 6EH ;标志位置1 RET ;返回 2.多分支程序 【例3-8】 比较片内RAM的50H和51H单元中两个8位无符号数的大小,把大数存入60H单元, 若两数相等则把标志位70H置1。 SUB:MOV A,50H CJNE A,51H,LOOP SETB 70H RET LOOP: JC LOOP1 MOV 60H,A RET LOOP1: MOV 60H,51H RET 四、循环结构程序设计 循环程序设计不仅可以大大缩短所编程序的长度, 使程序所占内 存单元数最少,也能使程序结构紧凑和可读性变好。 (一)循环程序的基本结构 1.循环初始化 2.循环工作部分(是循环程序的主体,需要重复执行的程序段) 3.循环控制部分(完成对变量的修改) 4.循环终止判定部分 (二)循环结构程序设计 【例3-9】 试编写程序,求片内RAM的30H~39H单元中数的和, 将结果存放在R2和R3中。 ORG 0000H NSUN:MOV R1,#10 ;数据块长度送R1, (计数器置初值) MOV R2,#00H ;R2清零 MOV R3,#00H ;R3清零 MOV R0,#30H ;数据块首地址送R030图 3-3 循环程序结构 LOOP:MOV ADD MOV CLR ADDC MOV INC DJNZ RET ENDA,R3 A,@R0 R3,A A A,R2 R2,A R0 R1,LOOP;和数的低字节送R3;和数的高字节送R2 ;修改地址指针 ;数据未加完继续执行【例3-10】 求一组单字节无符号数中最大值。设内部RAM 20H单元为数据块的起始地址, 块长度为10,试编程求数据块中的最大值并存入30H单元中。 相应的程序为: MOV R0,#20H ;数据块首地址送R0 MOV R6,#0AH ;数据块长度送R6 MOV 30H,#00H ;30H←00H LOOP::MOV A,@R0 ;数据块的数读入A中 CJNE A,30H,NEXT NEXT:JC LOOP1 ;(A)&(30H)转LOOP1 MOV 30H,A ; (A)&(30H)则大数送30H LOOP1:INC R0 ;修改数据块指针R0 DJNZ R6,LOOP ;未比较完,转LOOP(循环) SJMP $图 3-4 找最大值程序流程图思考:若将程序中的JC指令改为JNC指令,要使程序功能不变,程序将作如何修改。31 第四章一、并行 I/O 口的应用举例并行 I/O 口1.按键控制发光二极管 (K1 按下 L1 亮,K2 断开 L2 亮。)+5V 1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28470Ω L1 470Ω L22121+5V10K 10K20P19 18XTAL1 XTAL2K1 K2GND 20P+5V 4.7u 9RESETALE30 GND1K INT0 MCS-51 12GND图 4-12.流水灯控制 (P1 口接 8 个发光二极管,每隔 0.1 秒轮流点亮一个发光二极管。)+5V4 70 Ω L0214 70 Ω L7211 2 3 4 5 6 7 8P1. 0 P1. 1 P1. 2 P1. 3 P1. 4 P1. 5 P1. 6 P1. 7P0. 0 P0. 1 P0. 2 P0. 3 P0. 4 P0. 5 P0. 6 P0. 7 P2. 0 P2. 1 P2. 2 P2. 3 P2. 4 P2. 5 P2. 6 P2. 739 38 37 36 35 34 33 32 21 22 23 24 25 26 27 282 0P19 18XTAL1 XTAL2GND 2 0P +5V +4 .7 u 9RESETALE301k INT0 MCS-5 1 12GND图 4-232 二、并行口基本知识MCS―51 系列单片机芯片内部集成有四个并行 I/O 口(P0~P3) ,共 32 条 I/O 线,每一个 I/O 线都能独立地用作输入或输出。8 位同时使用可实现 8 位数据同时传送。 (一)并行 I/O 口的功能1.P0~P3 口的第一功能:作通用输入/输出口,用于连接外部设备。 2.P0、P2、P3 口的第二功能 (1) P0、P2 口用于扩展外部总线图4-3MCS―51单片机片外三总线的扩展方法(2)P3 口的第二功能(表 4-1) 表 4-1 P3 口各位的第二功能P3 口引脚 P3.0 P3.1 P3.2 第二功能 RXD(串行口输入端) TXD(串行口输出端) P3 口引脚 P3.4 P3.5 P3.6 第二功能 T0(定时器 0 外部输入) T1(定时器 1 外部输入)INT 0 (外部中断 0 输入) INT1(外部中断 1 输入)WR (外部数据存储器写脉冲输出)RD (外部数据存储器读脉冲输出)P3.3P3.7(二)各口的位结构原理 1.每个口中由 8 位锁存器构成一个 8 位的特殊功能寄存器,即 P0~P3 寄存器。 2.P0 口要外接上拉电阻,以满足输出高电平的需要。 3.P0~P3 口作输入口时,要向口内的锁存器写 1。 (三)I/O 口的负载能力 每条 I/0 线的最大电流为 1mA。 (四)输入/输出操作 有三种操作方式:输出数据方式、读锁存器方式和读引脚方式。33 1.输出数据方式 通过一条数据操作指令即可把输出数据写入 P0~P3 端口锁存器,然后通过输出驱动器送到端 口引脚线输出。例如: MOV PX,A 或:MOV PX,#ata 2.读引脚方式 它可从端口引脚线上读入数据。读引脚时,首先应使欲读引脚对应的端口锁存器置位,以便使 驱动器中 V2 管截止;然后打开输入三态门,使相应引脚上的信号输入内部总线。因此读引脚时必 须连续使用两条指令: MOV PX,#0FFH ;将 PX 口各位置 1 MOV A,PX ;读入 PX 口引脚线信号 3.读端口数据方式 它是一种仅对端口锁存器中数据进行读入的操作方式,读入的数据并非是端口引脚线上的数 据。这些指令都是属于读端口锁存器的D读一修改一写‖指令。 例如下面的一些指令: ANL Px,#data ORL Px,#data XRL Px,#data图 4-4并行 I/O 口 内部结构图34 三、并行 I/O 口的程序设计1. 按键控制发光二极管 (见图 4-1) ORG 0000H START:MOV P2, #0FFH LOOP:MOV C,P2.5 JNC K1 CLR P1.2 SJMP K2 K1: SETB P1.2 K2:MOV C,P2.6 JC K21 CLR P1.3 SJMP LOOP K21:SETB P1.3 SJMP LOOP END 2.流水灯(见图 4-2) ORG 0000H MOV A,#01H LOOP:MOV P1,A LCALL DELAY RL A SJMP LOOP DELAY:MOV R2, # 200 DEL1: MOV R3, # 126 NOP DEL2: DJNZ R3, DEL2 DJNZ R2, DEL1 RET ; 延时 0.1 秒子程序 END四、音乐输出单片机 P1.0 带一个蜂鸣器,发出生日快乐的音乐。 单片机用作可编程乐曲演奏器的原理是:通过控制定时器的定时来产生不同音阶的声音,再利 用延迟来控制发音时间的长短,即可控制音频中的节拍。把乐谱中的音符和相应的节拍变换为定常 数和延迟常数,作成数据表格存放在存储器中。由程序表得到定时常数和延迟常数,分别用以控制 定时器产生方波的频率和发出该频率方波的持续时间。当延迟时间到时,再查下一个音符的定时常 数和延迟常数。依次进行下去,就可自动演奏出悦耳动听的乐曲。35 下面是歌曲“新年好”的一段简谱: 1=C 1 1 1 5 | 3 3 3 3 1 | 1 3 5 5 | 4 3 3 ― | 用定时器 T0 方式 1 来产生歌谱中各音符 D200(延时 200ms)次数来实现,以每拍 800ms 的节 拍时间为例,那么一拍需要循环调用 D200 延时子程序 4 次。同理,半拍就需要调用 2 次。设单片 机晶振频率为 6MHz,乐曲中的音符、频率及定时常数三者的对应关系如下:C 调音符 频率 (Hz) 半周期 (ms) 定时值5 392 1.28 FD806 440 1.14 FDC67 494 1.01 FE071 524 0.95 FE252 588 0.85 FE573 660 0.76 FE844 698 0.72 FE985 784 0.64 FEC06 880 0.57 FEE37 988 0.51 FF01图 4-5 程序清单: ORG 0000H AJMP MAIN ORG 000BH MOV TH0, R1 MOV TL0, R0 CPL P1.0 RETI ORG 0050H MAIN: MOV TMOD, #01H MOV IE, #82H MOV DPTR, #TAB LOOP:CLR A MOVC A,@A+DPTR MOV R1, A36INC DPTR CLR A MOVC A,@A+DPTR MOV R0, A ORL A, R1 JZ NEXT0 MOV A, R0 ANL A, R1 CJNE A, #0FFH,NEXT SJMP MAIN NEXT:MOV TH0,R1 MOV TL0,R0 SETB TR0 SJMP NEXT1 NEXT0:CLR TR0 NEXT1:CLR A INC DPTR MOVC A,@A+DPTR MOV R2, A LOOP1:ACALL D200 DJNZ R2, LOOP1 INC DPTR AJMP LOOP D200: MOV R3, #0a0H D200B: MOV A, #0FFH D200A: DEC A JNZ D200A DEC R3CJNE R3, #00H,D200B RET TAB:DB 0FEH,25H,02H,0FEH,25H,02H DB 0FEH,25H,04H,0FDH,80H,04H DB 0FEH,84H,02H,0FEH,84H,02H DB 0FEH,84H,04H,0FEH,25H,04H DB 0FEH,25H,02H,0FEH,84H,02H DB 0FEH,0C0H,04H,0FEH,0C0H,04H DB 0FEH,98H,02H,0FEH,84H,02H DB 0FEH,57H,08H,00H,00H,04H DB 0FFH,0FFH END37 第五章并行 I/O 口的扩展一、并行 I/O 口的扩展方法1.总线扩展方法 必须先扩展单片机外部三总线。使用通用 I/O 扩展芯片(如 8255) 、TTL 等芯片 进行扩展。 2.串行口扩展方法 下面只讨论前一种方法。二、外部三总线扩展(一)外部三总线的结构地址总线(AB) MCS51 单片机 数据总线(DB) 控制总线(CB) 数据 存储器 程序 存储器 I/O 接口 I/O 接口外部 设备外部 设备图 5-1 (二)外部三总线的扩展MCS-51 单片机外部三总线结构MCS-51单片机的外部三总线主要是由它的P0、P2口及P3口的部分结构扩展而成的。 1、 地址总线 地址总线共16条:P0口(P0.7~P0.0)作低8位地址线(A7~A0);P2口(P2.7~P2.0) 作高8位地址线(A15~A8)。 2、 数据总线 数据总线有8条:P0口(P0.7~P0.0)作8位数据线(D7~D0)。 3、 控制总线 (1)ALE:地址锁存信号,实现对P0口上送出的低8位地址信号的锁存。 (2) RD (P3.7):片外读选通信号,低电平有效。 (3) W R (P3.6):片外写选通信号,低电平有效。 P0口既要用作低8位地址总线,又要用作数据总线,使用时只能是分时起作用。用地址 锁存器锁存低8位地址。38 图5-2MCS―51单片机片外三总线的扩展方法4.地址锁存器 地址锁存器一般选择以下降沿锁存的芯片,例如:74LS373、8282等;图5-3三、地址译码器 74LS138图5-4 1. 引脚功能 74LS138芯片内部是一个3:8译码器。引脚功能如下:E1 、 E 2 、E3:使能端, E1 、 E 2 低电平有效,E3高电平有效A、 B、C:译码器的输入端Y 0 ~ Y 7 :译码器的输出端,可用作片选信号39 74LS138 的真值表2.地址译码+5V10K×8D7 ~D0 3 4 7 8 13 14 17 18 1 GND D0 D1 D2 D3 D4 D5 D6 D7 E 7 4LS3 73 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 G 2 5 6 9 12 15 16 19 11 A7 ~A0P0. 0 P0. 1 P0. 2 P0. 3 P0. 4 P0. 5 P0. 6 P0. 7 2 0P 18 19 GND 2 0P +5V 4 .7 u 9 U? XTAL2 GND XTAL1 P2. 0 P2. 1 P2. 2 P2. 3 P2. 4 P2. 5 P2. 6 P2. 7 RD WR ALE MCS-5 139 38 37 36 35 34 33 32RST21 22 23 24 25 26 27 28 17 16 111 2 3 6 4 5A B C E3 E1 E21kY0 Y1 Y2 Y3 Y4 Y5 Y6 Y715 14 13 12 11 10 9 7CS0(80 0 0 H) CS1(90 0 0 H) CS2(A00 0 H) CS3(B00 0 H) CS4(C00 0 H) CS5(D00 0 H) CS6(E0 0 0 H) CS7(F0 0 0 H)GND7 4LS1 38GND图5-5四、应用一1.用8255A 芯片扩展并行I/O口 (1) 8255A 内部的并行I/O口 3个并行I/O口,均为8位: PA口: 通过编程可以分别设置成单向输出、单向输入或者分时输入输出。40 PB口: 通过编程可以分别设置成单向输出和单向输入。 PC口: 可分为高4位PC7~4和低4位PC3~0两个独立部分。PC端口可否独立控制取决 于PA端口和PB端口的工作方式。 另外,还有一个命令口,放命令字。 (2) 引脚 数据总线D7~D0:8255A与CPU交换控制和数据信息的路径。 片选输入控制线CS:来自I/O地址译码电路,低有效。 读出控制RD和写入控制WR:来自CPU的读写输出控制信号,低有效。 地址输入线A1、A0:来自地址锁存器输出,用于寻址内部PA端口、PB端口、PC端口和 命令端口之一。 A1A0地址 00 01 10 11 选中的端口 PA PB PC 命令端口复位控制输入线RESET:8255A电路与CPU同步复位。 PA7~0:PA端口的8位I/O引脚,传送方向由编程决定。 PB7~0:PB端口的8位I/O引脚,传送方向由编程决定。 PC7~0:PC端口的8位I/O引脚,传送方向由编程决定。 (3)8255A 的命令字格式与功能图 5-6 功能说明: D0 PC3~PC0方向设置, D1 PB端口方向设置 D2 PB端口工作模式8255A 命令字格式D3 PC7~PC4方向设置 D4 PA端口方向设置 D6、D5 PA端口工作模式 0 0 通用输入/输出(模式0) 0 1 选通输入/输出(模式1) 1 X 选通输入/输出(模式2)0---输出方向; 1---输入方向 0---输出方向; 1---输入方向 0---通用输入/输出口(模式0); 1--- 选通输入/输出口(模式1) 0---输出方向 1---输入方向 0---输出方向 1---输入方向(4)接口电路(PA作输出口)41 +5V10K×834 33 32 31 30 29 28 27 41 3 2 1 40 39 38 371 18 19 20 21 22 23 24 25 14 15 16 17 13 12 11 10 2 74LS04 L1+5VP0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 20P 18 19 U? XTAL2 GND XTAL1 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR ALE MCS-5139 38 37 36 35 34 33 323 4 7 8 13 14 17 18 1 GNDD0 D1 D2 D3 D4 D5 D6 D7 EQ0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 G2 5 6 9 12 15 16 19 11D0 D1 D2 D3 D4 D5 D6 D7PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 8255470Ω2 74LS04 L7470ΩGND 20P9RST21 22 23 24 25 26 27 28 17 16 1174LS3739 8 6A0 A1 CS1 2 3 6 4 5A B C E3 E1 E2Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y715 14 13 12 11 10 9 75 36 35RD WR RESET74LS138 GND图5-7 2.流水灯控制 用8255A的PA口接8个发光二极管,每隔0.1秒轮渡点亮一个发光二极管。 ORG 0000H MOV DPTR,#8003H MOV A,#80H MOVX @DPTR,A ;将 PA 口置为模式 0,输出方式 MOV A,#01H MOV DPTR,#8000H LOOP:MOVX @DPTR,A LCALL DELAY RL A SJMP LOOP DELAY:MOV R2, # 200 DEL1:MOV R3, # 126 NOP DEL2:DJNZ R3, DEL242 DJNZ RET ENDR2, DEL1 ; 延时 0.1 秒子程序五、应用二LED 16x16 点阵显示汉字 1.16x16点阵电路的原理图5-8 2.程序 ROWLOW EQU 0B002H; 行低八位地址 ROWHIGH EQU 0B003H; 行高八位地址 COLLOW EQU 0B000H; 列低八位地址 COLHIGH EQU 0B001H; 列高八位地址 ORG LJMP MOV MOV MOV 0000H MAIN 40H, #0 41H,#0 A,#00HMAIN:;清屏 ; 行驱动高有效43 MOV DPTR,#ROWLOW MOVX @DPTR,A MOV DPTR,#ROWHIGH MOVX @DPTR,A MOV A,#0FFH ; 列驱动低有效 MOV DPTR,#COLLOW MOVX @DPTR,A MOV DPTR,#COLHIGH MOVX @DPTR,A MOV R5, #0 ;汉字个数 LOOP0: MOV R4, #50 ;每个字显示的时间 LOOP: MOV 40H, #01 ;选择显示行 MOV R2, #16 ;每行16列 MOV A,R5 ;字模的起始地址 MOV B,#32 MUL AB MOV DPTR,#FONT ADD A,DPL MOV 42H, A MOV A,B ADDC A,DPH MOV 43H,A NEXTROW: MOV A,#00H ;先关闭显示 MOV DPTR,#ROWLOW MOVX @DPTR,A MOV DPTR,#ROWHIGH MOVX @DPTR,A MOV DPL, 42H ;取出该行字模 MOV DPH, 43H CLR A MOVC A, @A+DPTR MOV R0,A INC DPTR CLR A MOVC A,@A+DPTR MOV R1,A INC DPTR MOV 42H , DPL ;指向下行字模 MOV 43H, DPH MOV DPTR,#COLLOW ;输出字模数据 MOV A,R0 CPL A MOVX @DPTR,A MOV DPTR,#COLHIGH44 MOV A,R1 CPL A MOVX @DPTR,A MOV A,40H ;点亮该行 MOV DPTR,#ROWLOW MOVX @DPTR,A MOV A,41H MOV DPTR,#ROWHIGH MOVX @DPTR,A CLR C MOV A, 40H RLC A MOV 40H,A MOV A, 41H RLC A MOV 41H,A ;指向下一行 MOV R7,10 LCALL DELAY DJNZ R2, NEXTROW DJNZ R4, LOOP ;每个字要重复显示 INC R5 ;指向下个汉字 MOV A,R5 CJNE R5,#10, NEXTCHAR LJMP MAIN ; NEXTCHAR: LJMP LOOP0 DELAY: DJNZ R7, DELAY RET ;字模 每个16X16点阵汉字为: 8位X2X16 = 256位, 32字节 FONT: ;南 DB 008H, 040H, 014H, 041H, 004H, 041H, 004H, 041H DB 0F4H, 05FH, 004H, 041H, 004H, 041H, 0F4H, 05FH DB 044H, 044H, 024H, 048H, 0FEH, 07FH, 004H, 001H DB 000H, 001H, 0FEH, 0FFH, 004H, 001H, 000H, 001H ;京 DB 000H, 002H, 008H, 025H, 018H, 011H, 030H, 009H DB 040H, 009H, 000H, 001H, 0F0H, 01FH, 010H, 010H DB 010H, 010H, 010H, 010H, 0F8H, 01FH, 010H, 000H DB 0FEH, 0FFH, 004H, 001H, 000H, 001H, 000H, 002H ;伟 DB 040H, 010H, 040H, 010H, 048H, 010H, 054H, 010H DB 044H, 010H, 044H, 010H, 0FEH, 01FH, 044H, 010H DB 040H, 090H, 0FCH, 057H, 048H, 030H, 040H, 010H DB 0FEH, 017H, 044H, 008H, 040H, 008H, 040H, 008H45 ;福 DB DB DB DB ;实 DB DB DB DB ;业 DB DB DB DB ;有 DB DB DB DB ;限 DB DB DB DB ;公 DB DB DB DB ;司 DB DB DB DB END004H, 014H, 0FCH, 017H, 044H, 014H, 044H, 014H 0FCH, 017H, 044H, 014H, 044H, 094H, 0FEH, 057H 004H, 038H, 0F8H, 013H, 008H, 00AH, 008H, 0FAH 0F8H, 003H, 000H, 010H, 0FCH, 017H, 008H, 020H 004H, 060H, 00CH, 018H, 010H, 004H, 020H, 002H 040H, 001H, 000H, 001H, 0FEH, 0FFH, 084H, 004H 080H, 00CH, 080H, 010H, 080H, 002H, 084H, 086H 002H, 048H, 0FEH, 07FH, 000H, 001H, 000H, 002H 000H, 000H, 0FEH, 0FFH, 044H, 004H, 040H, 004H 040H, 004H, 060H, 014H, 050H, 014H, 050H, 014H 048H, 014H, 048H, 024H, 044H, 024H, 044H, 044H 040H, 004H, 040H, 004H, 040H, 004H, 040H, 004H 020H, 008H, 050H, 008H, 010H, 008H, 010H, 008H 0F0H, 00FH, 010H, 088H, 010H, 048H, 0F0H, 02FH 010H, 018H, 010H, 008H, 0F8H, 00FH, 010H, 004H 000H, 004H, 0FEH, 0FFH, 004H, 002H, 000H, 002H 000H, 041H, 084H, 041H, 04EH, 041H, 010H, 051H 020H, 069H, 050H, 045H, 088H, 045H, 004H, 045H 0F8H, 049H, 008H, 049H, 008H, 051H, 0F8H, 049H 008H, 049H, 008H, 045H, 0FCH, 07DH, 008H, 000H 000H, 000H, 010H, 000H, 0F0H, 01FH, 020H, 010H 040H, 008H, 000H, 004H, 000H, 002H, 004H, 0C2H 00EH, 021H, 010H, 011H, 020H, 008H, 040H, 008H 040H, 004H, 080H, 004H, 080H, 000H, 000H, 000H 010H, 000H, 028H, 000H, 088H, 020H, 088H, 03FH 088H, 020H, 088H, 020H, 088H, 020H, 088H, 020H 0C8H, 03FH, 088H, 000H, 008H, 000H, 0E8H, 0FFH 048H, 000H, 008H, 000H, 0FCH, 03FH, 008H, 000H46 第六章一、中断系统概念中断系统(一)什么是中断系统? 是指单片机中实现中断功能的相关硬件和软件的集合。 (二)什么是中断功能? 当CPU正在执行程序时,单片机的内部或外部发生了某一事件(如定时/计数器溢出, INT0、INT1引脚上电平突变等)请求CPU迅速去处理,于是CPU暂时中断当前的程序,转去 处理发生的事件(执行一段中断服务程序) ,处理完成后,再回到原来被中断的地方,继续 执行原来的程序,这一过程称为中断。 中断过程由中断系统自动完成。 (三)什么是中断源? 在中断系统中,把引起中断的设备或事件称为中断源。二、MCS-51 中断系统1.中断源 (1)内部中断源3个 T0:定时/计数器0中断,由T0加1计数溢出置TCON寄存器的TF0位为1,从而向CPU 申请中断。 T1:定时/计数器1中断,由T1加1计数溢出置TCON的寄存器的TF1位为1,从而向CPU 申请中断。 TI/RI:串行口发送(TXD)及接收(RXD)中断,串行口完成一帧字符发送/接收后 置SCON的TI/RI位为1,从而向CPU申请中断。 (2)外部中断源2个 外部中断0( INT 0 ):由P3.2端口接入,低电平或下降沿触发。 外部中断1( INT1 ):由P3.3端口接入,低电平或下降沿触发。 2.中断入口地址 CPU响应某个中断事件时,将会自动转入固定的地址执行中断服务程序,各个中断源 的中断入口地址见表6―1。表6―1 各中断源的入口地址中 断 源 外部中断0 定时/计数器0溢出中断 外部中断1 定时/计数器1溢出中断 串行口中断 中断入口地址 BH BH 0023HINT 0T0INT1T1 TI/RI3.中断标志与中断控制寄存器 (1)中断控制寄存器TCON47 字节地址为88H,可进行位寻址。其格式如下:TCOND7 (88H) TF1 D6 TR1 D5 TF0 D4 TR0 D3 IE1 D2 IT1 D1 IE0 D0 IT0TR1、TR0是T1、T0的启动控制位,置1启动,清0停止。 TF1、TF0是T1、T0的溢出标志位。 IT0、IT1为外部中断0、1的触发方式控制位,当设置为0时,电平触发方式(低电平有 效) ;当设置为1时,下降沿触发方式(后沿负跳变有效) 。 IE0、IE1为外部中断0、1请求标志位。 (2) 中断允许控制寄存器IE 字节地址为A8H,可进行位寻址。其格式如下:IED7 (A8H) EA D6 - D5 - D4 ES D3 ET1 D2 EX1 D1 ET0 D0 EX0EA:中断允许总控位。EA=0,所有中断源的中断请求均被关闭(禁止) ;EA=1则 所有中断源的中断请求均被开放(允许) 。 ES:串行口中断允许控制位。ES=1允许串行口中断;ES=0禁止串行口中断。 ET1:定时/计数器T1溢出中断允许控制位。ET1=1允许T1中断;ET1=0禁止T1中 断。 EX1:外部中断1允许控制位。EX1=1允许 INT1 中断;EX1=0禁止 INT1 中断。 ET0:定时/计数器T0溢出中断允许控制位。ET0=1允许T0中断;ET0=0禁止T0中 断。 EX0:外部中断 INT 0 允许控制位。EX0=1允许 INT 0 中断;EX0=0禁止 INT 0 中断。三、外部中断的应用(急救车与交通灯)(一)控制要求 本例模拟交通信号灯控制,一般情况下正常显示,有急救车到达时,两个方向交通信号 灯全红,以便让急救车通过。设急救车通过路口时间为 10 秒,急救车通过后,交通恢 复正常,用外部中断处理急救车通过事件。 南北向 东西向 红灯 绿灯 秒) 黄灯闪烁(9 次) (5 绿灯(5 秒) 黄灯闪烁(9 次) 红灯(二)硬件电路48 +5V+5V 1 0K K 12 INT0 P1. 1 GND P1. 2 3 o SG 4 70 Ω P1. 0 1 o SR 4 70 Ω2oSY4 70 ΩP1. 34oER4 70 Ω2 0P19 18P1. 4 XTAL1 XTAL2 P1. 55oEY4 70 Ω6oEG4 70 ΩGND 2 0P P1. 6 +5V 4 .7 u 9 P1. 7 RESET MCS-5 1 8 71kGND图 6-1(三)程序流程 开始外部中断入口开外中断 保护现场 初始状态东西 南北都是红灯东西,南北都亮红灯状态 1 南北绿 灯,东西红灯延时 10 秒状态 2 南北绿灯闪 转黄灯,东西红灯恢复现场状态 3 南北红 灯,东西绿灯中断返回状态 4 南北红灯, 东 西绿灯闪转黄灯49 (四)程序清单 FLASH STOP SR SY SG ER EY EG ORG LJMP ORG SETB RETI START: MOV MOV MOV SETB CLR CLR SETB CLR CLR CLR LOOP: JB SETB CLR CLR CLR CLR SETB MOV LCALL JB SETB CLR CLR CLR CLR50EQU 00H EQU 01H EQU P1.0 EQU P1.1 EQU P1.2 EQU P1.3 EQU P1.4 EQU P1.5 0000H START 0003H STOP; LED状态 ; 南北红灯 ; 南北黄灯 ; 南北绿灯 ; 东西红灯 ; 东西黄灯 ; 东西绿灯; 南北, 东西均红灯SP, #70H TCON, #01H IE, #81H SR SY SG ER EY EG STOP STOP, ALLRED SR SY SG ER EY EG A, #20 DELAY STOP, ALLRED SR SY SG ER EY ; 南北红灯, 东西黄灯闪 ; 南北红灯, 东西绿灯 ; DOWN EDGE IT0 ; ENABLE EA, EX0 ; 南北, 东西均红灯 CLR CLR MOV LOOP1: MOV MOV LCALL CPL DJNZ JB CLR CLR SETB SETB CLR CLR MOV LCALL JB CLR CLR CLR SETB CLR CLR CLR MOV LOOP2: MOV MOV LCALL CPL DJNZ LJMP ALLRED:SETB CLR CLR SETB CLR CLR CLR MOV LCALLEG C R7, #9 EY, C A, #1 DELAY C R7, LOOP1 STOP, ALLRED SR SY SG ER EY EG A, #20 DELAY STOP, ALLRED SR SY SG ER EY EG C R7, #9 SY, C A, #1 DELAY C R7, LOOP2 LOOP SR SY SG ER EY EG STOP A, #40 DELAY51; 南北绿灯, 东西红灯; 东西红灯, 南北黄灯闪 LJMPLOOPDELAY: ; 延时子程序 MOV MOV DELAYLOOP: JB DJNZ DJNZ DJNZ EXITDELAY: RET END R1, #80H R0, #0 STOP, EXITDELAY R0, DELAYLOOP R1, DELAYLOOP ACC, DELAY52 第七章定时/计数器本章介绍如何利用单片机内部的定时/计数器控制流水灯, 如何制作生产线上的产品计数 器。一、定时/计数的应用举例1.单片机流水灯控制电路+5V4 70 Ω L0214 70 Ω L7211 2 3 4 5 6 7 8P1. 0 P1. 1 P1. 2 P1. 3 P1. 4 P1. 5 P1. 6 P1. 7P0. 0 P0. 1 P0. 2 P0. 3 P0. 4 P0. 5 P0. 6 P0. 7 P2. 0 P2. 1 P2. 2 P2. 3 P2. 4 P2. 5 P2. 6 P2. 739 38 37 36 35 34 33 32 21 22 23 24 25 26 27 282 0P19 18XTAL1 XTAL2GND 2 0P +5V +4 .7 u 9RESETALE301k INT0 MCS-5 1 12GND图7-1(1)程序功能: P1 口接 8 个发光二极管,每隔 0.1 秒轮流点亮一个发光二极管。 (2)单片机如何实现定时控制? (1) 软件定时(前面已介绍) (2) 硬件定时(使用定时/计数器) 2.单片机产品计数器电路 P1 口外接 8 个发光二极管, 口输出高电平, P1 二极管亮 (此部分电路在图中省略) 。53 MCS-51(1)程序功能: T0 引脚接计数脉冲,P1 口接 8 个发光二极管,对计数值进行二进制显示。 (2)单片机如何实现计数控制? 使用定时/计数器。二、定时/计数器的基本知识1.8051 单片机内有 2 个定时/计数器,分别为 T0 和 T1。 2. T0和T1有两种功能:定时和计数。 (1)计数功能 启动后,对外部输入脉冲(负跳变)进行加1计数,T0的脉冲由P3.4输入,T1的 脉冲由P3.5输入。 计数器加满溢出时,将中断标志位TF0/TF1置1,向CPU申请中断。 计数脉冲个数= 溢出值―计数初值 (2)定时功能 启动后,开始定时,定时时间到,中断标志位TF0/TF1自动置1,向CPU申请中断。 定时功能也是以计数方式来工作的,此时是对单片机内部的脉冲进行加1计数, 此脉冲的周期正好等于机器周期。 定时时间=(溢出值― 计数初值)* 机器周期 3. T0 有四种工作方式,T1 有三种工作方式。 (1) 方式 0――13 位计数器方式 溢出值是:213=819254 (2) 方式 1――16 位计数器方式 溢出值是:216=65536 (3) 方式 2――8 位自动重装初值方式 溢出值是:28=256 (4) 方式 3――T0 分成两个独立的 8 位计数器方式 不讨论 思考:晶振频率分别为 6Mhz 和 12Mhz 时,方式 0~方式 2 的最长定时时间各为多少? 列成表格。 最长定时时间 方式 0 方式 1 方式 26Mhz12Mhz三、流水灯控制程序1.程序清单(设晶振频率为 6Mhz)OORG 0000H LJMP MAIN ORG 000BH LJMP T0INTORG 0100H MAIN:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB SETB SETB EA ET0 TR0 ;启动T1 ;装计数初值 ;开放T1中断 ;方式控制字MOV A,#0FEH MOV P1,A SJMP $ ;等待中断ORG 0200H T0INT:MOV TH1 ,#3CH MOV TL1,#0B0H RL A MOV P1,A RETI ;重装初值2.程序分析: (1) 定时/计数器的初始化编程55 ① 选择工作方式(TM0D) 以最长定时时间为依据,工作方式选择方式1,功能为定时功能。即: (TMOD)= B ② 计算计数初值 初值=溢出值-定时时间/机器周期 =216-0.1s/2us =1H ③ 开放中断(IE) EA=1,ET0=1 ④ 启动(TCON) TR0=1 (2)定时控制程序(中断服务程序) 描述定时时间到,要实现的控制功能。 T0 工作于重复定时状态,需要在溢出时重装初值。 3.修改程序功能: (1) 使灯的点亮方向与原来相反。 (2) 使发光二极管四个一组,轮流点亮,间隔时间 0.1 秒。 课堂练习: 1.设时钟频率为 6MHz,采用定时/计数器 T1 及其中断控制方式,通过 P1.7 输出周期为 20ms 的方波。编写程序。 P1.7四、产品计数器程序1.程序清单 ORG 0000H START: MOV P1, # 0FFH MOV TMOD, # 06H MOV TH1, # 00H MOV TL1, # 00H SETB TR1 LOOP: MOV A, TL1 CPL A MOV P1, A SJMP LOOP 2.程序分析: (1)计数功能的实现 (2)定时/计数器的初始化编程 ① 选择工作方式(TM0D)56 工作方式选择方式1,功能为计数功能。即: (TMOD)= B ② 计数初值取 0 ③ 启动(TCON) TR0=157 第八章A/D 转换电路在工业控制和智能化仪器仪表中,需要控制或测量如温度、压力、流量、速度等模拟量, 这些模拟量要先经传感器转换为与此对应的模拟电信号,计算机要处理这种信号,必须将模 拟量转换成数字量,这一转换称模数转换(A/D) 。 实现模数转换的电路称 A/D 转换器或 ADC。一、 A/D 转换芯片 0809(一)ADC0809 主要特性 ADC0809 为 8 路模拟量输入的芯片,转换电压为-5V~+5V,分辨率为 8 位,转换时间 为 100us,转换绝对误差为土 1LSB,单一+5V 供电, 28 脚 DIP 结构封装,功耗 15mw。 (二)ADC0809 的内部结构及管脚功能 ADC0809 是采用逐次逼近法的 8 位 A/D 转换芯片,其引脚和结构逻辑如图 8―21 所 示,它内部除 A/D 转换部分外,还带有锁存功能的八通道多路模拟开关和 8 位三态输出锁 存器。图 8―1 ADC0809 的内部结构及管脚功能图28 个管脚功能如下: (1)IN0~IN7:八个模拟量输入端,允许 8 路模拟量分时输入,共用一个 A/D 转换 器; (2)ADDA、ADDB、ADDC:通道端口选择线,ADDC 为高位,地址编码关系如下:地址编码 被选中的通道 C B A 000 001 IN0 IN158 010 011 100 101 110 111IN2 IN3 IN4 IN5 IN6 IN7(3)ALE:地址锁存允许,当 ALE 为上升沿时,可将地址选择信号 C、B、A 锁入地 址寄存器内。 (4)START:启动 A/D 转换,当 START 为上升沿时,开始 A/D 转换。 (5)EOC:转换结束信号,当 A/D 转换完毕之后,该端由低电平跳转为高电平, (6)OE:输出允许信号,高电平有效。此信号用以打开三态输出锁存器,将 A/D 转换 后的 8 位数字量输出至单片机的数据总线上。 (7)CLOCK:定时时钟输入端,最高允许频率为 640kHZ,转换一次最短时间为 100us。 (8) D7~D0:数字量输出端。 (9)VREF(+)和 VREF(-) :参考电压端,一般 VREF(+)= 5V, VREF(-)=0V。 (10) VCC、GND:+5V 电源及地。 下图为 ADC0809 的工作时序图。图 8-2ADC0809 的时序图8 ADC 0809 转换结果可依据下列公式计算: D = 255 * V i / VREF 公式中,V i 为模拟输入量,D 为十进制数字量输出。二、ADC0809 的应用(一)任务 ADC0809 的 IN0 通道接一电位器,提供模拟量输入,编制程序,将模拟量转换成二 进制数字量,用 8255A 的 PA 口输出到发光二极管显示。59 (二)电路图 8-3由上图芯片的 CS 端分析,ADC0809 的地址 8000H,8255A 的地址 9000H。 (三)程序 ORG MAIN: MOV MOV MOVX MOV MOV MOVX MOV DJNZ MOVX MOV DLY: MOV MOVX DJNZ LJMP END 0000H DPTR,#9003H A,#82H @DPTR,A DPTR, #8000H A, #0 @DPTR, A ; 起动 A/D A, #40H ACC, $ ; 延时 & 100US A, @DPTR ; 读入结果 R7,#100 DPTR,#9000H @DPTR,A R7,DLY ;延时 MAIN60 第九章D/A 转换接口计算机运算处理的结果(数字量)有时需要转换成为模拟量,以便操纵被控制对象,这 一过程即为数模转换(D/A) 。 实现数模转换的电路称为 D/A 转换器或 DAC。一、DAC0832 芯片(8 位)1.DAC0832 芯片的主要特性 每次输入数字为 8 位二进制数, 转换时间为 lus; 数据输入方式有直通、 单缓冲、 双缓冲; 单一电源供电+ 5V~+15V;输出电流线性度可在满量程下调节;功耗为 20mw。 2.DAC0832 的内部结构和引脚功能 DAC0832 内部由 1 个 8 位输入寄存器、1 个 8 位 DAC 寄存器和一个 8 位 D/A 转换器 组成。图 9-1DAC0832 的内部结构和引脚功能各引脚含义如下: ILE:数据锁存允许信号,高电平有效;CS :输入寄存器选择信号,低电平有效; W R :输入寄存器的写选通信号,低电平有效,由控制逻辑可以看出,片内输入寄存器 1的锁存信号输入锁存器状态随数据输入线状态变化,而 LE1 =0 时,则锁存输入数据; XFER:数据传送信号。低电平有效; XFER。 2 =1 LE W R2 : DAC 寄存器的写选通信号, DAC 寄存器的锁存信号 LE2= W R2 ? 时,DAC 寄存器的输出随输入状态变化,而 LE 2 =0 时,则锁存输入状态; D0~D7:数字量输入线;61 VREF:基准电压输入线,可在土 10V 范围的调节; RFB:反馈信号输入线,芯片内已有反馈电阻; Iout1 和 Iout2:电流输出线,Iout1 与 Iout2 的和为常数,Iout1 随 DAC 寄存器的内容线性变化, 在单极性输出时,Iout2 通常接地,在双极性输出时接运放,在 8031 应用时需外接运算放大器 使之成为电压型输出; VCC:工作电源线,一般为+5V~+15V; DGND:数字地; AGND:模拟信号地。二、单片机控制直流电机(一)电路D/A 变换电路 CS1 D/A 变换驱动 控制电压直流电机霍尔元件 CS0 8255 PB.0CS1图 9-2 图 9-2 中 DAC0832 的输出为双极性电路。 数字量 DATA 与输出电压 V0UT 的对应关系是: V0UT 国=(DATA-128)*Vref/128 单片机输出的数字量 DATA 范围 00H~FFH,DAC0832 输出电压 V0UT 范围―8V~ +8V。 DATA=00H~7FH,V0UT = ―8V~0V62 DATA=80H~FFH,V0UT = 0V~+8V (二)程序 ORG 0000H START: MOV DPTR, #9000H MOV A, #0FFH MOVX @DPTR, A LCALL DELAY LCALL READ MOV DPTR, #9000H MOV A, #0C0H MOVX @DPTR, A LCALL DELAY LCALL READ MOV DPTR, #9000H MOV A, #40H MOVX @DPTR, A LCALL DELAY LCALL READ MOV DPTR, #9000H MOV A, #00H MOVX @DPTR, A LCALL DELAY LCALL READ LJMP $ DELAY: MOV MOV MOV DDD: DJNZ DJNZ DJNZ RET READ: MOV CLR MOV MOV MOV MOV MOVX MOV R_0: MOVX R5,#10 R6,#0 R7,#0 R7,DDD R6,DDD R5,DDD; 等待电机运转稳定 ; 读取时间; 等待电机运转稳定; 电机反转 ; 等待电机运转稳定 ; 读取时间 ; 电机反转加速 ; 等待电机运转稳定TMOD, #01 TR0 TH0, #0 TL0, #0 DPTR, #8003H A,#82H @DPTR,A DPTR, #8001H A,@DPTR; 16 位计时;PB 作输入口63 R_1:R_2: R_3:JNB ACC.0, R_0 MOVX A,@DPTR JB ACC.1, R_1 SETB TR0 MOVX A,@DPTR JNB ACC.2, R_2 MOVX A,@DPTR JB ACC.3, R_3 CLR TR0 MOV 40H,TH0 MOV 41H,TL0 RET END; 等待低电平完 ; 等待高电平完; 等待低电平完 ; 等待高电平完;计算一个 T 周期的时间PB.0 T64 第十章一、单片机电子钟(一)电子钟原理键盘与显示器接口实时时钟是用单片机来模拟时钟,由定时/计数器产生 0.1S 的时基信号,每隔 0.1S 定 时器向 CPU 发出一次中断请求,CPU 响应中断后转入中断服务程序。中断服务程序以 0.1 秒、秒、分、时为单位对实时时钟进行计数。 (二)电子钟硬件系统图 10-1(三)电子钟软件系统系统程序包括以下几部分: (1)主程序(MAIN) :主要完成系统的初始化,及对显示器和键盘子程序的调用。 (2)键判断子程序(KEY) :判断有无键按下,并返回键值。 (3)处理子程序(ANKEY) :确定按键的位置,并进行处理。65 (4)显示子程序(DISP) :将显示缓冲区的数据送 LED 显示器显示。 (5)定时器中断服务程序(T10) :判断 1 秒到否?如到了,就修改时间。1.主程序清单: ORG 0000H AJMP MAIN ORG 000BH AJMP T10 ORG 0030H MAIN: MOV 20H,#00H MOV 21H,#00H MOV 22h,#00h MOV 23H,#00H MOV 25H,#00H MOV IP,#02HMOV IE,#82H MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 MOV SP,#40H NEXT: LCALL DISP LCALL KEY JZ NEXT LCALL ANKEY SJMP NEXT2.定时器中断服务程序清单:T10: PUSH ACC PUSH PSW MOV TL0,#0B4H MOV TH0,#3CH INC 20H MOV A,20H CJNE A,#0AH,RETI1 MOV 20H,#00H MOV A,21H ADD A,#01H DA A MOV 21H,A CJNE A,#60H,RETI1 MOV 21H,#00H MOV A,22H ADD A,#01H DA A MOV 22H,A CJNE A,#60H,RETI1 MOV 22H,#00H MOV A,23H ADD A,#01H DA A MOV 23H,A CJNE A,#24H,RETI1 MOV 23H,#00H RETI1: POP PSW POP ACC RETI66 二、键盘接口(一)键盘分类 分为独立式键盘和矩阵式键盘。图 10-2矩阵式键盘接口电路图 10-3 路独立式键盘接口电6767 (二)键盘处理程序的流程 键盘处理程序通常设计成子程序的形式。键盘子程序一般包括以下几个部分: (1)判断是否有键按下; (2)消除按键时产生的机械抖动; (3)扫描键盘,得到按下键的键值; (4)判别闭合的键是否释放; (5)执行键操作; (6)返回。图 10-4 波形图按键抖动因按键的机械触点的弹性作用,按键闭合或断开瞬间均伴随一连串抖动,波形如图 10-4 所示,抖动 时间一般为 5~10ms。消除抖动是为了防止产生误动作,保证对键闭合一次只作一次处理。消除抖动有 硬件消抖和软件消抖两种方法。 硬件可接 RS 触发器消抖, 软件消抖一般采用延时方法, 延时 10~20ms, 判别闭合键释放后再作输入处理。 (三)键盘处理的控制方式 CPU 必须每隔一定的时间对键盘进行一次处理(扫描) 。实现的方法主要有三种: 1. 程控扫描法 在程序中每隔一定的距离安排一次调用键盘处理子程序。 2. 定时扫描法 由定时器产生定时中断,CPU 响应中断后在定时中断服务程序中执行键盘处理程序。 3. 中断扫描法 当键盘上有键闭合时产生中断请求,CPU 在响应中断并执行中断服务程序时,进行键盘的处 理。 (四)电子钟(键盘处理程序) 1. 键盘接口电路 如图 10-1,键盘部分使用 4 位独立式键盘,直接使用单片机的 P3 口连接。4 位键盘功能设置 如下: (1)功能键:用于选择要修改的时、分、秒值的位置 (2)减 1、加 1 键:用于时间值的修改 (3)确认键:用于对修改操作的确认 2. 键判断子程序(KEY)6868 KEY: MOV P3,#0FFH MOV A,P3 CPL A ANL A,#0FH JZ RETX LCALL DISP LCALL DISP MOV A,P3 CPL A ANL A,#0FHJZ RETX MOV R6,A LOOP2: LCALL DISP MOV A,P3 CPL A ANL A,#0FH JNZ LOOP2 MOV A,R6 RETX: RET3. 键处理子程序(ANKEY) ANKEY: CLR EA LX: MOV A,R6 JB ACC.0,L1 JB ACC.1,L2 JB ACC.2,L3 JNB ACC.3,L12 JB 2BH.4,L6 JB 2DH.4,L8 JB 2FH.4,L9 L12: LCALL DISP LCALL DISP LCALL KEY JZ L12 LJMP LX L2: MOV 25H,#00H CLR 2BH.4 CLR 2DH.4 CLR 2FH.4 SETB EA RET L3: JB 2BH.4,L61 JB 2DH.4,L81 JB 2FH.4,L91 AJMP L12 L1: MOV A,25H JZ LB1 JB ACC.0,LB2 JB ACC.1,LB3 JNB ACC.2,L12 LB1: MOV 25H,#01H SETB 2BH.4 CLR 2DH.4 CLR 2FH.4 AJMP L12 LB3: MOV 25H,#04H SETB 2FH.4 CLR 2DH.4 CLR 2BH.4 AJMP L12 LB2: MOV 25H,#02H SETB 2DH.4 CLR 2BH.4 CLR 2FH.4 AJMP L12 L61: AJMP L611 L81: AJMP L811 L91: AJMP L911 L6: MOV A,23H ADD A,#01H DA A MOV 23H,A CJNE A,#24H,L15 L15: JC L112 MOV 23H,#00H L112: AJMP L12 L8: MOV A,22H ADD A,#01H DA A MOV 22H,A CJNE A,#60H,L16 L16: JC L112 MOV 22H,#00H6969 AJMP L12 L9: MOV A,21H ADD A,#01H DA A MOV 21H,A CJNE A,#60H,L17 L17: JC L112 MOV 21H,#00H AJMP L12 L611: MOV A,23H ADD A,#99H DA A MOV 23H,A CJNE A,#99H,L112 MOV 23H,#23H AJMP L12 L811: MOV A,22H ADD A,#99H DA A MOV 22H,A CJNE A,#99H,L112 MOV 22H,#59H AJMP L12 L911: MOV A,21H ADD A,#99H DA A MOV 21H, A CJNE A, #99H, L112 MOV 21H, #59H AJMP L12三、显示器接口单片机在测控应用领域中,需要对现场信息及控制参数进行显示。最常用的显示器有发光二极管显 示器(LED)和液晶显示器(LCD) 。下面主要介绍 LED 数码显示器及其接口电路。 (一)LED 显示器原理 LED 数码管由 8 个发光二极管组成,其中 7 个按D8‖型排列,另一个发光二极管为圆点形状,位于右 下角,常用于显示小数点。 1.按结构分类 (1)共阳极 LED 把 8 个发光二极管的阳极连在一起,叫共阳极接法,用低电平驱动。 (2)共阴极 LED 把 8 个发光二极管的阴极连在一起,叫共阴极接法,用高电平驱动。70 图 10-5 70 LED 显示器笔画排列 2.字形代码 当发光二极管导通时,相应的一段笔划或点就发亮,从而形成不同的发光字符。 加在每段上的电压可以用数字量表示,此 8 位数字量称为字形代码,又称段选码。 数字量的位与段符号的对应关系如下:数字量 段符号 D7 dp D6 g D5 f D4 e D3 d D2 c D1 b D0 a段选码与显示字符的对应关系如表 10―1 所示。同一个字符的共阴极接法和共阳极接法的段选码具 有互为反码的关系。表 10―1段选码 字符 (共阳) 0 1 2 3 4 5 6 7 8 9 C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H (共阴) 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH A B C D E F P y 暗 字符 (共阳) 88H 83H C6H A1H 86H 8EH 8CH 91H BFH FFH (共阴) 77H 7CH 39H 5EH 79H 71H 73H 6EH 40H 00H常用字形码表段选码3. LED 显示器的显示方式 多位 LED 显示器同时工作时,显示方式分为静态显示和动态显示两种方式。 (1) 静态显示 静态显示时,多位 LED 同时点亮。每段 LED 流过恒定的电流,段驱动电流约为 6~10mA。 (2) 动态显示 显示器逐个循环点亮。适当选择扫描速度,利用人眼的D视觉暂留‖作用,使得看上去所有数码管是 同时点亮的,并不察觉有闪烁现象(一般导通时间取 lms 左右) 。亮度为静态显示亮度的 1/N 倍,N 为显 示器位数。 (二)电子钟(显示器接口) 1.显示接口电路: 如图 10-1 所示,用 AT89C51 的 P0 口和 P2 口作为段码和位码输出口,并由两片 ULN2003 作为每个 端口的反相驱动。 2. 显示子程序 DISP 显示器用于显示时、分、秒值(从左到右) ,每个计时单位用两位,片内RAM设置显示缓冲区,6 个单元与显示器的对应关系如下:7171 LED5 2AH 时LDE4 2

我要回帖

更多关于 单片机原理与应用答案 的文章

 

随机推荐