第一章 计算机基础知识
本章简要阐述计算机中最基本的数学知识。本章的内容是必要的入门知识,是以后各章的基础。
第一节 数制与编码
数制是人们利用符号来计数的科学方法。数制有很多种,但在计算机的使用上常使用的则为十进制、二进制和十六进制。
一、数制的基与权
数制所使用的数码的个数称为基,数制每一位所具有的值称为权。
1、十进制
十进制的基为“十”,即它所使用的数码为0到9共十个数字。
十进制中,每个(位)数字的值都是以该个(位)数字乘以基数的幂次来表示,通常将基数的幂次称为权,即以10为底的0幂、1幂、2幂等。
2、二进制
二进制的基为“二”,即其使用的数码为0、1,共二个。二进制各位的权是以2为底的
幂。
3、十六进制
十六进制的基为“十六”,即其数码共有16个:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A~F相当于十进制数的10~15。十六进制的权是以16为底的幂。
4、二一十进制
二一十进制数称为二进制编码的十进制数(Binary Coded Decimal),简称BCD码。在BCD码中是用四位二进制数给0一9这十个数字编码。
注意:为了区别以上四种数制,在数的后面加写英文字母来区别,B、D、H、BCD分别表示为二进制数、十进制数、十六进制数、二一十进制数,通常对十进制可不加标志。同时若十六进制数如是字母打头,则前面需加一个0。
二、数制的转换
1、二、十六进制转换成十进制数
只需将二、十六进制数按权展开后相加即可。
2、十进制数转换成二、十六进制数
基本方法为:除基取余。
例:试求十进制数45678所对应的十六进制数。
3、二、十六进制数相互转换
基本方法为:1位十六进制数转换为4位二进制数。
4、BCD码与十进制的相互转换
按照BCD的十位编码与十进制的关系,进行转换。
三、计算机中常用的编码
1、 BCD码
BCD码(十进制数的二进制编码)是一种具有十进制权的二进制编码,即它是一种既能为计算机所接受,又基本上符合人们的十进制数运算习惯的二进制编码。
BCD码的种类较多,常用的有8421码、2421码、余3码和格雷码等,其中最为常用的是8421 BCD编码。因十进制数有10个不同的数码0~9,必须要有4位二进制数来表示,而4位二进制数可以有16种状态,因此取4位二进制数顺序编码的前10种,即0000B-1001B为8421码的基本代码,1010B~1111B未被使用,称为非法码或冗余码。8421 BCD编码表如表所示。
2、ASCII编码
ASCII码诞生于1963年,是一种比较完整的字符编码,现已成为国际通用的标准编码,已广泛用于微型计算机与外设的通信。
ASCII码是“美国信息交换标准代码”的简称。它是用七位二进制数码来表示的,七位二进制数码共有128种组合状态,包括图形字符96个和控制字符32个。96个图形字符包括十进制数字符10个、大小写英文字母52个和其他字符34个,这类字符有特定形状,可以显示在CRT上和打印在打印纸上。32个控制字符包括回车符、换行符、退格符、设备控制符和信息分隔符等,这类字符没有特定形状,字符本身不能在CRT上显示和打印机上打印。ASCII编码如表所示。
第二节 存储器
存储器是计算机的主要组成部分。其功能是存放程序和数据。这些程序和数据在存储器中是以二进制代码表示的。
一、名词介绍
1、存储单元和存储单元地址
存储器是由大量寄存器组成的,其中每一个寄存器就称为一个存储单元。它可存放一个有独立意义的二进制代码,称为一个字(Word),一个字由若干位(Bit)组成,代码的位数称为字长。在计算机中把一个8位的二进制代码称为一个字节(Byte)。对一个8位二进制代码的最低位称为第0位(位0),最高位称为第7位(位7)。
在计算机的存储器中有很多存储单元。为了使存入和取出时不发生混淆,必须给每个存储单元一个唯一的固定编号,这个编号就称为存储单元的地址。因为存储单元数量很大,为了减少存储器向外引出的地址线,在存储器内部都带有译码器。根据二进制编码译码的原理,除地线公用之外,n根导线可译成2"个地址号。
2、存储器速度和存储器容量
存储器速度和存储器容量是存储器的两个主要技术指标。存储器速度是指读或写一条信息所需的时间,它是影响计算机速度的主要因素之一。存储器的容量是指最多能够存储多少个单位信息,二进制信息单位多用字节表示。在计算机中,通常把1024字节称为1K字节,1024K称为1M(兆)。
二、存储器的分类
存储器的分类方法较多,例如从其组成材料和单元电路类型上可分为磁芯存储器、半导体存储器、电荷耦合存储器等,从其与微处理器的关系来划分,又可分为内存和外存。
直接同微处理器进行信息交换的存储器称内存。其特点是存取速度快,但容量有限。通过内存间接与CPU进行信息交换的存储器称为外存,其特点是容量大、速度较慢,外存的内容根据需要可随时调入内存。
1、只读存储器ROM
只读存储器即在使用时只能读出而不能写入,断电后ROM中的信息不会丢失。因此一般用来存放一些固定程序,如监控程序、子程序、字库及数据表等。
2、随机存储器RAM
这种存储器又叫读写存储器,它不仅能读取存放在存储单元中的数据,还能随时写入新的数据。断电后RAM中的信息全部丢失,因此RAM常用于存放经常要改变的程序或中间计算结果等。
三、只读存储器类型
ROM按存储信息的方法又可分为四种。下面逐一进行介绍。
(1)掩膜ROM
掩膜ROM也称固定ROM,它是由厂家编好程序写入ROM(称固化)供用户使用,用户不能更改它。掩膜ROM只能应用于有固定程序且批量很大的产品中。
(2)可编程序的只读存储器PROM
它在出厂时不写入信息,它的内容由用户根据自己所编程序一次性写入,一旦写入,只能读出,而不能再进行更改。
(3)可改写的只读存储器EPROM
用户可将程序写入EPROM。如果要改写程序,可用紫外线进行擦除,然后重新写人新程序。一片EPROM芯片,可反复多次被擦除和写人。
(4)可电改写只读存储器E2 PROM
E2 PROM可用电的方法完成写入和清除其内容的功能,其编程电压和清除电压均与微机CPU的5V工作电压相同,不需另加电压,它既有RAM读写操作简便,又有数据不会因掉电而丢失的优点,因而使用极为方便。加之E2 PROM保存的数据至少可达10年以上,每块芯片可擦写1万次以上。
第二章 单片机概述
第一节 单片机的概念
一、单片机的概念
通常所说的微机是指由CPU、存储器、I/O接口电路等各种大型集成电路芯片组装在一块或者由几块印制电路板组装而成的机器。
其中,用几块印制电路板组装成的微机则称之为多板微机或多板机,如现在广泛使用的台式或笔记本式PC微机都是这种结构。
随着大型集成电路技术的不断进步,20世纪80年代开发出了能在一个芯片上集成CPU、存储器、I/O接口等电子电路的超微型计算机,这种单个芯片式的微型计算机就被命名为单片微型计算机。
由于单片机在应用时通常是处于被控系统的核心地位并融入其中,即以嵌入的方式进行使用,为了强调其“嵌入”的特点,也常常将单片机称为嵌入式微控制器EMCU。
二、通用单片机和专用单片机
根据控制应用的需要,可以将单片机分成为通用型和专用型两种类型。
通用型单片机是一种基本芯片,它的内部资源比较丰富,性能全面且适用性强,能覆盖多种应用需求。用户可以根据需要设计成各种不同应用的控制系统,即通用单片机有一个再设计的过程。
专用单片机芯片是针对一种产品或一种控制应用而专门设计的,设计时已经对系统结构的最简化、软硬件资源利用的最优化、可靠性和成本的最佳化等方面都作了通盘的考虑和论证,所以专用单片机具有十分明显的综合优势。例如电度表和IC卡读写器上的单片机等。
三、单片机与单片机系统
单片机通常是指芯片本身。
单片机系统则是在单片机芯片的基础上扩展其它电路或芯片构成的具有一定应用功能的计算机系统。在单片机系统中,单片机处于核心地位,是构成单片机系统的硬件和软件基础。
四、单片机应用系统与单片机开发系统
单片机应用系统是为控制应用而设计的,该系统与控制对象结合在一起使用,是单片机开发应用的成果。
单片机开发系统是单片机应用系统开发调试的工具。主要有:
逻辑分析仪:只能用于简单的单片机系统;
微型计算机:用于复杂的单片机系统;
在线仿真器:进行单片机应用系统的软硬件开发和EPROM写入。
五、单片机的程序设计语言和软件
机器语言是用二进制代码表示的单片机指令,用机器语言构成的程序称之为目标程序。
汇编语言是用符号表示的指令,汇编语言是对机器语言的改进,是单片机最常用的程序设计语言。
注意:这两种语言均与单片机硬件关系密切,这就要求程序设计人员必须精通单片机的硬件系统和指令系统。
高级语言:编译型语言有PL/M51、C-51、C、MBASIC-51等;
解释型的有MBASIC和MBASIC-52等。
第二节 单片机的发展
一、单片机的历史及发展概况
根据单片机发展过程中各个阶段的特点,其发展历史大概可划分为以下四个阶段:
第一阶段(1974~1976):单片机的初级阶段。因工艺限制,单片机采用双片的形式,而且功能简单。
第二阶段(1976一1978):低性能单片机阶段。以Intel公司制造的MCS-48系列单片机为代表
第三阶段(1978一现在):高性能单片机阶段。这个阶段推出的单片机普遍带有串行I/O口,多级中断处理系统,16位定时器/计数器,片内ROM、RAM容量加大,且寻址范围可达64K字节,有的还内置有A/D转换器。这类单片机的代表是Intel公司的MCS-51系列,Motorola公司的6810和Zilog公司的Z8等。
第四阶段(1982一现在):8位单片机的巩固发展以及16位单片机、32位单片机推出阶段。此阶段的主要特征是一方面发展16位单片机、32位单片机及专用型单片机;另一方面不断完善高档8位单片机,改善其结构,以满足不同用户的需要。16位单片机的典型产品如Intel公司生产的MCS-96系列单片机。而32位单片机除了具有更高的集成度外,其振荡频率已达20MHz或更高,这使32位单片机的数据处理速度比16位单片机快许多,性能同8位、16位单片机相比,具有更大的优越性。
计算机厂家已投放市场的产品就有70多个系列,500多个品种。单片机的产品已占整个微机(包括一般的微处理器)产品的80%以上,其中8位单片机的产量又占整个单片机的产量的60%以上,因此可以看出,8位单片机在最近若干年里,在工业检测、控制应用的上将继续占有一定的市场份额。
二、单片机的特点及应用领域
1、单片机的特点:
(1)小巧灵活、成本低、易于产品化。能组装成各种智能式测控设备及智能仪器仪表。
(2)可靠性好,应用范围广。单片机芯片本身是按工业测控环境要求设计的,抗干扰性强,能适应各种恶劣的环境,这是其他机种无法比拟的。
(3)易扩展,很容易构成各种规模的应用系统,控制功能强。单片机的逻辑控制功能很强,指令系统有各种控制功能指令,可以对逻辑功能比较复杂的系统进行控制。
(4)具有通讯功能,可以很方便地实现多机和分布式控制,形成控制网络和远程控制。
2、 单片机的应用
(1)工业方面:各种测控系统。数据采集系统,工业机器人,智能化仪器,机、电一体化产品。
(2)智能仪器仪表方面。
(3)通讯方面:调制解调器、程控交换技术等。
(4)消费产品方面:电动玩具、录像机、激光唱机。
(5)导弹与控制方面:导弹控制、鱼雷制导控制、智能武器装备、飞机导航系统。
(6)计算机外部设备及电器方面:打印机、硬盘驱动器、彩色与黑白复印机、磁带机等。
(7)多机分布式系统:可用单片机构成分布式测控系统,它使单片机应用进入了一个全新的阶段。
第三章 单片机芯片的硬件结构
第一节 MCS-51 单片机的逻辑结构及信号引脚
一、MCS-51 单片机的结构框图
二、MCS-51单片机的逻辑结构
1、中央处理器(CPU)
中央处理器简称CPU,是单片机的核心,完成运算和控制操作。按其功能,中央处理器包括运算器和控制器两部分电路。
1)、运算器电路
功能:单片机的运算部件,用于实现算术和逻辑运算。
2)、控制器电路
功能:单片机的指挥控制部件,保证单片机各部分能自动而协调地工作。
2、内部数据存储器
组成:RAM(128×8)和RAM地址寄存器等。
功能:用于存放可读写的数据。
3、内部程序存储器
组成:ROM(4K×8))和程序地址寄存器等。
功能:用于存放程序和原始数据。
4、定时器/计数器
80C51共有两个16位的定时器/计数器。
功能:实现定时或计数功能,并以其定时或计数结果对单片机进行控制,以满足控制应用的需要。
5、并行I/O口
MCS-51共有4个8位的I/O口(P0、P1、P2、P3)
功能:实现数据的并行输入输出。
6、串行口
MCS- 51单片机有一个全双工的串行口。
功能;以实现单片机和其它数据设备之间的串行数据传送。
7、中断控制系统
80C51共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。全部中断分为高级和低级共两个优先级别。
8、时钟电路
MCS- 51芯片的内部有时钟电路,但石英晶体和微调电容需外接。
功能:时钟电路为单片机产生时钟脉冲序列。
典型的晶振频率:6MHz、11.0592MHz、12MHz。
9、位处理器
位处理器称为布尔处理器。
功能:以状态寄存器中的进位标志位C为累加位,可进行各种位操作。
10、总线
总线:连接计算机各部件的一组公共信号线。
分类:地址总线、数据总线和控制总线。
作用:减少了单片机的连线和引脚,提高了集成度和可靠性。
三、MCS-51的信号引脚
80C51是标准的40引脚双列直插式集成电路芯片,引脚排列如图所示。
1.信号引脚介绍
·输入/输出口线
P0.0~P0.7 P0口8位双向口线
P1.0~P1.7 P1口8位双向口线
P2.0~P2.7 P2口8位双向口线
P3.0~P3.7 P3口8位双向口线
·ALE 地址锁存控制信号
功能:a)在系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。如图所示。
b)ALE是以六分之一晶振频率的固定频率输出的正脉冲,可作为外部时钟或外部定时脉冲使用。
·/PSEN 外部程序存储器读选通信号
在读外部ROM时/PSEN有效(低电平),以实观外部ROM单元的读操作。
·/EA 访问程序存储器控制信号
当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;
当/EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。
·RST 复位信号
当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。
·XTAL1和XTAL2外接晶体引线端
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;
当使用外部时钟时,用于接外部时钟脉冲信号。
·VSS 地线
·Vcc+5V电源
2、信号引脚的第二功能
“复用”即给一些信号引脚赋予双重功能。第二功能信号定义主要集中在P3口线中,另外再加上几个其它信号线。
1、常见的第二功能信号
·P3口线的第二功能
P3口8条口线都定义有第二功能,如表所示。
·EPROM存储器程序固化所需要的信号
编程脉冲:30脚(ALE/PROG)
编程电压(25V):31脚(/EA/Vpp)
·备用电源引入
备用电源是通过9脚(RST/VPD)引入的。当电源发生故障,电压降低到下限值时,备用电源经此端向内部RAM提供电压,以保护内部RAM中的信息不丢失。
说明:
a)第一功能信号与第二功能信号是单片机在不同工作方式下的信号,因此不会发生使用上的矛盾。
b)P3口线先按需要优先选用它的第二功能,剩下不用的才作为I/O口线使用。
第二节 MCS-51 内部存储器
一、 内部数据存储器低128 单元
划分为三个区:
1、 寄存器区
地址范围:4组通用寄存器占据内部RAM的00H~1FH单元地址。每组8个,依次为R0~R7。
使用方法:一种是以寄存器的形式使用,用寄存器符号表示;另一种是以存储单元的形式使用,以单元地址表示。
说明:任一时刻,CPU使用其中的一组寄存器,并且把正在使用的那组寄存器称之为当前寄存器。由程序状态字寄存器PSW中RSl、RS0位的状态组合来决定使用那一组。
2、位寻址区
地址范围:内部RAM的20H~2FH单元,共有16个RAM单元,总计128位,位地址为00H~7FH。位寻址区的位地址表如表所示。
操作方法:字节操作和位操作。
使用方式:一种是以位地址的形式;另一种足以存储单元地址加位的形式表示。
3、用户RAM区
地址范围:内部RAM区单元地址为30H-7FH,共80个单元。
使用方法:只能以存储单元的形式来使用。但一般常把堆栈开辟在此区中。
二、内部数据存储器高128 单元
又称之为专用寄存器区,其单元地址为80H-FFH,用于存放相应功能部件的控制命令、状态或数据。因这些寄存器的功能已作专门规定,故而称为专用寄存器(SFR),有时也称为特殊功能寄存器。MCS-51中80C51的专用寄存器共有22个,其中可寻址的为21个。
1、专用寄存器简介
现把22个专用寄存器中的5个介绍如下,其余的将在以后章节中陆续说明。
1)、程序计数器PC
PC是一个16位的计数器。其内容为将要执行的指令地址,寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,因此用户无法对它进行读写。但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。
2)、累加器A(或ACC)
累加器为8位寄存器,是程序中最常用的专用寄存器,功能较多,地位重要。
3、B寄存器
B寄存器是一个8位寄存器,主要用于乘除运算,也可作为一般数据寄存器使用。
4、程序状态字(PSW Program Status Word)
程序状态字是一个8位寄存器,用于寄存指令执行的状态信息。其中有些位状态是根据指令执行结果,由硬件自动设置的,而有些位状态则是使用软件方法设定的。PSW的位状态可以用专门指令进行测试,也可以用指令读出。PSW的各位定义知下:
除PSW.1位保留未用外,对其余各位的定义及使用介绍如下:
·CY或C、PWS.7进位/借位标志位
功能:a)存放算术运算的进位/借位标志;
b)在位操作中,作累加位使用。
·AC(PSW. 6) 辅助进位标志位
功能:a)在加减运算中,当有低4位向高4位进位或借位时,AC由硬件置位,否则AC 位被清“0”。
b)在进行十进制数运算时需要十进制调整,此时要用到AC位状态进行判断。
·F0(PSW. 5) 用户标志位
一个由用户定义使用的标志位,用户根据需要用软件方法置位或复位。
·RS1和RS0(PSW.4和PSW.3) 寄存器组选择位
用于设定当前通用寄存器的组号。通用寄存器共有4组,其对应关系如下表:
这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。
·OV(PSW. 2) 溢出标志位
在带符号数的加减运算中,OV=1表示加减运算结果超出了累加器A所能表示的符号数有效范围(-128~+127),即产生了溢出,因此运算结果是错误的;反之,OV=0表示运算正确,即无溢出产生。
在乘法运算中,0V=1表示乘积超过255,即乘积分别在B与A中;反之,OV=0,表示乘积只在A中。
在除法运算中,0V=1表示除数为0,除法不能进行;反之,OV=0,除数不为0,除法可正常进行。
·P(PSW.0) 奇偶标志位
表明累加器A中1的个数的奇偶性,在每个指令周期由硬件根据A的内容对P位进行里位或复位。若1的个数为偶数,P=0;若1的个数为奇数,P=1。
5.数据指针(DPTR)
数据指针为16位寄存器,它是MCS- 51中唯一一个供用户使用的16位寄存器。
DPTR可以分为两个8位寄存器使用,即:
DPH DPTR高位字节
DPL DPTR低位字节
DPTR在访问外部数据存储器时作地址指针使用,在变址寻址方式中,用DPTR作基址寄存器,用于对程序存储器的访问。
说明:
a)在22个专用寄存器中,唯一一个不可寻址的专用寄存器就是程序计数器(PC)。
b)对专用寄存器只能使用直接寻址方式,在指令中既可使用寄存器符号表示,也可使用寄存器地址表示。
c)在21个可寻址的专用寄存器中,有11个寄存器是可以位寻址的。
专用寄存器如表所示。
三、MCS-51 的堆栈操作
堆栈是一种数据结构。数据写入堆栈称为入栈(PUSH)。数据从堆栈中读出称之出栈(POP)。
数据操作规则:“后进先出”LIFO。即先入栈的数据由于存放在栈的底部,因此后出栈;而后入栈的数据存放在栈的顶部,因此先出栈。
1、堆栈的功用
堆栈主要是为子程序调用和中断操作而设立的。其具体功能有两个:保护断点和保护现场。
2、堆栈的开辟
堆栈只能开辟在芯片的内部数据存储器中,即所谓的内堆栈形式。
3、堆栈指示器
堆栈指示器SP(Stack Pointer)的内容是堆栈栈顶的存储单元地址。SP是一个8位寄存器。
说明:系统复位后,SP的内容为07H,但由于堆栈最好在内部RAM的30H~7FH单元中开辟,所以在程序设计时应注意把SP值初始化为30H以后。
4、堆栈使用方式
堆栈的使用有两种方式。
自动方式:即在调用子程序或中断时,返回地址(断点)自动进栈。程序返回时,断点再自动弹回PC。
指令方式:即使用专用的堆栈操作指令,进行进出栈操作。其进栈指令为PUSH,出栈指令为POP。例如保护现场就是指令方式进行操作
四、内部程序存储器
80C51芯片内有4KROM存储单元,其地址为0000H~0FFFH。
0000H~0002H 系统的启动单元
0003H~000AH 外部中断0中断地址区
000BH~0012H 定时器/计数器0中断地址区
0013H~001AH 外部中断1中断地址区
001BH~0022H 定时器/计数器1中断地址区
0023H~002AH 串行中断地址区
中断响应后,系统能按中断种类,自动转到各中断区的首地址去执行程序。
由于各地址区容量有限,因此一般在第一个单元放置一条无条件转移指令以转移到程序实际存放位置。
第三节 MCS - 51 并行 1/O 端口
MCS - 51单片机具有4个8位准双向并行端口(P0~P3),共32根1/O口线。每一根1/O口线都能独立地用作输入或输出。这4个端口是单片机与外部设备进行信息(数据、地址、控制信号)交换的输人或输出通道。
1、 P0口
功能:
a) 作为通用输入/输出口;
b) 地址线/数据线分时复用。
在扩展系统中,低8位地址线与数据线分时使用PO口。PO口先输出片外存储器的低8位地址并锁存到地址锁存器中,然后再输出或输入数据。
2、P1口
功能:作为通用输人/输出口使用。
3、P2口
功能:
a)通用输人/输出口使用;
b)作为高8位地址总线口使用。
在扩展系统中,其作为扩展系统的高8位地址总线,与P0口低8位地址线一起组成16位地址总线。
3、P3口
功能:
a) 作为通用输人/输出口使用;
b)涉及串行口、外部中断、定时器的工作(第二功能)。
第四节 MCS-51 单片机时钟电路与时序
时钟电路用于产生单片机工作所需要的时钟信号。
1、时钟信号的产生
在MCS- 51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。如图所示。
电路中的电容一般取30pF左右,而晶体的振荡频率范围通常是1.2MHz~12MHz。
2、引入外部脉冲信号
在由多片单片机组成的系统中,为了各单片机之间时钟信号的同步,引入唯一的外部脉冲信号作为各单片机的振荡脉冲。这时外部的脉冲信号是经XTAL2引脚注入,其连接如图2.13所示。
二、时序定时单位
MCS- 51时序的定时单位共有4个,从小到大依次是:拍节、状态、机器周期和指令周期。下面分别加以说明。
1、拍节与状态
振荡脉冲的周期定义为拍节(用“P”表示)。
两个拍节定义为状态(用“S”表示)。
2、机器周期
6个状态为一个机器周期。
3、指令周期
执行一条指令所需要的时间称之为指令周期。MCS- 51的指令周期根据指令的不同,可包含有1、2、3或4个机器周期。
第五节 单片机的复位工作方式
一、复位操作
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除PC之外,复位操作还对其它一些专用寄存器有影响,它们的复位状态如表所示:
PC 0000H TCON 00H
ACC 00H TL0 00H
PSW 00H TH0 00H
SP 07H TL1 00H
DPTR 0000H TH1 00H
P0~P3 0FFH SCON 00H
IP XX000000B SBUF 不定
IE 0X000000B PCON 0XXX0000B
TMOD 00H
二、复位信号
RST引脚是复位信号的输入端,复位信号是高电平有效,其有效时间应持续2个机器周期以上。
三、复位方式
复位操作有上电自动复位和按健手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。电路如图2. 17 (a)
按健手动复位有电平方式和脉冲方式两种。其中按健电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图2. 17 (b)所示。而按健脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路如图20.17(c)所示。
第四章 MCS 一 51 单片机的指令系统
第一节 指令系统概述
指令是CPU控制计算机进行某种操作的命令。
指令系统则是全部指令的集合。
一、指令的概念
1、汇编语言指令
定义:用助记符来表示的指令。
特点:不能被计算机硬件直接识别和执行,必须通过某种手段(汇编)把它变成机器码指令才能被机器执行。由于其和机器语言指令一一对应,因此编写的程序效率高,占用存储空间小,运行速度快,能编写出最优化的程序。
2、汇编语言的语句格式
MCS- 51汇编语言的语句格式表示知下:
〔<标号>〕:<操作码>〔<操作数>〕;〔<注释>〕
1)、标号
标号是语句地址的标志符号,有关标号的规定如下:
标号是由1-8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
不能使用本汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
同一标号在一个程序中只能定义一次,不能重复定义。
标号的有无取决于本程序中的其它语句是否需要访问这条语句。
2)、操作码
操作码用于规定语句执行的操作内容,操作码是以指令助记符或伪指令助记符表示的,操作码是汇编指令格式中唯一不能空缺的部分。
3)、操作数
操作数用于给指令的操作提供数据或地址。
4)、注释
注释不属于语句的功能部分,它只是对语句的解释说明。
5)、分界符(分隔符)
分界符用于把语句格式中的各部分隔开,以便于区分,包括空格、冒号、分号或逗号等多种符号。
冒号(:)用于标号之后
空格( )用于操作码和操作数之间
逗号(,)用于操作数之间
分号(;)用于注释之前
3、指令的长度
在MCS-51指令系统中,有一字节、二字节和三字节等不同长度的指令。
二、MCS-51单片机的寻址方式
寻址:如何指定操作数或其所在单元。
根据指定方法的不同,MCS- 51单片机共有7种寻址方式。
1、寄存器寻址方式
定义:操作数在寄存器中。
寻址范围:
·通用寄存器,共有4组共32个通用寄存器。
·部分专用寄存器。例如累加器A、AB寄存器对以及数据指针DPTR等。
2、直接寻址方式
定义:指令中操作数直接以单元地址的形式给出。
寻址范围:
·低128单元。在指令中直接以单元地址形式给出。
·专用寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
3、寄存器间接寻址方式
定义:寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的。
注意:在寄存器间接寻址方式中,应在寄存器的名称前面加前缓标志“@”。
寻址范围:
·内部RAM低128单元
只能使用R0或R1作间址寄存器(地址指针),其通用形式为@Ri(i=0或1)。
·外部RAM 64 KB
只能使用DPTR作间址寄存器,其形式为@DPTR。
·外部RAM的低256单元
间址寄存器为DPTR、R0、R1,
·堆找操作指令(PUSH和POP)
即以堆找指针(SP)作间址寄存器的间接寻址方式。
4、立即寻址方式
定义:操作数在指令中直接给出。
5、变址寻址方式
定义:以DPTR或PC作基址寄存器,以累加器A作变址寄存器,并以两者内容相加形成的16位地址作为操作数地址。
说明:
·变址寻址方式只能对程序存储器进行寻址,寻址范围可达64 KB.
·变址寻址的指令只有3条:
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
6、位寻址方式
寻址范围:
·内部RAM中的位寻址区,单元地址为20H~2FH,共16个单元128位,位地址是00H~7FH。两种表示方法:一种是位地址;另一种是单元地址加位。
·专用寄存器的可寻址位
4种表示方法:
直接使用位地址。例如PSW寄存器位5地址为0D5H。
位名称表示方法。例如PSW寄存器位5是F0标志位,则可使用F0表示该位。
单元地址加位数的表示方法。例如PSW寄存器位5,表示为0DOH.5。
专用寄存器符号加位数的表示方法。例如PSW寄存器的位5,表示为PSW.5。
7、相对寻址方式
为解决程序转移而专门设置的,为转移指令所采用。
目的地址=转移指令地址+转移指令字节数+ rel
第二节 MCS-51 单片机指令分类介绍
MCS- 51单片机指令系统共有指令111条,分为5大类:
数据传送类指令(29条)
算术运算类指令(24条)
逻辑运算及移位类指令(24条)
控制转移类指令(17条)
位操作类指令(17条)
一、指令格式中符号意义说明
Rn—当前寄存器组的8个通用寄存器R0~R7,所以n=0~7。
Ri—可用作间接寻址的寄存器,只能是R0、R1两个寄存器,所以i=0、l。
direct—8位直接地址,在指令中表示直接寻址方式,寻址范围256个单元。其值包括0~127(内部RAM低128单元地址)和128~255(专用寄存器的单元地址或符号)。
#data—8位立即数。
#datal6—16位立即数。
addr16—16位目的地址,只限于在LCALL、LJMP指令中使用。
addrl l—11位目的地址,只限于在ACALL和AJMP指令中使用。
rel—相对转移指令中的偏移量,为8位带符号补码数。
DPTR数据指针。
bit—内部RAM(包括专用寄存器)中的直接寻址位。
A—累加器。ACC直接寻址方式的累加器。
B—寄存器B。
C—进位标志位,它是布尔处理机的累加器,也称之为累加位。
@—间址寄存器的前级标志。
/—加在位地址的前面,表示对该位状态取反。
(X)—某寄存器或某单元的内容。
((X))—由X间接寻址的单元中的内容。
—箭头左边的内容被箭头右边的内容所取代。
二、数据传送类指令
传送指令中有从右向左传送数据的约定,即指令的右边操作数为源操作数,表达的是数据的来源;而左边操作数为目的操作数,表达的则是数据的去向。数据传送指令的特点为:把源操作数传送到目的操作数,指令执行后,源操作数不改变,目的操作数修改为源操作数。
1.内部RAM数据传送指令组
通用格式为:
MOV<目的操作数>,<源操作数>
1)以累加器为目的操作数的指令
MOV A,Rn;A Rn,(n=0~7)
MOV A,direct;A direct)
MOV A,@Ri;A ((Ri)) (i=0、1)
MOV A,#data;A data
2)以寄存器Rn为目的操作的指令
MOV Rn,A;Rn (A),(n=0~7)
MOV Rn,direct;Rn (direct),(n=0~7)
MOV Rn,#data;Rn data,(n=0~7)
3)以直接地址为目的操作数的指令
MOV direct,A;direct (A)
MOV direct,Rn;direct Rn,(n=0~7)
MOV directl,direct2;direct 1 (direct2)
MOV direct,@Ri;direct (Ri),(i=0、1)
MOV direct,#data;direct data
4)以间接地址为目的操作数的指令
MOV @Ri,A;(Ri) (A)
MOV @Ri,direct;(Ri) (direct)
MOV @Ri,#data;(Ri) data
5)十六位数的传递指令
MOV DPTR,#data16
功能:将一个16位的立即数送人DPTR中去。其中高8位送人DPH,低8位送入DPL。
例 将片内RAM的15H单元的内容0A7H送55H单元。
解法1 MOV 55H,15H
解法2 MOV R6,15H
MOV 55H,R6
解法3 MOV R1,#15H
MOV 55H,@R1
解法4 MOV A,15H
MOV 55H,A
例 理解表2-8所列指令的执行结果。
2、外部RAM数据传送指令
MOVX A,@Ri;A ((Ri))
MOVX @Ri,A;(R0) (A)
MOVX A,@DPTR;A ((DPTR))
MOVX @DPTR,A;(DPTR) (A)
要点分析:
1)在MCS-51中,与外部存储器RAM打交道的只可以是累加器A,所有片外RAM数据传送必须通过累加器A进行。
2)要访问片外RAM,必须要知道RAM单元的16位地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)是一个8位的寄存器,所以只能访问片外RAM低256个单元,即0000H~00FFH。
3)使用外部RAM数据传送指令时,应当首先将要读或写的地址送人DPTR或Ri中,然后再用读写命令。
例 将外部RAM中0010H单元中的内容送人外部RAM中2000H单元中。程序如下:
MOV R0,#10H
MOVX A,@R0
MOV DPTR,#2000H
MOVX @DPTR,A
3、程序存储器数据传送指令
指令介绍:
MOVC A,@A+DPTR;A ((A)十(DPTR))(远程查表指令)
MOVC A,@A+ PC;A ((A)+(PC))(近程查表指令)
要点分析:
1)这两条指令寻址范围为64KB,指令首先执行16位无符号数的加法操作,获得基址与变址之和,“和”作为程序存储器的地址,该地址中的内容送人A中。
2)第二条指令与第一条指令相比,由于PC的内容不能通过数据传送指令来改变,而且随该指令在程序中的位置变化而变化,因此在使用时需对变址寄存器A进行修正。
以上两条MOVC是64KB存储空间内的查表指令,实现程序存储器到累加器的常数传送,每次传送一个字节。
例 在片内20H单元有一个BCD数,用查表法获得相应的ASCII码,并将其送入21H单元。其子程序为:(设当(20H)=07H时)
ORG 1000H;指明程序在ROM中存放始地址
1000H BCD_ASCl:MOV A,20H;A (20H),(A)=07H
1002H ADD A,#3;累加器(A)=(A)+3,修正偏移量
1004H MOVC A,@A+PC; PC当前值1005H
1005H MOV 21H,A (A)+(PC)=0AH+1005H=100FH
1007H RET (A)=37H,A ROM(100FH)
1008H TAB:DB 30H
1009H DB 31H
100AH DB 32H
100BH DB 33H
100CH DB 34H
100DH DB 35H
100EH DB 36H
100FH DB 37H
1010H DB 38H
1011H DB 39H
一般在采用PC作基址寄存器时,常数表与MOVC指令放在一起,称为近程查表。当采用DPTR作基址寄存器时,程序如例6所示,TAB可以放在64KB程序存储器空间的任何地址上,称为远程查表,不用考虑查表指令与表格之间的距离。
例6 同例5用远程查表指令如下:
ORG 1000
BCD_ASC2:MOV A,20H
MOV DPTR,#TAB;TAB首址送DPTR
MOVC A,@A+DPTR;查表
MOV 21H,A
RET
TAB:同例5
4、堆栈操作指令
压入 PUSH direct;(SP) (SP)+1,(SP) (direct)
弹出 POP direct;direct ((SP)),(SP) (SP)-1
要点分析:
堆栈操作的特点是“先进后出”,在使用时应注意指令顺序。
例 分析以下程序的运行结果
MOV R2,#05H
MOV A,#01H
PUSH ACC
PUSH 02H
POP ACC
POP 02H
结果是(R2)=01H,而(A)=05H。也就是两者进行了数据交换。因此:使用堆栈时,人栈的顺序和出栈的顺序必须相反,才能保证数据被送回原位,即恢复现场。
5、数据交换指令
(1)字节交换指令
XCH A,Rn;(A) (Rn)
XCH A,@Ri;(A) (Ri)
XCH A,direct;(A) (direct)
(2)半字节交换指令
XCHD A,@Ri;(A)0-3 (Ri)0-3
(3)累加器A高低半字节交换指令
SWAP A;(A)0-3 (A)4-7
数据交换主要是在内部RAM单元与累加器A之间进行。
例 将片内RAM 60H单元与61H单元的数据交换
不能用:XCH 60H,61H
应该写成:MOV A,60H
XCH A,61H
MOV 60H,A
三、算术运算类指令
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
2、带进位加法指令
ADDC A,Rn;A (A)十(Rn)十(CY)
ADDC A,direct;A (A)十(direct)+(CY)
ADDC A,@R;A (A)十((Ri))十(CY)
ADDC A,#data;A (A)十data+(CY)
3、带借位减法指令组
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-(CY)
4、加1指令组
INC A;A (A)十1
INC R.;Rn (Rn)+1
INC direct;direct (direct)+1
INC @Ri;(Ri) ((Ri)))+1
INC DPTR;DPTR (DPTR)+1
5、减1指令
DEC A;A (A)-1
DEC direct;direct (direct)-1
DEC @Ri;(Ri) ((Ri))-1
DEC Rn;Rn (Rn)-1
6、乘法、除法指令
MUL AB;A×B=BA
DIV AB;A=B= A. . . B
要点分析:
MUL指令实现8位无符号数的乘法操作,两个乘数分别放在累加器A和寄存器B中,乘积为16位,低8位放在A中,高8位放在B中;DIV指令实现8位无符号数除法,被除数放在A中,除数放在B中,指令执行后,商放在A中而余数放在B中。
7、十进制加法调整指令
DA A
要点分析:
1)这条指令必须紧跟在ADD或ADDC指令之后,且这里的ADD或ADDC的操作是对压缩的BCD数进行运算。
2)DA指令不影响溢出标志。
例 设(A)=56H,(R7)=78H,执行指令:
ADD A,R7
DA A
结果:(A)=34H,(CY)=1
例设计将两个4位压缩BCD码数相加程序。其中一个数存放在30H(存放十位,个位)、31H(存放千位,百位)存储器单元,另一个加数存放在32H(存放低位)、33H(存放高位)存储单元,和数存到30H, 31H单元。
程序如下:
MOV R0,#30H;地址指针指向一个加数的个位、十位
MOV R1,#32H;另一个地址指针指向第二个加数的个位、十位
MOV A,@R0;一个加数送累加器
ADD A,@R1;两个加数的个位、十位相加
DA A;调整为BCD码数
MOV@R0,A;和数的个位、十位送30H单元
INC R0;两个地址指针分别指向两个加数的百位、千位
INC R1
MOV A,@R0;一个加数的百位、千位送累加器
ADDC A,@R1;两个加数的百位、千位和进位相加
DA A;调整为BCD码数
MOV @R0,A;和数的百位、千位送31H单元
四、逻辑与运算指令组
1、逻辑与运算指令组
运算规则为:0·0=0 0·1=0 1·0=0 1·1=1
ANL A,Rn;A (A)∧(Rn)
ANL A,direct;A (A)∧(direct)
ANL A,@Ri;A (A)∧((Ri))
ANL A,#data;A (A)∧data
ANL direct,A;direct (direct)∧(A)
ANL direct,#data;direct (direct)∧data
2、逻辑或运算指令组
运算规则为:0+0=0 0+1=0 1+0=1 1+1=1
ORL A,Rn;A (A)∨(Rn)
ORL A,direct;A (A)∨(direct)
ORL A,@Ri;A (A)∨((Ri))
ORL A,#data;A (A)∨data
ORL direct,A;direct (direct)∨(A)
ORL direct,#data;direct (direct)∨data
3、逻辑异或运算指令组
运算规则为:0⊕0=0,1⊕1=0,0⊕1=1,1⊕0=1
XRL A,Rn;A (A)⊕(Rn)
XRL A,direct;A (A)⊕(direct)
XL A,@Ri;A (A)⊕((Ri))
XRL A,#data;A (A)⊕data
XRL direct,A;direct (direct)⊕(A)
XRL direct,#data;direct (direct)⊕data
例 试分析下列程序执行结果
MOV A,#0FFH;(A)=0FFH
ANL P1,#00H;SFR中P1口清零
ORL P1,#55H;P1口内容为55H
XRL P1,A;P1口内容为0AAH
4、累加器清"0”和取反指令组
累加器清“0”指令一条:
CLR A;A 0
累加器按位取反指令一条:
CPL A,A (A)
要点分析:
1)逻辑运算是按位进行的,累加器的按位取反实际上是逻择非运算。
2)当需要只改变字节数据的某几位,而其余位不变时,不能使用直接传送方法,只能通过逻样运算完成。
例 将累加器A的低4位传送到P1口的低4位,但P1口的高4位需保持不变。对此可由以下程序段实现:
MOV R0,A;A内容暂存R0
ANL A,#0FH;屏蔽A的高4位(低4位不变)
ANL P1,#0F0H;屏蔽P1口的低4位(高4位不变)
ORL P1,A;实现低4位传送
MOV A,R0;恢复A的内容
5、移位指令
(1)累加器内容循环左移
RL A;An+1 An n=0~6,A0 A7
(2)累加器带进位标志循环左移
RLC A;An+1 An n=0~6,A0 C C A7
(3)累加器内容循环右移
RR A;An An+1 n=0~6,A7 A0
(4)累加器带进位标志循环右移
RRC A;An An+1 n=0~6,A7 C C A0
例 试用三种方法将累加器A中无符号数乘2。
答:方法1:
CLR C
RLC A
方法2:
CLR C
MOV R0,A
ADD A,R0
方法3:
MOV B,#2
MUL AB
五、控制转移指令组
1、无条件转移指令组
不规定条件的程序转移称之为无条件转移。MCS- 51共有4条无条件转移指令:
1)、长转移指令
LJMP addr16;PC addrl6
转移范围64KB,因此称之为“长转移”。
2)、绝对转移指令
AJMP addrll;PC (PC)+2;PC0 ~10 addr1l
转移范围2KB
3)、短转移指令
SJ MP rel
rel为相对偏移量。
计算目的地址,并按计算得到的目的地址实现程序的相对转移。计算公式为:
目的地址= (PC) + 2+rel
4)、变址寻址转移指令
JMP @A+DPTR;PC (A)+(DPTR)
指令以DPTR内容为基址,而以A的内容作变址,转移的目的地址由A的内容和DPTR内容之和来确定,即目的地址=(A)+(DPTR)
例 ORG 1000H
MOV DPTR,#TAB;将TAB所代表的地址送人数据指针DPTR
MOV A,R1;从R1中取数
MOV B,#2
MUL AB;A乘以2,AJMP语句占2个字节,且是连续存放的
JMP@A+DPTR;跳转
TAB: AJMP S0;跳转表格
AJMP S1
AJMP S2
S0:S0子程序段
S1:S1子程序段
S2:S2子程序段
END
2、条件转移指令组
所谓条件转移就是程序转移是有条件的。执行条件转移指令时,如指令中规定的条件满足,则进行程序转移,否则程序顺序执行。条件转移有如下指令:
1)、累加器判零转移指令
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 顺序执行
例 将外部RAM的一个数据块(首址为DATAl)传送到内部RAM(首址为DATA2),遇到传送的数据为零时停止。
START:MOV R0,#DATA2;置内部RAM数据指针
MOV DPTR,#DATAl;置外部RAM数据指针
LOOPl:MOVX A,@DPTR;外部RAM单元内容送A
JZ LOOP2;判传送数据是否为零,A为零则转移
MOV @R0,A;传送数据不为零,送内部RAM
INC R0;修改地址指针
INC DPTR
SJMP LOOP1;继续传送
LOOP2:RET;结束传送,返回主程序
2)、数值比较转移指令
数值比较转移指令把两个操作数进行比较,比较结果作为条件来控制程序转移。
共有四条指令:
CJNE A, # data, rel
CJNE A, direct, rel
CJNE Rn, # data, rel
CJNE @R, # data, rel
指令的转移可按以下3种情况说明:
若左操作数=右操作数,则:程序顺序执行PC (PC)十3
进位标志位清“0”(CY)=0
若左操作数>右操作数,则:程序转移 PC (PC)+3+rel
进位标志位清“0”(CY)=0
若左操作数<右操作数,则:程序转移PC (PC)+3+rel
进位标志位里“1”(CY)=1
3)、减1条件转移指令
把减1与条件转移两种功能结合在一起的指令。共两条:
·寄存器减1条件转移指令
DJNZ Rn,rel
其功能为:寄存器内容减1,如所得结果为0,则程序顺序执行,如没有减到0,则程序转移。具体表示如下:
Rn (Rn)-1若(Rn)≠0,则PC (PC)+2+rel
若(Rn)=0,则PC (PC)十2
·直接寻址单元减1条件转移指令
DJNZ direct,rel
其功能为:直接寻址单元内容减1,如所得结果为0,则程序顺序执行;如没有减到0,则程序转移。具体表示如下:
direct (direct)-1若(direct)≠0,则PC (PC)+3+rel
若(direct)=0,则PC (PC)+3
要点分析:这两条指令主要用于控制程序循环。如预先把寄存器或内部RAM单元赋值循环次数,则利用减1条件转移指令,以减1后是否为0作为转移条件,即可实现按次数控制循环。
例如 把2000H开始的外部RAM单元中的数据送到3000H开始的外部RAM单元中,数据个数已在内部RAM35H单元中。
MOV DPTR,#2000H;源数据区首址
PUSH DPL;源首址暂存堆栈
PUSH DPH
MOV DPTR,#3000H;目的数据区首址
MOV R2 ,DPL;目的首址暂存寄存器
MOV R3 ,DPH
LOOP: POP DPH;取回源地址
POP DPL
MOVX A,@DPTR;取出数据
INC DPTR;源地址增量
PUSH DPL;源地址暂存堆找
PUSH DPH
MOV DPL,R2 ;取回目的地址
MOV DPH,R3
MOVX @DPTR,A;数据送目的区
INC DPTR;目的地址增量
MOV R2 ,DPL;目的地址暂存寄存器
MOV R3 ,DPH
DJNZ 35H,LOOP;没完,继续循环
RET;返回主程序
3、子程序调用与返回指令组
子程序结构,即把重复的程序段编写为一个子程序,通过主程序调用而使用它。减少了编程工作量,缩短了程序的长度。
调用指令在主程序中使用,而返回指令则应该是子程序的最后一条指令。执行完这条指令之后,程序返回主程序断点处继续执行。如图所示。
1)、绝对调用指令
ACALL addr11
子程序调用范围是2KB,其构造目的地址是在PC+2的基础上,以指令提供的11位地址取代PC的低11位,而PC的高5位不变。即:
PC (PC)+2
SP (SP)+1,(SP) (PC)7 ~0
SP (SP)+1,(SP) (PC)15 ~8
PC10 ~0 addr11
2)、长调用指令
LCALL addr16
调用地址在指令中直接给出,子程序调用范围是64KB。
3)、返回指令
RET;子程序返回指令
RETI;中断服务子程序返回指令
功能:子程序返回指令执行子程序返回功能,从堆找中自动取出断点地址送给程序计数器PC,使程序在主程序断点处继续向下执行。
4、空操作指令
NOP;PC (PC)+1
空操作指令也算一条控制指令,即控制CPU不作任何操作,只消耗一个机器周期的时间。空操作指令是单字节指令,因此执行后PC加1,时间延续一个机器周期。NOP指令常用于程序的等待或时间的延迟。
六、位操作类指令
1、位传送指令组
MOV C,bit;CY (bit)
MOV bit,C;bit (CY)
2、位置位复位指令组
SETB C;CY 1
SETB bit;bit 1
CLR C;CY 0
CLR bit;bit 0
3.位运算指令组
与: ANL C,bit;CY (CY)∧(bit)
ANL C,/bit;CY (CY)∧(bit)
或: ORL C,bit;CY (CY)∨(bit)
ORL C,/bit;CY (CY)∨(bit)
非 CPL C;CY (/CY)
CPL bit;bit (/bit)
例 试编程将内部数据存储器40H单元的第0位和第7位置“1”,其余位变反。
答:根据题意编制程序如下:
MOV A,40H
CPL A
SETB ACC. 0
SETB ACC. 7
MOV 40H,A
例 请用位操作指今,求下面逻辑方程:
P1.7=ACC.0×(B.0十P2.1)+P3.2
MOV C,B.0
ORL C,P2.1
ANL C,ACC.0
ORL C,/P3.2
MOV P1.7,C
4、位控制转移指令组
位控制转移指令就是以位的状态作为实现程序转移的判断条件。
1)、以C状态为条件的转移指令
JC rel;(CY)=1转移,否则顺序执行
JNC rel;(CY)=0转移,否则顺序执行
2)、以位状态为条件的转移指令
JB bit,rel;位状态为“1”转移
JNB bit,rel;位状态为“0”转移
JBC bit,rel;位状态为“1”转移,并使该位清“0”。
第五章 汇编语言程序设计
计算机程序设计语言通常分为三类:
机器语言:能被计算机直接识别和执行,但它不易为人们编写和阅读,因此,人们一般不再用它来进行程序设计。
高级语言:一种面向过程和问题并能独立于机器的通用程序设计语言,是一种接近人们自然语言和常用数字表达式的计算机语言。编程的速度快而且编程者不必熟悉机器内部的硬件结构而可以把主要精力集中于掌握语言的语法规则和程序的结构设计方面。但程序执行的速度慢且占据的存储空间较大。
汇编语言:一种面向机器的语言,它的助记符指令和机器语言保持着一一对应的关系。也就是说,汇编语言实际上就是机器语言的符号表示。用汇编语言编程时,编程者可以直接操作到机器内部的寄存器和存储单元,能把处理过程描述得非常具体。因此通过优化能编制出高效率的程序,即可节省存储空间又可提高程序执行的速度,在空间和时间上都充分发挥了计算机的潜力。在实时控制的场合下,计算机的监控程序大多采用汇编语言编写。
第一节 伪指令及汇编语言源程序汇编
一、伪指令
伪指令:不属于指令集中的指令,在汇编时不产生目标代码,不影响程序的执行,仅指明在汇编时执行一些特殊的操作。
1、定义起始地址伪指令ORG
格式:ORG 操作数
说明:操作数为一个16位的地址,它指出了下面的那条指令的目标代码的第一个字节的程序存储器地址。在一个源程序中,可以多次定义ORG伪指令,但要求规定的地址由小到大安排,各段之间地址不允许重复。
2、定义赋值伪指令EQU
格式:字符名称 EQU 操作数
说明:该指令是用来给字符名称赋值。在同一个源程序中,任何一个字符名称只能赋值一次。赋值以后,其值在整个源程序中的值是固定的,不可改变。对所赋值的字符名称必须先定义赋值后才能使用。其操作数可以是8位或16位的二进制数,也可以是事先定义的表达式。
3、定义数据地址赋值伪指令DATA
格式:字符名称 DATA 操作数
说明:DATA伪指令的功能和EQU伪指令相似,不同之处是DATA伪指令所定义的字符名称可先使用后定义,也可先定义后使用。在程序中它常用来定义数据地址。
4、定义字节数据伪指令DB
格式:[标号:]DB数据表
说明:该伪指令是用来定义若干字节数据从指定的地址单元开始存放在程序存储器中。数据表是由8位二进制数或由加单引号的字符组成,中间用逗号间隔,每行的最后一个数据不用逗号。
DB伪指令确定数据表中第一个数据的单元地址有两种方法,一是由ORG伪指令规定首地址,二是由DB前一条指令的首地址加上该指令的长度。
5、定义双字节数据伪指令DW
格式:[标号:]DW数据表
说明:该伪指令与DB伪指令的不同之处是,DW定义的是双字节数据,而DB定义的是单字节数据,其他用法都相同。在汇编时,每个双字节的高8位数据要排在低地址单元,低8位数据排在高地址单元。
6、定义预留空间伪指令DS
格式:〔标号:〕DS操作数
说明:该伪指令是用于告诉汇编程序,从指定的地址单元开始(如由标号指定首址),保留由操作数设定的字节数空间作为备用空间。要注意的是DB、DW、DS伪指令只能用于程序存储器,而不能用于数据存储器。
7、定义位地址赋值伪指令BIT
格式:字符名称BIT位地址
说明:该伪指令只能用于有位地址的位(片内RAM和SFR块中),把位地址赋予规定的字符名称,常用于位操作的程序中。
8、定义汇编结束伪指令END
格式:〔标号:〕END
说明:汇编结束伪指令END是用来告诉汇编程序,此源程序到此结束。在一个程序中,只允许出现一条END伪指令,而且必须安排在源程序的末尾。
二、汇编语言源程序汇编
用汇编语言编写的源程序称为汇编语言源程序。但是单片机不能直接识别,需要通过汇编将其转换成用二进制代码表示的机器语言程序,才能够识别和执行。汇编通常由专门的汇编程序来进行,通过编译后自动得到对应于汇编源程序的机器语言目标程序,这个过程叫机器汇编。另外还可用人工汇编。
一、汇编程序的汇编过程
汇编过程是将汇编语言源程序翻译成目标程序的过程。机器汇编通常是在计算机上(与MCS一51单片机仿真器联机)通过编译程序实现汇编。
二、人工汇编
由程序员根据MCS - 51的指令集将汇编语言源程序的指令逐条人工翻译成机器码的过程叫人工汇编。
第三节 汇编语言程序设计举例
汇编语言程序设计通常的步骤是:
(1)建立数学模型:根据课题要求,用适当的数学方法来描述和建立数学模型。
(2)确定算法:绘制程序流程图算法是程序设计的基本依据。程序流程图是编程时的思路体现。
(3)编写源程序合理选择和分配内存单元、工作寄存器。按模块结构具体编写源程序。
(4)汇编及调试程序通过汇编生成目标程序,经过多次调试,对程序运行结果进行分析,不断修正源程序中的错误,最后得到正确结果,达到预期目的。
编写一个应用系统的汇编语言源程序,其程序结构一般有顺序结构、分支结构、循环结构、子程序结构等,如图所示。
一、顺序程序设计
顺序程序:各类结构化程序块中最简单的一种。它按程序执行的顺序依次编写,在执行程序过程中不使用转移指令,只是顺序执行。
例 把A中的压缩BCD码转换成二进制数。
解:此程序采用将A中的高半节(十位)乘以10,再加上A的低半字节(个位)的方法。编程如下:
MOV R2,A;暂存
ANL A,#F0H;屏蔽低4位
SWAP A
MOV B,#10
MUL AB;A中高半字节乘10
MOV R3,A
MOV A,R2;取原BCD数
ANL A,#0FH;取BCD数个位
ADD A,R3;个位与十位数相加
RET
二、分支程序的设计
分支程序主要是根据判断条件的成立与否来确定程序的走向。因此在分支程序中需要使用控制转移类指令。可组成简单分支结构和多分支结构。
1 、单分支选择结构
当程序的判断仅有两个出口,两者选一,称为单分支结构。通常用条件判断指令来选择并确定程序的分支出口。这类单分支选择结构有三种典型的形式,见图。
(1)图a,当条件满足时执行分支程序2,否则执行分支程序1。
(2)图b,当条件满足时跳过程序段1,从程序段2执行,否则顺序执行程序段1,再执行程序段2。
(3)图c,这是分支结构的一种特殊形式。当条件满足时,停止执行程序段1。
例 设内部RAM 40H和41H单元中存放2个8位无符号二进制数,试编程找出其中的大数存人30H单元中。
解: MOV A,40H
CJNE A,41H,LOOP;取2个数进行比较
LOOP: JNC LOOP1;根据CY值,判断单分支出口
MOV A,41H;41H单元中是大数
LOOPl:MOV 30H,A;40H单元中是大数
2 、多分支选择结构
当程序的判别部分有两个以上的出口流向时,称为多分支选择结构。一般有两种形式,见图。
例 设变量X的值存放在内部RAM的30H单元中,编程求解下列函数式,将求得的函数值Y存人40H单元。
X+1 (X≥100)
Y= 0 (10≤X<100)
X一1 (X<10)
解:自变量X的值在三个不同的区间所得到的函数值Y不同,编程时要注意区间的划分。程序流程图如图4一4所示。程序如下:
MOV A,30H;取自变量X值
CJNE A,#10,LOOP;与10比较,A中值不改变
LOOP:JC LOOP2;若X< 10,转LOOP2
CJNE A,#100,LOOP1;与100比较
LOOP1:JNC LOOP3;若X>100,转LOOP3
MOV 40H,#00H;因10≤X<100,故Y=0
SJMP EXIT
LOOP2:DEC A;因X<10,故Y=X一1
MOV 40H,A
SJMP EXIT,
LOOP3:INC A;若X>100,故Y=X+1
MOV 40H, A
EXET:RET
例 某温度控制系统,采集的温度值Ta放在累加器A中。此外,在内部RAM54H单元存放控制温度下限值(T54),在55H单元存放控制温度上限值(T55)。若Ta>T55,程序转向JW(降温处理程序);若Ta<T54,则程序转向SW(升温处理程序);若T55≥Ta≥T54,则程序转向FH(返回主程序)。有关程序段如下:
CJNE A,55H,I.OOP1;Ta≠55,转向LOOP1
AJMP FH;Ta=T55,返回
I.OOPl:JNC JW;(CY)=0,表明Ta>T55,转降温处理程序
CJNE A,54H,LOOP2;Ta≠T54,转向LOOP2
AJMP FH;Ta=T54,返回
LOOP2:JC SW;(CY)=1,表明Ta<T54,转升温处理程序
FH:RET;T55≥Ta≥T54,返回主程序
三、循环程序设计
1 、循环结构的组成
循环结构由4部分组成:初始化部分、循环处理部分、循环控制部分和循环结束部分。循环结构组成图见图。
(1)初始化部分用来设置循环处理之前的初始状态,如循环次数的设置、变量初值的设置、地址指针的设置等。
(2)循环处理部分又称为循环体,是重复执行的数据处理程序段,它是循环程序的核心部分。
(3)循环控制部分这部分用来控制循环继续与否。
(4)结束部分这部分是对循环程序全部执行结束后的结果进行分析、处理和保存。
典型循环结构见图所示。图a为先处理后判断的结构,图b为先判断后处理的结构。
根据循环程序的结构不同也可分为单重循环和多重循环。
对循环次数的控制有多种:循环次数是已知的,可用循环次数计数器控制循环;若循环次数是未知的,可以按条件控制循环。
2.循环程序设计
在一个循环程序的循环体中不包含另外的循环结构称为单重循环。
例 设有一字符串以回车符为结束标志,并存放在内部RAM40H单元开始的连续存储单元中,编写测试字符串长度的程序。
分析:为测试字符串的长度,应使用逐个字符依次与回车符(ODH)比较的方法。为此需要设里一个字符串指针和一个长度计数器,字符串指针用于指定字符,长度计数器用于累加字符串的长度。如比较不相等,则长度计数器和字符串指针都加1,以继续往下比较;如果比较相等,则表示该字符为回车符,字符串结束,长度计数器的值就是字符串的长度。
MOV R7,#0FFH;设里长度计数器初值
MOV R0,#3FH;Al字符串指针初值
LOOP:INC R7
INC R0
CJNE @R0,#ODH,LOOP
RET
例 设内部RAM存有一无符号数数据块,长度为128字节,在以30H单元为首址的连续单元中。试编程找出其中最小的数,并放在20H单元。
解: MOV R7,#7FH;设置比较次数
MOV R0,#30H;设置数据块首址
MOV A,@R0;取第一个数
MOV 20H,A;第一个数暂存于20H单元,作为最小数
LOOPl:INC R0
MOV A,@R0;依次取下一个数
CJNE A,20H,LOOP
LOOP:JNC LOOP2;两数比较后,其中小的数放在20H单元
MOV 20H,A
LOOP2:DJNZ R7,LOOP1;R7中内容为零则比较完
SJMP$
例 80C51单片机的P1端口作检出,经驱动电路接8只发光二极管,如图4-2所示。当输出为“1”时,发光二极管点亮;输出位是“0”时为暗。试分析下述程序执行过程及发光二极管点亮的工作规律。
LP:MOV P1,#81H
LCALL DELAY
MOV P1,#42H
LCALL DELAY
MOV P1,# 24H
LCALL DELAY
MOV P1,#18H
LCALL DELAY
MOV P1,#24H
LCALL DELAY
MOV P1,#42H
LCALL DELAY
SJMP LP
子程序:
DELAY:MOV R2,#0FAH
L1:MOV R3,# 0FAH
L2:DJNZ R3,L2
DJNZ R2,L1
RET
答:上述程序执行过程及发光二极管点亮的工作规律为:首先是第1和第8个灯亮;延时一段时间后,第2和第7个灯亮;延时一段时间后,第3和第6个灯亮;延时一段时间后,第4和第5个灯亮;延时一段时间后,重复上述过程。
若系统的晶振频率为6MHz,延时子程序DELAY的延时时间计算如下:
DELAY:MOV R2,#0FAH
L1:MOV R3,#0FAH
L2:DJNZ R3,L2
DJNZ R2,L1
RET
因为FAH=250,所以总时间T计算如下:
T=4+(250×4+4)×250十4=251008 us
若想加长延时时间,可以增加循环次数。若想缩短延时时间,可以减少循环次数。
例 根据图4-2所示的线路,试编写灯移位程序,即8个发光二极管依次亮一个,循环左移,一个一个地亮,循环不止。
答:根据题图4一2所示的线路,编制灯亮移位程序如下:
MOV A,#1
L1:MOV P1,A
RL A
LCALL DELAY;DELAY同上题中的延时程序
SJMP Ll
例 编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转移到下一个闪烁10次,循环不止。
解:本程序的硬件连接如图5-16所示,8031的P1口输出经74LS240 8路反相驱动后,点燃发光二极管。由图可见,低电平时发光二极管可被点亮。编程如下:
MOV A,#01;初值
SHIM:LCALL FLASH;闪亮10次
RRA;右移
SJMP SHIM;循环
FLASH:MOV R2,#0AH;闪烁10次
FLASH1:MOV P1,A;点亮
LCALL DELAY;延时
MOV P1,#00H;熄灭
LCALL DELAY;延时
DJNZ R2,FLASH1;循环
RET
本程序中DELAY为延时子程序,初值可以自己按延时要求编制。
第六章 MCS-51 单片机中断系统
第一节 概述
一、中断的概念
中断是指计算机暂时停止原程序的执行转而为外部设备服务,并在服务完以后自动返回原程序执行的过程。
一个资源(CPU)面对多项任务,但由于资源有限,因此就可能出现资源竞争的局面,即几项任务来争夺一个CPU。而中断技术就是解决资源竞争的有效方法,采用中断技术可以使多项任务共享一个资源,所以中断技术实质上就是一种资源共享技术。
二、引入中断技术的优点:
1)提高了CPU的工作效率,实现了CPU和外部设备的并行工作。
2)实现实时控制。所谓实时控制,就是要求计算机能及时地响应被控对象提出的分析、计算和控制等请求,使被控对象保持在最佳工作状态,以达到预定的控制效果。由于这些控制参数的请求都是随机发出的,而且要求单片机必须作出快速响应并及时处理,对此,只有靠中断技术才能实现。
3)便于突发故障(如硬件故障、运算错误、电源掉电、程序故障等)的及时发现,提高系统可靠性。
4)能使用户通过键盘发出请求,随时可以对运行中的计算机进行干预。
三、中断源
向CPU发出中断请求的来源称之为中断源。MCS- 51是一个多中断源的单片机,以80C51为例,共5个中断源,分别是外部中断2个,定时中断2个和串行中断1个。
1、外中断
外中断是由外部信号引起的,共有2个中断源,即外部中断0和外部中断1。中断请求信号分别由引脚INT0(P3.2)INT1(P3.3)引入。
外部中断请求有两种信号方式,即电平方式和脉冲方式。可通过设置有关控制位进行定义。
电平方式的中断请求是低电平有效。只要单片机在中断请求引入端上采样到有效的低电平时,就激活外部中断。
脉冲方式的中断请求则是脉冲的后沿负跳有效。CPU在两个相随机器周期对中断请求引入端进行的采样中,如前一次为高电平,后一次为低电平,即为有效中断请求。
2、定时中断
定时中断足为满足定时或计数的需要而设置的。当计数结构发生计数溢出时,即表明定时时间到或计数值已满,请求是在单片机芯片内部发生的,无需在芯片上设里引入端。
3、串行中断
串行中断是为串行数据传送的需要而设置的。每当串行口接收或发送完一组串行数据时,就产生一个中断请求。请求是在单片机芯片内部自动发生的,不需在芯片上设里引入端。
第二节 中断控制
一、定时器控制寄存器(TCON )
该寄存器用于保存外部中断请求以及定时器的计数溢出。寄存器的内容及位地址表示如下:
1、IE0和IE1 外中断请求标志位
当CPU采样到INT0(INT1)端出现有效中断请求时,IE0(IE1)位由硬件置“1”。在中断响应完成后转向中断服务时,再由硬件自动清“0”。
2、IT0和IT1 外中断请求触发方式控制位
IT0(IT1)=1 脉冲触发方式,后沿负跳有效。
IT0(IT1)=0 电平触发方式,低电平有效。
由软件置“1”或清“0"。
3、TF0和TF1 计数溢出标志位
当计数器产生计数溢出时,相应的溢出标志位由硬件置“1”。当转向中断服务时,再由硬件自动清“0"。计数溢出标志位的使用有两种情况:
采用中断方式时,作中断请求标志位来使用;
采用查询方式时,作查询状态位来使用。
二、串行口控制寄存器(SCON )
寄存器的内容及位地址表示如下:
1、TI 串行口发送中断请求标志位
当发送完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。
2、RI 串行口接收中断请求标志位
当接收完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。
串行中断请求由TI和RI的逻辑或得到。就是说,无论是发送标志还是接收标志,都会产生串行中断请求。
三、中断允许控制寄存器(IE )
寄存器地址0A8H,位地址0AFH~0A8H。寄存器的内容及位地址表示如下:
1、EA中断允许总控制位
EA=0 中断总禁止,禁止所有中断。
EA=1 中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设里。
2、EX0(EX1)外部中断允许拉制位
EX0(EX1)=0 禁止外中断
EX0(EX1)=l 允许外中断
3、ET1和ET2 定时/计数中断允许控制位
ET0(ET1)=0 禁止定时(或计数)中断
ET0(ET1)=1 允许定时(或计数)中断
4、ES串行中断允许控制位
ES=0禁止串行中断
ES=1允许串行中断
四、中断优先级控制寄存器IP
IP寄存器地址0B8H,位地址为0BFH~0B8H。寄存器的内容及位地址表示如下:
PX0外部中断0优先级设定位;
PT0定时中断0优先级设定位,
PX1外部中断1优先级设定位;
PT1定时中断1优先级设定位;
PS串行中断优先级设定位。
为“0”的位优先级为低;为"1"的位优先级为高。
五、中断优先级控制原则和控制逻辑
MCS- 51具有两级优先级,具备两级中断服务嵌套的功能。其中断优先级的控制原则是:
·低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。
·如果一个中断请求已被响应,则同级的其它中断服务将被禁止。即同级不能嵌套。
·如果同级的多个中断请求同时出现,则按CPU查询次序确定那个中断请求被响应。其查询次序为:外部中断0 定时中断0 外部中断1 定时中断1 串行中断。
六、中断初始化与中断控制寄存器状态设置
外中断初始化共有三项内容:中断总允许、外中断允许和中断方式设定。定时中断则只有两项内容,没有中断方式控制。
第三节 中断系统的结构
一、 MCS-51中断系统的响应过程
中断过程:
中断过程的三步曲:中断响应、执行中断服务程序及中断返回。图中的中断源,就是指能提出中断请求的计算机内部电路与外部设备。
下面分析一下中断过程中的技术细节。
1、 中断响应
中断响应的条件:
基本条件有:
·有中断源提出中断请求;
·中断总允许位EA=1,即CPU开放中断;
·申请中断的中断源的中断允许位为1,即没有被屏蔽。
MCS- 51的CPU在每个机器周期采样各中断请求标志位,如有置位,只要以上条件满足,且下列三种情况都不存在,那么,在下一周期CPU响应中断。否则,采样的结果被取消。这3种情况是:
·CPU正在处理同级或高级优先级的中断。
·现行的机器周期不是所执行指令的最后一个机器周期。
·正在执行的指令是RETI或访问IE、IP指令。CPU在执行RETI或访问IE、IP的指令后,至少需要再执行一条其他指令后才会响应中断请求。
MCS-51中断系统在中断响应时的技术措施为:
1)当前PC值送堆栈,也就是将CPU本来要取用的指令地址暂存到堆栈中保护起来,以便中断结束时,CPU能找到原来程序的断点处,继续执行下去。这一措施是中断系统自动保存完成。
2)保护现场时关闭中断,以防其他中断信号干扰。此时,中断系统关闭该中断源接收电路,其他中断请求均被禁止。这一措施需用指令完成
3)按中断源入口地址进人中断服务程序。
2、中断服务程序
在中断响应后,计算机调用的子程序称为中断服务程序。这是专门为外部设备或其他内部部件中断源服务的程序段,其结尾必须是中断返回指令RETI。
3、中断返回
计算机在中断响应时执行到RETI指令时,立即结束中断并从堆栈中自动取出在中断响应时压入的PC当前值,从而使CPU返回原程序中断点继续进行下去。
二、中断采样、中断查询
1、中断采样
采样就是CPU在每个机器周期对引脚INT0(P3.2)和INT1(P3.3)进行信号检测,根据采样结果设置TCON寄存器中相应的标志位,以便CPU在下一个机器周期检测这些中断标志位的状态,了解是否有外部中断申请,然后根据中断初始化情况决定是否响应。
对于T0、T1、串行口中断的中断请求,都发生在芯片内部,可以直接设置TCON寄存器和SCON寄存器中相应的标志位,无须采样。
2、 中断查询
CPU检测TCON寄存器和SCON寄存器中各标志位的状态,来决定有没有中断请求发生及是哪一个中断请求。
三、中断响应时间
定义:从检测到中断申请到转去执行中断服务程序所需的时间。
一般情况下中断响应时间在3-8个机器周期之间。
四、中断标志的清除方式
中断标志清除方式有三种情况:
1)定时器T0、T1及边沿触发方式的外部中断标志,TF0、TF1、IE0、IE1在中断响应后由硬件自动清除,无需采取其他措施。
2)电平触发方式的外部中断标志IE1、IE0不能自动清除,必须撤除/INT0或/INT1的电平信号。
3)串行口中断标志TI、RI不能由硬件清除,需用指令清除,
第四节 应用举例
例 在下图中有开关K,每扳动一次开关,就产生一个外部中断请求。经P1.3~P1.0读入开关K0~K3的状态,取反后再由P1.7~P1.4输出,驱动相应的发光二极管。主程序流程如图
程序清单为:
ORG 1000H
STAR:AJMP MAIN
ORG 1003H
AJMP EXTR
ORG 1030H
MAIN:SETB IT0;脉冲边沿触发
SETB EX0;外部中断0允许
SETB EA;总中断允许
HERE:AJMP HERE;等待中断
ORG 1200H
P1 EQU 90H
EXTR:MOV A,#0FH;中断服务程序
MOV P1,A;熄发光二极管
MOV A,P1;输入开关状态
CPL A;状态取反
ANL A,#0FH;屏蔽A的高半字节
SWAP A;A高低半字节交换
MOV P1,A;开关状态愉出
RETI;中断返回
第七章 MCS-51 单片机定时器 / 计数器
第一节 概 述
一、 定时方法
在单片机的控制应用中,可供选择的定时方法有:
1、软件定时
软件定时:靠执行一个循环程序以进行时间延迟。
特点:时间精确,且不需外加硬件电路。但占用CPU,定时的时间不宜太长。
2、硬件定时
硬件定时:使用硬件电路完成时间较长的定时。
特点:定时功能全部由硬件电路完成,不占CPU时间。但需通过改变电路中的元件参数来调节定时时间,在使用上不够灵活方便。
3、可编程定时器定时
可编程定时器定时:通过对系统时钟脉冲的计数来实现的。
特点:计数值通过程序设定,改变计数值,也就改变了定时时间,灵活、方便。
MCS-51单片机采用的是可编程定时器定时方法。
二、MCS-51 定时器/计数器功能
1、计数功能
所谓计数是指时外部脉冲进行计数。外部脉冲通过T0(P3.4)、T1(P3.5)两个信号引脚输入。
输入的脉冲在负跳变时有效,进行计数器加1(加法计数)。
计数脉冲的频率不能高于晶振频率的1/24。
2、定时功能
定时功能也是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。也就是每个机器周期计数器加1。
第二节 定时器/计数器的控制寄存器
一、定时器控制寄存器(TCON )
1、TF0(TF1)计数溢出标志位
当计数器计数溢出(计满)时,该位置“1”
查询方式时,此位作状态位供查询,软件清“0”;
中断方式时,此位作中断标志位,硬件自动清“0”。
2、TR0(TR1) 定时器运行控制位
TR0(TR1)=0 停止定时器/计数器工作
TR0(TR1)=1 启动定时器/计数器工作
软件方法使其置“1”或清“0”。
二、工作方式控制寄存器(TMOD )
各位定义如下:
1、GATE 门控位
GATE=0以运行控制位TR启动定时器
GATE=1以外中断请求信号(/IMT0或/INT1)启动定时器
2、C/T 定时方式或计数方式选择位
C/T=0定时工作方式
C/T=l计数工作方式
3、M1、M0 工作方式选择位
M1、M0=00 方式0
M1、M0=01 方式1
M1、M0=10 方式2
M1、M0=11 方式3
三、中断允许控制寄存器(IE )
1、EA中断允许总控制位
2、ET0和ET1定时/计数中断允许控制位
ET0(ET1)=0禁止定时/计数中断
ET0(ET1)=1允许定时/计数中断
第三节 定时器 / 计数器的工作方式
一、方式0
1、电路逻辑结构
方式0是13位计数结构的工作方式,其计数器由TH0全部8位和TL0的低5位构成。TH0的高3位弃之不用。
下图是定时器/计数器0在工作方式0的逻样结构(定时器/计数器1与此完全相同)。
在方式0下
当为计数工作方式时,计数值的范围是:
1~8192(213 )
当为定时工作方式时,定时时间的计算公式为:
(213 一计数初值)×晶振周期×12 或 (213 -计数初值)×机器周期
二、 方式1
16位计数结构的工作方式,计数器由TH0全部8位和TL0全部8位构成。
其逻样电路和工作情况与方式0完全相同。
在方式1下
当为计数工作方式时,计数值的范围是:
1~65536(216 )
当为定时工作方式时,定时时间的计算公式为:
(216 一计数初值)×晶振周期×12 或 (216 -计数初值)×机器周期
三、 方式2
1、电路逻辑结构
初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数。
四、方式3
1.工作方式3下的定时器/计数器0
在工作方式3下,定时器/计数器0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以计数使用,又可以定时使用,定时器/计数器0的各控制位和引脚信号全归它使用。TH0则只能作为简单的定时器使用。
2.工作方式3下的定时器/计数器1
如果定时器/计数器0已工作在工作方式3,则定时器/计数器1只能工作在方式0、方式1或方式2下,因为它的运行控制位TR1及计数溢出标志位TF1已被定时器/计数器0借用,如图所示。在这种情况下,定时器/计数器1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。
第四节 定时器 / 计数器的编程应用举例
定时器/计数器初始化的步骤:
(1)确定工作方式、操作模式、启动控制方式一写入TMOD寄存器。
(2)设置定时器或计数器的初值一可直接将初值送人TH0、TL0或TH1、TL1
(3)根据要求是否采用中断方式一直接对IE寄存器赋值。
(4)启动定时器工作—可使用SETB TR0、SETB TR1。
例1 设单片机晶振频率为6MHz,使用定时器1以方式。产生周期为500Hz的等宽正方波连续脉冲,并由P1.0输出。以查询方式完成。
1.计算计数初值
欲产生500Hz的等宽正方波脉冲,只需在P1.0端以250Hz为周期交替输出高低电平即可实现,为此定时时间应为250Hz。使用6MHz晶振,则一个机器周期为2us。方式0为13位计数结构。设待求的计数初值为X,则:
(213 -X)×2×106 =250×106
求解得:X=8067。二进制数表示为1111110000011B。十六进制表示为0FC03H。
2.TMOD
M1M0=00 C/T=0 GATE=0 TMOD=00H.
3.由定时器控制寄存器TCON中的TR1位控制定时的启动和停止
TR1=1启动,TR1=0停止。
4.程序设计
MOV TMOD,#00H
MOV TH1,#0FCH
MOV TL1,#03H
MOV IE,#00H;禁止中断
LOOP:SETB TR1;启动定时
JBC TF1,LOOP1;查询计数溢出
AJMP LOOP
LOOP1:MOV TH1,#0FCH;重新设豆计数初值
MOV TL1,#03H
CLR TF1;计数溢出标志位清“0"
CPL P1.0;
AJMP LOOP;重复循环
例2 题目同上,但以中断方式完成。即单片机晶振频率为6MHz,使用定时器1以工作方式1产生周期为500的等宽连续正方波脉冲,P1.0端输出。
1.计算计数初值
TH1=0FFH TL1=83H
2. TMOD寄存器初始化
TMOD=10H
3.程序设计
主程序: MOV TMOD,#10H;定时器1工作方式1
MOV TH1,#0FFH;设里计数初值
MOV TL1,#83H
SETB EA;开中断
SETB ET1;定时器1允许中断
SETB TR1;定时开始
HERE:SJMP$;等待中断
中断服务程序:
MOV TH1,#0FFH;重新设里计数初值
MOV TL1,#83H
CPL P1.0;输出取反
RETI;中断返回
例4 使用定时器T0定时,每隔l0s便与P1.0口连接的发光二极管闪烁10次。设P1.0高电平灯亮,反之灯灭。
程序如下:
ORG 0000H;程序起始地址
LJMP MAIN;
ORG 000BH;T0中断入口地址
LJMP INT;中断入口地址
ORG 0100H
MAIN: MOV R0,#200;l0s循环次数
MOV TMOD,#01H;T0定时方式1
MOV TH0,#3CH;50ms初值高位
MOV TL0,#0B0H;50ms初值低位
MOV Rl,#10;闪烁次数
SETB EA;开总中断
SETB ET0;开T0中断
SETB TR0;启动
LP:SJMP LP;循环等待中断
INT:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,DE;R0≠0,不到l0s,灯不闪,直接返回
DE0:SETB Pl.0;R0=0,l0s到,灯闪烁
LCALL DELAY、
CLR Pl.0
LCALL DELAY
DJNZ R1,DE0
DE:RETI
DELAY:MOV R6,#0FFH
DL0:MOV R7,#0FFH
DL1:NOP
DJNZ R7,DL1
DJNZ R6,DL0
RET
例5 利用T0门控位测试/INT0引脚上出现的正脉冲宽度,已知晶振频率为12MHz,将所测得值高位存入片内71H,低位存入片内70H。
解:程序如下:
MOV TMOD,#09H;设T0为方式1,GATE =1
MOV TL0,#00H
MOV TH0,#00H
MOV R0,#70H
JB P3.2,$;等P3.2变低
SETB TR0;启动T0准备工作
JNB P3. 2,$;等待P3. 2变高
JB P3. 2,$;等待 P3. 2再次变低
CLR TR0;停止计数
MOV @R0,TL0;存放计数的低字节
INC R0
MOV @R0,TH0;存放计数的高字节
SJMP$
例:设计一个节日彩灯循环闪烁的应用系统。
解:
分析:该题可以有多种循环方式,延时时间及左右移不同会有不同的循环效果。以下只是其中的一种形式编程。电路见图,由P1口的8位控制8路电灯电路,在每一路中都通过一个可控硅SCR控制N路并联电灯的开关。单片机工作频率12MHz,该程序延时选为200 ms,用定时器T0作为定时器,初值为50 ms。编程如下:
START:MOV P1,#0FEH;初始化为第0位的一组灯亮
L1:ACALL DELAY;调延时子程序
MOV A,P1
RL A;顺序左移一位
MOV P1,A
AJMP L1
DELAY:MOV TMOD,#01H
MOV R1,#04H
DELAY-1:MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
JNB TF0,$
CLR TF0
DJNZ R1,DELAY_1
RET
第八章 单片机串行数据通信
第一节 概 述
一、串行通信基本原理
计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。
并行通信的特点是:各数据位同时传送,传送速度快、效率高。但并行数据传送有多少数据位就需多少根数据线,因此传送成本高。并行数据传送的距离小于30米。并行通信依靠并行1/O接口实现。
例:CPU在执行如MOV P1,A的指令时,将A中的8位数据写人P1口锁存器中,并经P1口的8个引脚将8位数据并行输出到外部设备。同样,CPU也可执行如MOV A,P1的指令,将外部设备送到P1上脚上的8位数据并行地读入累加器A。
串行通信的特点是:数据传送按位顺序进行,最少只需一根传输线即可完成,成本低但速度慢。计算机与外界的数据传送大多数是串行的,其传送的距离可以从几米到几千公里。
二、两种串行通信方式
串行通信根据数据传送时的编码格式不同又分为异步通信和同步通信两种方式。
1、异步通信方式
异步通信用起始位"0”表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位“1”表示字符结束,见图。一个字符又称一帧。图中a,一帧信息包括1位起始位、8位数据位和1位停止位。图b中,数据位增加到9位。在MCS-51计算机系统中,第九位数据D8可以用作奇偶校验位,也可以用作地址/数据帧标志,D8=1表示该帧信息传送的是地址,D8=0表示传送的是数据。两帧信息之间可以无间隔,也可以有间隔,且间隔时间可任意改变,间隔用空闲位1来填充。
1)、波特率(Baud rate):每秒传送的位数。每秒传送一个格式位就是1波特。即:
1波特=lbps(位/秒)
例如电传打字机的传送速率每秒10个字符,若每个字符为11位,则波特率为
11位/字符×10字符/s=110位/s.
2)、帧(frame):从起始位开始到停止位结束的全部内容称之为一帧,帧是一个字符的完整通信格式,因此也就把串行通信的字符格式称之为帧格式。
起始位:发送器是通过发送起始位而开始一个字符的传送。起始位使数据线处于“space”状态。
数据位:起始位之后就传送数据位。在数据位中,低位在前(左),高位在后(右)。数据位可以是5、6、7或8位。
奇偶校验位:用于对字符传送作正确性检查。共有3种可能,即奇校验、偶校验和无校验。
停止位:停止位在最后,用以标志一个字符传送的结束,它对应于mark状态。停止位可能是1、1. 5或2位,在实际应用中根据需要确定。
2、同步通信方式
在同步通信中,每一数据块开头时发送一个或两个同步字符,使发送与接收双方取得同步。数据块的各个字符间取消了起始位和停止位,所以通信速度得以提高,见图7一3。同步通信时,如果发送的数据块之间有间隔时间,则发送同步字符填充。
三、串行通信的数据通路形式
串行数据通信共有以下几种数据通路形式。
1、单工(Simplex)形式
单工形式的数据传送是单向的。通信双方中一方固定为发送端,另一方则固定为接收端。单工形式的串行通信,只需要一条数据线。如图8.4所示。例如计算机与打印机之间的串行通信就是单工形式,因为只能有计算机向打印机传送数据,而不可能有相反方向的数据传送。
2、全双工(Full-duplex)形式
全双工形式的数据传送是双向的,且可以同时发送和接收数据,因此全双工形式的串行通信需要两条数据线。如图8. 5所示。
3.半双工(Half-duplex)形式
半双工形式的数据传送也是双向的。但任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工形式既可以使用一条数据线,也可以使用两条数据线。如图8.6所示。
四、异步串行通信的信号形式
1、近程通信
近程通信又称本地通信。近程通信采用数字信号直接传送形式,在传送过程中不改变原数据代码的波形和频率。这种数据传送方式称之为基带传送方式。图8. 2就是两台计算机近程串行通信的连接和代码波形图。
2、远程通信
在远程串行通信中,应使用专用的通信电缆,但出于经济考虑也可以使用电话线作为传输线。如图8.3所示。远距离直接传送数字信号,信号会发生崎变,因此要把数字信号转变为模拟信号再进行传送。信号形式的转变通常使用频率调制法,即以不同频率的载波信号代表数字信号的两种不同电平状态。这种数据传送方式就称之为频带传送方式。
调制器:把电平信号调制为频率信号
解调器:把频率信号解调为电平信号
在远程串行通信线路的两端都应设置调制器和解调器,并且把二者合在一起称之为调制解调器(Modem)。
1270Hz 或2225Hz mark
1070Hz或2025Hz space
第二节 MCS-51 串行结构与工作原理
一、 串行口结构
如上所述,MCS - 51串行1/O接口的基本工作是:发送时,将CPU送来的并行数据转换成一定格式的串行数据,从引脚TXD(P3.1)上按规定的波特率逐位输出;接收时,要监视引脚RXD(P3.0),一旦出现起始位“0”,就将外围设备送来的一定格式的串行数据转换成并行数据,等待CPU读人。
接收缓冲器是双缓冲的,是为了避免在接收下一帧数据之前,CPU未能及时响应接收器的中断,把上帧数据读走,而产生两帧数据重叠的问题而设置的双缓冲结构。对于发送缓冲器,为了保持最大传输率,一般不需要双缓冲,这是因为发送时CPU是主动的,不会产生写重叠的问题。
二、串行接口控制与状态寄存器
1、串行口控制寄存器SCON
功能说明如下:
·SM0、SM1—串行口工作方式选择位
其状态组合所对应的工作方式为:
·SM2—多机通信控制位
SM2位主要用于方式2和方式3。当串行口方式2或方式3接收时,如SM2=1,则只有当接收到的第九位数据(RB8)为1,才将接收到的前8位数据送入SBUF,并置位RI产生中断请求;否则,将接收到的前8位数据丢弃。而当SM2=0时,则不论第九位数据为0还是为1,都将前8位数据装入SBUF中,并产生中断请求。
·REN—允许接收位
REN=0 禁止接收
REN=1 允许接收
该位由软件置位或复位。
·TB8 —发送数据位8
在方式2和方式3时,TB8 的内容是要发送的第9位数据,其值由用户通过软件设置。在双机通信时,TB8 一般作为奇偶校验位使用;在多机通信中,常以TB8 位的状态表示主机发送的是地址帧还是数据帧,且一般约定:TB8 =0为数据帧 TB8 =1为地址帧。
·RB8 —接收数据位8
在方式2或方式3时,RB8 存放接收到的第9位数据,代表着接收数据的某种特征(与TB8 的功能类似),故应根据其状态对接收数据进行操作。
·TI—发送中断标志
当方式0时,发送完第8位数据后,该位由硬件置位。在其它方式下,于发送停止位之前,由硬件置位。因此TI=1,表示帧发送结束,其状态既可供软件查询使用,也可请求中断。TI位由软件清“0”。
·RI—接收中断标志
当方式0时,接收完第8位数据后,该位由硬件置位。在其它方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束。其状态既可供软件查询使用,也可以请求中断。RI位由软件清“0”。
2、电源控制寄存器PCON
SMOD—串行口波特率的倍增位
当SMOD=1时,串行口波特率加倍。系统复位时,SMOD=0。
3、中断允许寄存器IE
ES=0 禁止串行中断
ES=1 允许串行中断
第三节 波特率设计
一、串行接口的功能
MCS - 51单片机中的异步通信串行接口能方便地与其他计算机或传送信息的外围设备(如串行打印机、CPU终端等)实现双机、多机通信。
串行口有4种工作方式,见表7一1。
方式0并不用于通信,而是通过外接移位寄存器芯片实现扩展并行1/O接口的功能。该方式又称为移位寄存器方式。
方式1、方式2、方式3都是异步通信方式。
方式1是8位异步通信接口。一帧信息由10位组成,其格式见图7一2a。方式1用于双机串行通信。
方式2、方式3都是9位异步通信接口、一帧信息中包括9位数据,1位起始位,1位停止位,其格式见图7一2b。方式2、方式3的区别在于波特率不同,方式2、方式3主要用于多机通信,也可用于双机通信。
二、波特率的设定
方式1的波特率是可变的,以定时器T1作波特率发生器使用,其值由定时器1的计数溢出率来决定,其公式为:
2smod
波特率= ×(定时器1溢出率)
32
当定时器1作波特率发生器使用时,选用工作方式2(即8位自动加载方式)。假定计数初值为X,则计数溢出周期为:
12
×(256一X)
fosc
溢出率为溢出周期的倒数。
则波特率计算公式为:
2smod fosc
波特率= ×
32 12×(256一X)
实际使用时,总是先确定波特率,再计算定时器1的计数初值,然后进行定时器的初始化。根据上述波特率计算公式,得出计数初值的计算公式为:
fosc×2smod
X=256-
384×波特率
第四节 串行口应用举例
例1 使用CD4094的并行输出端接8支发光二极管,利用它的串入并出功能,把发光二极管从左向右依次点亮,并反复循环之。假定发光二极管为共阴极型,则电路连接如图所示。
分析:使用方式0实现数据的移位输入输出时,实际上是把串行口变成为并行口使用。串行口作为并行输出口使用时,要有“串入并出”的移位寄存器(例如CD4094或74LS164,74HC164等)配合。
在方式0下,是把串行口作为同步移位寄存器使用,这时以RXD(P3.0)端作为数据移位的入口和出口,而由TXD(P3.1)端提供移位时钟脉冲。移位数据的发送和接收以8位为一帧,低位在前高位在后。
使用查询方法完成的参考程序如下:
MOV SCON , #00H;串行口方式0工作
CLR ES;禁止串行中断
MOV A,#80H;发光管从左边亮起
DELR: CLR P1.0;关闭并行输出
MOV SBUF,A;串行输出
JNB TI,$;状态查询
SETB P1.0;开启并行输出
ACALL DELAY;状态维持
CLR TI;清发送中断标志
RR A;发光组合右移
AJMP DELR;继续
例2 设计一个发送程序,将片内RAM50H~5FH中的数据串行发送,串行口设定为方式2状态,TB8作奇偶校验位。在数据写人发送缓冲器之前,先将数据的奇偶位P写入TB8,这时第9位数据作奇偶校验用。
程序清单如下
TRT:MOV SCON,#80H;方式2设定
MOV PCON,#80H;取波特率为fosc/32
MOV R0,#50H
MOV R7,#10H;数据长度10H
LOOP:MOV A,@R0;取数据送A
MOV C,PSW.0;
MOV TB8,C
MOV SBUF,A;数据送SBUF,启动发送
WAIT:JBC TI,CONT;判断发送中断标志
SJMP WAIT
CONT:INC R0
DJNZ R7,LOOP
RET
例3 设计一个接收程序,将接收的16个字节数据送人片内RAM50H~5FH单元中。设串行口方式3状态工作,波特率为2400。定时/计数器1作波特率发生器时,SMOD=0,计数常数为F4H。
程序清单如下:
RVE:MOV TMOD,#20H;T1编程为方式2定时状态
MOV TH1,#0F4H;计数常数送T1
MOV T11,#0F4H
SETB TR1;启动T1
MOV R0,#50H
MOV R7,#10H;数据长度l OH-R7
MOV SCON,#0D0H;串行口编程方式3接收
MOV PCON,#00H;置SMOD=0
WAIT:JBC RI,PRI;等待接收到数据
SJMP WAIT
PRI:MOV A,SBUF;奇偶校验判P=RB8?
JNB PSW.0,PNP
JNB RB8,PER
SJMP RIGHT
PNP:JB RB8,PER
RIGHT:MOV @R0,A;数据送缓冲器
INC R0
DJNZ R7,WAIT;判断数据块接收完否?
CLR PSW.5;正确接收完16个字节置标志位
RET
第九章 存储器与存储器扩展
第一节 MCS-51 单片机扩展及系统结构
一、单片机系统的扩展结构
扩展系统是以单片机为核心进行的;扩展内容包括ROM、RAM和 I/O接口电路等;扩展是通过系统总线进行的,通过总线把各扩展部件连接起来,并进行数据、地址和信号的传送,要实现扩展首先要构造系统总线。
1 、系统总线
总线:连接计算机各部件的一组公共信号线。MCS- 51使用的是并行总线结构,按其功能通常把系统总线分为三组,即地址总线、数据总线和控制总线。
1)地址总线AB
在地址总线上传送的是地址信号,用于存储单元和I/O端口的选择。地址总线是单向的,地址信号只能由单片机向外送出。 地址总线的数目决定着可直接访问的存储单元的数目,例如n位地址,可以产生2n 个连续地址编码,因此可访问2n个存储单元,即通常所说的寻址范围为2n地址单元。
2)数据总线(Data Bus,简写DB)
数据总线用于在单片机与存储器之间或单片机与I/O端口之间传送数据。单片机系统数据总线的位数与单片机处理数据的字长一致。
例如MCS- 51单片机是8位字长,所以数据总线的位数也是8位。
数据总线是双向的,可以进行两个方向的数据传送。
3)控制总线(Control Bus,简写CB)
控制总线实际上就是一组控制信号线,包括单片机发出的,以及从其它部件传送给单片机的。
二、三总线的扩展方法
1、以P0口的8位口线作地址/数据线
P0口线既作地址线使用又作为数据线使用,具有双重功能,因此需采用复用技术,对地址和数据进行分离,为此在构造地址总线时要增加一个8位锁存器。首先由锁存器暂存并为系统提供低8位地址,其后P0口线就作为数据线使用。通常使用的锁存器有74LS273或74LS373。
2、以P2口的口线作高位地址线
如果使用P2口的全部8位口线,再加上P0口提供的低8位地址,则形成了完整的16位地址总线。使单片机系统的扩展寻址范围达到64 K单元。
三、控制信号
除了地址线和数据线之外,在扩展系统中还需要单片机提供一些控制信号线,以构成扩
展系统的控制总线。其中包括:
*使用ALE作地址锁存的选通信号,以实现低8位地址的锁存;
*以/PSEN信号作扩展程序存储器的读选通信号;
*以EA信号作为内外程序存储器的选择信号;
*以/RD和/WR作为扩展数据存储器和1/O端口的读写选通信号。
第二节 扩展存储器编址及映像
一、存储器编址技术
编址:使用系统提供的地址线,通过适当的连接,使得一个编址唯一对应存储器中一个存储单元。
1、线选法
直接以系统的高地址位作为存储芯片的片选信号。适用小规模系统的存储器扩展。
2、译码法
使用译码器对系统的高位地址进行译码,以其译码输出作为存储芯片的片选信号。适用于大容量多芯片存储器扩展。
常用的译码器:
&# 8226;74LS139译码器
/G为使能端,低电平有效。
A、B为选择端,即译码输入。
Y0、Y1、Y2、Y3为译码输出信号,低电平有效。
&# 8226;74LS138译码器
/E1、/E2、E3为使能端, /E1、/E2低电平有效,E3高电平有效。
A、B、C为选择端,即译码输入。
Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7为译码输出信号,低电平有效。
第三节 程序存储器扩展
一、只读存储器概述
单片机的程序存储器扩展使用只读存储器芯片。只读存储器简称为ROM (Read Only Memory)。 ROM中的信息一旦写入之后就不能随意更改,特别是不能在程序运行过程中写入新的内容,而只能读存储单元内容,故称之为只读存储器。
1.芯片2716结构
2716的逻辑结构如图5.6所示,其信号引脚排列如图5.7所示。
·A0—A11------位地址。
O7—O0 ------数据读出。
CE /PGM-----双重功能控制线。当使用时,它为片选信号(/CE),低电平有效。当编程时,它为编程控制信号(PGM),用于引入编程脉冲。
/OE-----输出允许信号。当/OE=0时,输出缓冲器打开,被寻址单元的内容才能被读出。
VPP-----编程电源。当芯片编程时,该端加+25V编程电压;当芯片使用时,该端加+5V电源。
2.2716的工作方式
2716共有5种工作方式,由各信号的状态组合来确定。各种工作方式的基本情况如表5
一3所示
·读方式
当/CE及/OE均为低电平, VPP=+5 V 2716芯片被选中并处于读出工作方式。这时被寻址单元的内容经数据线O7—O0 读出。
·未选中方式
当/CE为高电平时,芯片不被选中,其数据线输出为高阻抗状态。
·编程方式
当VPP端加25 V高电压,/OE加TTL高电平时,2716处于编程工作方式,进行信息的重新写入。这时编程地址和写入数据分别由A0—A11及O7—O0 引入。
二、应用举例
2716芯片的地址范围是:
最低地址8000 H
(A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0=1000000000000000)
最高地址87FFH
(A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0=1000011111111111)
第四节 数据存储器扩展举例
一、静态RAM6116
下面以6116为例进行说明,其引脚如图所示。6116芯片为24引脚双列直播封装。其中:
·A0—A10 地址线 ·/WE 写选通信号
·D7—D0 数据线 ·Vcc 电源(十5 V)
·/CS 片选信号 ·GND 地
·/OE 数据输出允许信号
6116共有4种工作方式,如表5一4所示。
二、单片数据存储器扩展
使用一片6116实现的2KB RAM扩展,其电路连接如图所示。
三、多片数据存储器扩展
第十章 MCS 一 51 单片机并行 I/O 接口的扩展
第一节 概 述
一、为什么要扩展I/O接口
在单片机系统中主要有两类数据传送操作,一类是单片机和存储器之间的数据读写操作;另一类则是单片机和其它设备之间的数据输入/输出(I/O)操作。
存储器是半导体电路,与单片机具有相同的电路形式和信号形式,能相互兼容直接使用。存储器与单片机之间的连接十分简单,主要包括地址线、数据线、读写选通信号。
单片机与控制对象或外部设备之间的数据传送却十分复杂。其复杂性主要表现在以下几个方面:
1、速度差异大
慢速设备如开关、继电器、机械传感器等,每秒钟传送不了一个数据;而高速采样设备,每秒钟要传送成千上万个数据位。面对速度差异如此之大的各类设备,单片机无法以一个固定的时序同它们按同步方式协调工作。
2、设备种类繁多
单片机应用系统中的控制对象或外部设备种类繁多,它们既可能是机械式的,又可能是机电式的,还可能是电子式的。由于不同设备之间性能各异、对数据的要求互不相同,因此无法按统一格式进行数据传送。
3、数据信号形式多种多样
单片机应用系统所面对的数据形式也是多种多样的,例如既有电压信号,也有电流信号;既有数字形式,还有模拟形式。
二、扩展I/O接口电路的功能
在单片机应用系统中,扩展1/O接口电路主要是针对如下几项功能:
1.速度协调
由于速度上的差异,使得单片机的I/O数据传送只能以异步方式进行。设备是否准备好,需要通过接口电路产生或传送设备的状态信息,以此实现单片机与设备之间的速度协调。
2.输出数据锁存
在单片机应用系统中,数据输出都是通过系统的公用数据通道(数据总线)进行的,单片机的工作速度快,数据在数据总线上保留的时间十分短暂,无法满足慢速输出设备的需要。在扩展I/O接口电路中应具有数据锁存器,以保存输出数据直至能为输出设备所接收。
3.输入数据三态缓冲
数据输入时,输入设备向单片机传送的数据要通过数据总线,但数据总线是系统的公用数据通道,上面可能“挂”着多个数据源,工作比较繁忙。为了维护数据总线上数据传送的“次序”,因此只允许当前时刻正在进行数据传送的数据源使用数据总线,其余数据源都必须与数据总线处于隔离状态。为此要求接口电路能为数据输入提供三态缓冲功能。
4.数据转换
单片机只能输入和输出数字信号,但是有些设备所提供或所需要的并不是数字信号形式。为此,需要使用接口电路进行数据信号的转换,其中包括:模/数转换和数/模转换。
三、MCS一51单片机常用的扩展器件
MCS一51单片机常用的扩展器件有如下三类:
常规逻辑电路、锁存器,如74LS377,74LS245。
MCS—80/85并行接口电路,如8255。
RAM/IO综合扩展器件,如8155。
第二节 简单 I/O 接口的扩展
当所需扩展的外部1/O口数量不多时,可以使用常规的逻辑电路、锁存器进行扩展。这一类的外围芯片一般价格较低而且种类较多,常用的如:74LS377、74LS245、74LS373、74LS244、74LS273、74LS577、74LS573。
一、74LS377芯片及扩展举例
下图是74LS377的引脚图和功能表。74LS377是一种8D触发器,它的/E端是控制端、CLK端是时钟端,当它的/E端为低电平时只要在CLK端产生一个正跳变,D1—D7将被锁存到QO—Q7端输出,在其他情况下Q0—Q7端的输出保持不变。
如图使用了一片74LS377扩展输出口,如果将未使用到的地址线都置为1则可以得到该片74LS377的地址为7FFFH。如果要从该片74LS377输出数据到单片机中可以执行如下指令:
MOV DPTR,#7FFFH
MOVX @DPTR,A
二、74LS245芯片及扩展举例
图是74LS245的引脚图和功能表。74LS245是一种三态输出的8总线收发驱动器,无锁存功能。它的G端和DIR端是控制端,当它的G端为低电平时,如果DIR为高电平,则74LS245将A端数据传送至B端;如果DIR为低电平,则74LS245将B端数据传送至A端。在其他情况下不传送数据,并输出高阻态。
如图使用了一片74LS245扩展输人口,如果将未使用到的地址线都置为1,则可以得到该片74LS245的地址为7FFFH。如果单片机要从该片74LS245输人数据,可以执行如下指令:
三、74LS244芯片及扩展举例
74LS244芯片的引脚排列:
该芯片内部有2个4位的三态缓冲器,一片74LS244可以扩展一个8位输入口,其电路连接如图7.10所示。使用时以/CE作为数据选通信号。
应用举例:
1、使用多片74LS244实现多个输入口扩展的电路连接如图所示,使用或门74LS32的输出作为输入口的选通信号。或门的两个输入端一个是读选通信号/RD,另一个则为P2口的一条口线(线选法)。当它们都为低电平时,才能得到一个有效的输入选通,使一片74LS244的8位数据进行输入。
2、一个拨盘可产生一个BCD码形式的十进制数(4位)。现有A、B、C、D4个拨盘,要求把它们产生的BCD码数依次输入到通用寄存器R4(B、A)、R5(D、C)中去。每个BCD码需4条输入线,4个BCD码则共需16条愉入线,即2个8位口(1#口和2#口),因此用两片74LS244就可构成其输入接口,电路连接如图7.12所示。
P2.7、P2.6分别作为1# 口和2# 口的地址选通线(线选法)。假定其它地址线为1,则1# 输入口地址为7FFFH,2# 输入口地址为0BFFFH。
数据输入程序:
MOV DPTR,#7FFFH;1#口地址
MOVX A,@DPTR;从拨盘取数
MOV R4,A
MOV DPTR,#0BFFFH;2#口地址
MOVX A,@DPTR;从拔盘取数
MOV R5,A
第三节 8155 可编程接口及扩展技术
8155具有3个可编程I/O口,其中2个口(A和B)为8位口,1个口(C)为6位口,256单元的RAM和1个14位计数结构的定时器/计数器。
一、8155芯片结构
在与单片机接口的方向,8155提供如下信号:
n AD7 —AD0 地址数据复用线。
n ALE—地址锁存信号。除进行AD7 —AD0 的地址锁存控制外,还用于把片选信号/CE和IO/M等信号进行锁存。
n /RD—读选通信号。
n /WR—写选通信号。
n /CE—片选信号。
n IO/M— I/O与RAM选择信号。IO/M=0对RAM进行读写;IO/M=l时I/O口进行读写。
n RESET—复位信号。8155以600 ns的正脉冲进行复位,复位后A、B、C口均置为输入方式。
二、I/O口及其工作方式
PA和PB是8位通用输入/输出口,主要用于数据的I/O传送,是数据口,只有输入/输出两种工作方式。
PC口为6位口,它既可作数据口用于数据的I/O传送,也可作控制口,用于传送控制信号和状态信号。PC口共具有4种工作方式,即:输入方式、输出方式、PA口控制端口方以及PA和PB口控制端口方式。
当PA或PB以中断方式进行数据传送时,所需的联络信号由PC提供,各联络信号如表:
联络信号共有3个,其中:、
·INTR—中断请求信号(输出),高电平有效。送给MCS- 51单片机的外中断请求信号。
·BF—缓冲器满状态信号(输出),高电平有效。
·STB—选通信号(输入),低电平有效。数据输入操作时STB是外设送来的选通信号;数据输出时STB是外设送来的应答信号。
三、RAM单元及I/O口编址
8155共有256个RAM单元,加上6个可编址的端口,这6个端口是:命令/状态寄存器、PA口、PB口、PC口、定时器/计数器低8位以及定时器/计数器高8位。8155引入8位地址AD7-AD0,无论是RAM还是可编址口都使用这8位地址进行编址。如表所示。
四、8155与MCS-51单片机的连接
信号的对应关系如下:
举例:
五、8155的命令字及状态字的格式及用法
8155的命令字和状态字寄存器共用一个地址,命令字寄存器只能写不能读,状态字寄存器只能读不能写。
六、8155的定时器/计数器
1.定时器/计数器的计数结构
8155的定时器/计数器是一个14位的减法计数器,由两个8位寄存器构成,以其中的低14位组成计数器,两个高位(M2、M1)用于定义计数器输出的信号形式。
8155定时器/计数器的计数结构如下:
2.定时器/计数器的使用
8155的定时器/计数器与MCS-51单片机芯片内部的定时器/计数器在功能上是完全相同的,即同样具有定时和计数两种功能。但是在使用上却与MCS- 51的定时器/计数器有许多不同之处。具体表现在:
·8155的定时器/计数器是减法计数,MCS-51的定时器/计数器是加法计数。确定计数初值的方法是不同的。
·MCS - 51的定时器/计数器有多种工作方式。8155的定时器/计数器则只有一种固定的工作方式,即14位计数,通过软件方法进行计数值加载。
·MCS- 51的定时器/计数器有两种计数脉冲。当定时工作时,由芯片内部按机器周期提供固定频率的计数脉冲;当计数工作时,从芯片外部引入计数脉冲。8155的定时器/计数器,不论是定时工作还是计数工作,都由外部提供计数脉冲, 其信号引脚就是TIMER IN。
·MCS- 51的定时器/计数器,计数溢出自动置位TCON寄存器的计数溢出标志位(TF),供用户以查询或中断方式使用;但8155的定时器/计数器,计数溢出时向芯片外边输出一个信号(TIMER OUT)。这一信号还有脉冲和方波两种形式,供用户进行选择。具体由M2M1,两位定义:
M2M1=00单个方波
M2M1=01连续方波
M2M1=10单个脉冲
M2M1=11连续脉冲<, /DIV>
这4种输出形式如图7.26所示。
3.定时器/计数器的控制
8155定时器/计数器的工作方式由命令字中的高两位D7D6进行控制。具体说明知下:
D7D6=00不影响计数器工作。
D7D6=01停止计数。如计数器未启动则无操作,知计数器正运行则停止计数。
D7D6=10达到计数值(计数器减为0)后停止。
D7D6=11启动。如计数器没运行,则在装入计数值后开始计数;如计数器已运行,则在当前计数值计满后,再以新的计数值进行计数。
七、应用举例
例 要求使用8155定时器/计数器对计数脉冲进行千分频,即计数1000后,TIMER OUT端电平状态变化,并重新送数以产生连续方波。此外假定PA口为输入方式,PB口为输出方式,PC口为输入方式,禁止中断。请编写初始化程序。
解 此题共两项任务:计数初值的确定和命令字的确定。
计数器的最高两位M2M1=01,计数器的其它14位装入计数初值。由于8155计数器是减法计数,所以计数初值应为十进制数1000,十六进制数为03E8H。则:计数器高位字
节为43H,计数器低位字节为0E8H,按上述要求,8155的命令字为0C2H。各位状态为:
由于命令字的高两位D7D6=11,因此在装入计数值后,计数器即开始计数。假定命令/状态寄存器地址为0FD00H。则初始化程序为:
MOV DPTR,#0FD00H;命令/状态寄存器地址
MOV A,#0C2H;命令字
MOVX @DPTR,A;装入命令字
MOV DPTR,#0FD04H;计数器低8位地址
MOV A,#0E8H;低8位计数位
MOVX @DPTR,A;写入计数值低8位
INC DPTR;计数器高8位地址
MOV A,#43H;高8位计数值
MOVX @DPTR,A;写入计数值高8位
例:若A口定义为基本的输人方式,B口定义为基本的输出方式,对输入脉冲进行200分频,写出8155的1/O初始化程序。
RAM字节地址:7E00H-7EFFH(P2.0=0)
I/O接口地址:
命令状态口:7F00H
PA口:7F01H
PB口:7F02H
PC口:7F03H
定时器低8位:7F04H
定时器高8位:7F05H
ORG 1000H
START:MOV SP,#60H
MOV R6,#0FFH
DJNZ R6,START
MAIN:MOV DPTR,#7F04H;指向定时器低8位
MOV A,#0C8H;计数常数OC8H
MOVX @DPTR,A;计数常数低8位装人
INC DPL;指向定时器高8位
MOV A,#40H;设定时器连续方波输出
MOVX @DPTR,A;指向命令状态口
MOV A,# 0C2H;命令控制字设定
MOVX @DPTR,A;A口为基本的输人方式,B口为基本的输出方式,开定时器
例 如果要实现L0—L3灭,L4—L7亮,编制程序。
LED:MOV DPTR,#7FFOH;写方式控制字,PA口为基本1/O口输出
MOV A,#01H
MOVX @DPTR,A
MOV DPTR,#7FFIH;往PA口写数,控制灯
MOV A,#0FH
MOVX @DPTR,A
RET
例 如图9-18,要求使用8155的定时器/计数器使得TO口输出的脉冲周期是TI输人脉冲周期的10倍。试编程实现。
图中,命令/状态字地址:7FF0H,定时器/计数器低、高字节地址:7FF4H、7FF5H。可以编制如下子程序:
PUS:MOV DPTR,#7FF4H;写定时器/计数器工作方式和初值,方式1初值10
MOV A,#10
MOVX @DPTR,A
MOV DPTR,#7FF5H
MOV A,#40H
MOVX @DPTR,A
MOV DPTR,#7FF0H;启动定时器/计数器
MOV A,#C0H
MOVX @DPTR,A
RET
第十一章 输入与输出设备及其接口技木
在单片机应用系统中,通常都有操作面板。操作人员通过操作面板实现与应用系统的信息交流,包括下达命令、修改程序和参数、干预应用系统的状态与显示运行状态和运行结果。
第一节 概 述
单片机应用系统的类型多种多样,如智能仪表、控制单元、数据采集系统、分布式检测系统。但是,对于各种类型的单片机应用系统,其人机通道配置的集合如图7-1所示。
第二节 显示及显示接口
在单片机系统中,常用的显示器有:发光二极管显示器,简称LED (Light Emitting Diode);液晶显示器,简称LCD (Liquid Crystal Display);荧光管显示器。三种显示器中,以荧光管显示器亮度最高,发光二极管次之,而液晶显示器最弱,为被动显示器,必须有外光源。
一、发光二极管及LED 显示器
发光二极管是由半导体发光材料做成的PN结,只要在发光二极管两端通过正向电流5-20mA就能达到正常发光。LED的发光颜色通常有红、绿、黄、白,其外形和电气图形符号如图7-2所示。单个LED通常是通过亮、灭来指示系统运行状态和用快速闪烁来报警。
通常所说的LED显示器由7个发光二极管组成,因此也称之为七段LED显示器,其
排列形状如图所示。显示器中还有一个圈点型发光二极管(在图中以dp表示),用于显示小数点。通过七个发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。
LED显示器中的发光二极管共有两种连接方法:
·共阳极接法
把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接+5V。阴极端输入低电平的段发光二极管导通点亮,输入高电平的则不点亮。
·共阴极接法
把发光二极管的阴极连在一起构成公共阴极。使用时会共阴极接地,阳极端输入高电平的段发光二极管导通点亮,输入低电平的则不点亮。
用LED显示器显示十六进制数的字型代码如下表所示:
二、七段LED 显示器的工作原理
七段LED显示器需要由驱动电路驱动。在七段LED显示器中,共阳极显示器,用低电平驱动;共阴极显示器,用高电平驱动。点亮显示器有静态和动态两种方式。
1.静态显示器
所谓静态显示,就是当显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。这种显示方法的每一位都需要有一个8位输出口控制。
静态显示器的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度高,控制系统在运行过程中,仅仅在需要更新显示内容时,CPU才执行一次显示更新子程序,这样大大节省了CPU的时间,提高了CPU的工作效率;缺点是位数较多时,所需的I/O口太多,硬件开销太大。
举例:作为MCS-51串行口方式0输出的应用,可以在串行口上扩展多片串行输人并行输出的移位寄存器74LS164作为静态显示器接口,图10-2给出了8位共阳极静态显示器的逻辑接口。设所显示的字符查表编程量参数放在相应的显示缓冲区单元中。
下面列出更新显示器子程序清单:
DISPLAY:MOV R7,#8;8位显示计数器
MOV R0,#78H;78H-7FH为显示器缓冲区
MOV DPTR,#TABLE;显示字形码表首地址
LOOP1:MOV A,@R0;取出要显示的编程量参数
INC R0;指向缓冲区下一地址
MOVC A,@A+DPTR;取出显示字形码
MOV SBUF,A;送出该LED上的字形码
LOOP2:JNB TI,LOOP2;输出完否?
CLR TI;完,清发送中断标志
DJNZ R7,LOOP1;8位显示未完,继续
RET
TABLE:DB 0C0H,0F9H,0A4H,0BH,99H;0,1,2,3,4
DB 92H,82H,0FBH,80H,90H;5,6,7,8,9
DB 88H,83H,0C6H,0A1H,86H;A, b,C, d,E
DB 8EH,0BFH,8CH,0F7H,0FFH;F,一,P,一,暗
2.动态显示器
所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。在同一时刻只有一位显示器在工作(点亮),利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,看到的却是多个字符“同时”显示。
显示器亮度既与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参数,可实现亮度较高较稳定的显示。
动态显示器的优点是节省硬件资源,成本较低。但在控制系统运行过程中,要保证显示器正常显示,CPU必需每隔一段时间执行一次显示子程序,占用CPU大量时间,降低了CPU的工作效率,同时显示亮度较静态显示器低。
若显示器的位数不大于8位,则控制显示器公共极电位只需一个8位I/O口(称为扫描口或字位口),控制各位LED显示器所显示的字形也需要一个8位口(称为数据口或字形口)。
举例:
对于图10一3所示的6位LED显示器,在单片机内部RAM中设置6个显示缓冲单元78H-7DH,存放6位欲显示的字符数据,8155的端口A扫描输出总是只有一位为高电平,即6位显示器中仅有一位公共阴极为低电平(只选中一位),其他位为高电平,8155B口输出相应位的显示字符的段数据使该位显示出相应字符,其他位为暗。依次改变端口A输出为高电平的位及端口B输出对应的段数据,6位LED显示器就显示出缓冲器中字符数据所确定的字符。显示子程序流程图如图10一4所示。
程序清单如下:
KDIZHI DATA 7F00H:8155命令口地址(假定)
ADIZHI DATA 7F01H;8155A口地址(假定)
BDIZHI DATA 7F02H;8155B口地址(假定)
DSP:MOV R0,#78H;显示数据缓冲区首地址送RO
MOV A,#03H
MOV DPTR,#KDIZHI
MOVX@DPTR,A;8155初始化,A口为输出口,B口为输出口
MOV R3,#00100000B;使显示器最左边位亮
LPl:MOV DPTR,#ADIZHI;数据指针指向A口
MOV A,R3
MOVX @DPTR,A;送扫描值
INC DPTR;数据指针指向B口
MOV A,@R0;取欲显示数据的字形码表位序
ADD A,#0DH;加上查表指令地址偏移量
MOVC A,@A+PC;取出字形码
MOVX @DPTR,A;送出显示
ACALL DELAY;调用延时子程序
INC R0;指向下一个显示缓冲区地址
MOV A,R3
JB ACC.0,LP2;扫描到第六个显示器否?
RR A;未到,扫描码右移1位
MOV R3,A
AJMP LPl
LP2:RET
TAB:DB 3FH,06H,5BH,4FH,66H, 6DH;0,1,2,3,4,5
DB 7DH,07H,7FH,67H,77H,7CH;6,7,8,9,A, b
DB 39H, 5EH, 79H, 71H:C, d,E,F
DELAY:MOV R7,#02H;延时子程序
DL1:MOV R6,#0FFH
DL2:DJNZ R6,DL2
DJNZ R7,DLl
RET
说明:若某些字符的显示需要小数点(dp)及需要数据的某些位闪烁时(亮一段时间,熄一段时间),则可建立小数点位置及数据闪烁位置标志单元,指出小数点显示位置或闪烁位置。当显示扫描到相应位时(字位选择字与小数点位置字或闪烁位置字重合),在该位字形码中加人小数点(点亮dp段)或控制该位闪烁(定时给该位送字形码或熄灭码),完成带小数点或闪烁字符显示。
第三节 键盘接口技术
键盘是由若干个按键组成的开关矩阵,它是最简单的单片机输人设备,操作员可以通过键盘输人数据或命令,实现简单的人机通信。若键盘闭合键的识别是由专用硬件实现的,则称为编码键盘;若用软件实现闭合键识别的,则称为非编码键盘。非编码键盘又分为行列式和独立式两种。本节主要讨论非编码键盘的工作原理、接口技术和程序设计。
键盘接口应有以下功能:
·键扫描功能,即检测是否有键闭合;
·键识别功能,确定被闭合键所在的行列位置;
·产生相应的键的代码(键值)功能;
·消除按键抖动及对付多键串按(复键)功能。
一、键盘工作原理
1、独立式键盘
独立式是一组相互独立的按健,这些按健可直接与单片机的1/O口连接,即每个按健独占一条口线,接口简单。独立式键盘因占用单片机的硬件资源较多,只适合按键较少的场合。
举例:一个具有4个按键的独立式键盘如图10一5a所示,每一个按键的一端都接地,另一端接8032的I/O口。从图中可以看出,独立式键盘每一按键都需要一根I/O线,占用8032的硬件资源较多。
2、矩阵式健盘
也称行列式健盘,因为健的数目较多,所以健按行列组成矩阵。
键盘接口处理的内容:
1).键扫描
键盘上的键按行列组成矩阵,在行列的交点上都对应有一个键。为判定有无键健被按下(闭合健)以及被按健的位里,可使用两种方法:扫描法和翻转法。以扫描法为例,说明查找闭合健的方法。
首先是判定有没有健被按下。如图7. 31所示,健盘的行线一端经电阻接+5V 电源,另一端接单片机的输入口线。各列线的一端接单片机的输出口线,另一端悬空。为判定有没有键被按下,可先经输出口向所有列线输出低电平,然后再输入各行线状态。若行线状态皆为高电平,则表明无健按下;若行线状态中有低电平,则表明有健被按下。
然后再判定被按键的位置。判定健位置的扫描是这样进行的:先使输出口输出0FEH,然后输入行线状态,测试行线状态中是否有低电平的。如果没有低电平,再使输出口输出0FDH,再测试行线状态到输出。输出0FBH时,行线中有状态为低电平者,则闭合健找到),通过此次扫描的列线值和行线值就可以知道闭合健的位置。
2)去抖动
常用键盘的键是一个机械开关结构,被按下时,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动,如图7.32所示。抖动时间长短与健的机械特性有关,一般为5~10 ms。而健的闭合时间和操作者的按健动作有关,大约为十分之几秒到几秒不等。
去抖动有硬件和软件两种方法。硬件方法就是在健盘中附加去抖动电路,从根上消除抖动产生的可能性;而软件方法则是采用时间延迟以躲过抖动(大约延时20-30ms即可),待行线上状态确定之后,再进行状态输入。一般为简单起见多采用软件方法。
3)键码计算
以键的排列顺序安排健号,则键码的计算公式为:
键码=行首号+列号
4)等待健释放
计算健码之后,再以延时后进行扫描的方法等待健释放。等待健释放是为了保证健的一次闭合仅进行一次处理。
二、键盘接口的控制方式
在单片机的运行过程中,何时执行健盘扫描和处理,可有以下3种情况:
·随机方式,每当CPU空闲时执行健盘扫描程序。
·中断方式,每当有健闭合时才向CPU发出中断请求,中断响应后执行健盘扫描程序。
·定时方式,每隔一定时间执行一次健盘扫描程序,定时可由单片机的定时器完成。
三、应用举例
1.接口电路逻辑图
以8155作8×4健盘的接口为例。如图7.35所示。
假定A口地址为0101H,C口地址为0103H.
2.判定有无闭合键的子程序
判定有无健闭合的子程序为KSl,供在健盘扫描程序中调用。程序如下:
KSl:MOV DPTR,#0101H
MOV A,#00H;A口送00H
MOVX @DPTR,A
INC DPTR
INC DPTR;建立C口地址
MOVX A,@DPTR;读C口
CPL A;A取反,无健按下则全“0”
ANL A,#0FH;屏蔽A高半字节
RET
执行KSl子程序的结果是:有闭合健则(A)≠0,无闭合健则(A)=00
3.键盘扫描程序
假定本系统中显示程序为DIR,执行时间约为6 ms.
健盘扫描程序如下:
KEYl:ACALL KSl;检查有健闭合否
JNZ LK1;A非0则转移
ACALL DIR,显示一次(延时6 ms)
AJMP KEYl
LK1:ACALL DIR;有健闭合二次延时
ACALL DIR;共12 ms去抖动
ACALL KS1;再检查有健闭合否
JNZ LK2,有健闭合,转LK2
ACALL DIR
AJMP KEYl;无健闭合,延时6 ms后转KEYl
LK2:MOV R2,#0FEH;扫描初值送R2
MOVR4,#00H;扫描列号送R4
LK4:MOV DPTR,#0101H;建立A口地址
MOV A,R2
MOVX @DPTR, A;扫描初值送A口
INC DPTR
INC DPTR;指向C口
MOVX A,@DPTR;读C口
JB ACC.0,LONE;ACC.0=1,第0行无键闭合,转LONE
MOV A,#00H;装第0行行值
AJMP LKP
LONE:JB ACC.1,LTWO;ACC.1=1,第1行无键闭合,转LTWO
MOV A,#08H;装第1行行值
AJMP LKP
LTWO:JB ACC.2,LTHR;ACC.2=1,第2行无键闭合,转LTHR
MOV A,#10H;装第2行行值
AJMP LKP
LTHR:JB ACC.3,NEXT;ACC.3=1,第3行无键闭合则转NEXT
MOV A,#18H;装第3行行值
LKP:ADD A,R4;计算键码
PUSH ACC;保护键码
LK3:ACALL DIR;延时6 ms
ACALL KS1;查键是否继续闭合,若闭合再延时
JNZ LK3
POP ACC;若键起,则键码送A
RET
NEXT:INC R4;扫描列号加1
MOV A,R2
JNB ACC.7,KND;第7位为0,已扫完最高列则转KND
RL A;循环左移一位
MOV R2,A
AJMP LK4;进行下一列扫描
KND:AJMP KEYl;扫描完毕,开始祈的山轮
说明:健盘扫描程序的运行结果是把闭合健的健码放在累加器A中。接下来的程序是根
据健码进行程序转移,转去执行该健对应的操作。
第十二章 输入输出通道接口技术
当以单片机为核心组成实时测控系统时,通常需要对被控对象的状态进行测试和对控制条件进行监测,因此需要通过前向输人通道将被测信号输人单片机系统中。
在科学研究和生产过程中,测控系统的被测参数可以是温度、压力、速度等非电量,也可以是电流、电压、功率和开关量等电量。这些参数信号需通过各类传感器和变送器变换成相应的模拟电量,然后经多路开关汇集送给A/D转换器,转换成相应的数字量送给单片机。经过单片机处理过的数字量,送给D/A转换器,变换成相应的模拟量对被控系统实施控
制和调整,使之处于最佳工作状态,如图8-1所示。
知识要点:
输人输出通道的基本知识,
数字量输入输出通道和模拟量输人输出通道的结构
A/D转换器工作原理和MCS-51系列单片机的连接以及程序设计方法。
D/A转换器工作原理和MCS-51系列单片机的连接以及程序设计方法。
第一节 前向输入通道接口技术
一、概述
被测信号分为数字量和模拟量两种。
1 .数字量输人
数字量包括N位并行数字量、开关量和频率信号。
·N位并行数字量
可以直接送人单片机的1/O接口。若N位数字量并行输人,当N=8时,正好利用一个8位1/O接口输人单片机内;当N<8时,可利用一个8位1/O接口输人CPU,然后将其他位屏蔽即可得到N位数据;当N>8时,输人方式有两种:一种是利用多个8位I/O接口,另一种是利用一个I/O接口多次选通输人。
·开关量
开关量是输入信号为具有TTL电平的状态信号,如继电器的吸合与断开、光电门的导通与截止、限位开关、按钮、转换开关、接触器等电器的触点通断,其信号电平只有高、低两种电平。
图8-2所示是一种开关量检测电路。开关量信号经过了光电隔离,适当选择电阻值,使A点电平符合TTL电平的要求,可以将A点接到单片机I/O接口或经三态门接到单片机数据总线,实现开关量信号输人。
·频率信号
经放大、整形和隔离等处理,即可得到较为理想的矩形波,这种矩形波可直接送人单片机系统,如图8-3所示。
2.模拟量输人
所谓模拟量,就是一些连续变化的物理量,如温度、速度、电压、电流和压力等。这些被测参数,单片机无法直接处理,需要把这些模拟量通过各类传感器和变送器变换成相应的模拟电量,然后经多路开关汇集送给A/D转换器,转换成相应的数字量送给单片机。
模拟量输人通道一般由传感器、放大器、多路模拟开关、采样保持器和A/D转换器组成,其结构形式取决于被测对象的环境、输出信号的类型、数量和大小等,见表8-1。
说明:根据传感器输出信号的大小和类型,选择前向输人通道结构。
大信号模拟电压,能直接满足A/D转换输入要求,则可直接送人A/D转换器,经过A/D转换后再送人单片机。也可通过V/F转换成频率信号送人单片机。但由于频率测量响应速度慢,多用于一些非快速过程参量的测量,这种通道结构的优点是抗干扰能力强,便于远距离传输。
小信号模拟电压,则首先应将该信号电压放大,放大到能满足A/D转换、V/F转换要求的输人电压。
以电流为输出信号的传感器或传感仪表则首先应通过I/V转换,将电流信号转换成电压信号。最简单的I/V转换器就是一个精密电阻,当信号电流流过精密电阻时,其电压降与流过的电流大小成正比,从精密电阻两端取出的电压就是I/V变换后的电压信号。
二、A/D 转换接口技术
A/D转换接口技术的主要内容是合理选择A/D转换器和其他外围器件,实现与单片机的正确连接以及编制转换程序。
A/D转换器(Analog-Digital Converter)是一种能把输人模拟电压或电流变成与其成正比的数字量的电路芯片,即能把被控对象的各种模拟信息变成计算机可以识别的数字信息。
分类:计数器式A/D转换器、双积分式A/D转换器、逐次逼近式A/D转换器和并行A/D转换器。
计数器式A/D转换器结构很简单,但转换速度也很慢,所以很少采用。
双积分式A/D转换器抗干扰能力强,转换精度很高,但速度不够理想,常用于数字式测量仪表中。
逐次逼近式A/D转换器结构不太复杂,转换速度也高。计算机中广泛采用其作为接口电路。
并行A/D转换器的转换速度最快,但因结构复杂而造价较高,故只用于那些转换速度极高的场合。
1 、概述
1)A/D转换器的技术指标:
·量化误差(Quantizing Error)与分辨率(Resolution)。
A/D转换器的分辨率表示输出数字量变化一个相邻数码所需输人模拟电压的变化量,习惯上以输出二进制位数或满量程与2n 之比(其中n为ADC的位数)表示。
例如A/D转换器AD574A的分辨率为12位,即该转换器的输出数据可以用212 个二进制数进行量化,其分辨率为1LSB (1LSB=VFS/212 )。如果用百分数来表示分辨率时,其分辨率为
1/2n ×100%=1/212 ×100%=0.0244%
一个满量程VFS=10V的12位ADC能够分辨输人电压变化的最小值为2.4mV。
量化误差是由于有限数字对模拟数值进行离散取值(量化)而引起的误差。因此,量化误差理论上为一个单位分辨率,即士(1/2)LSB。提高分辩率可减少量化误差。
·转换精度(Conversion Accuracy)。
A/D转换器转换精度反映了一个实际A/D转换器在量化值上与一个理想A/D转换器进行模/数转换的差值,由模拟误差和数字误差组成。
模拟误差是比较器、解码网络中电阻值以及基准电压波动等引起的误差;
数字误差主要包括丢失码误差和量化误差,丢失码误差属于非固定误差,由器件质量决定。
·转换时间与转换速率。
A/D转换器完成一次转换所需要的时间为A/D转换时间,是指从启动A/D转换器开始到获得相应数据所需时间(包括稳定时间)。通常,转换速率是转换时间的倒数,即每秒转换的次数。
2) A/D转换器选择要点
·确定A/D转换器精度及分辨率。
用户提出的测控精度要求是综合精度要求,它包括了传感器精度、信号调节电路精度和A/D转换精度及输出电路、伺服机构精度,而且还包括测控软件的精度。应将综合精度在各个环节上进行分配,以确定对A/D转换器的精度要求,据此确定A/D转换器的位数。通常A /D转换器的位数至少要比综合精度要求的最低分辨率高一位,而且应与其他环节所能达到的精度相适应。
·确定A/D转换器的转换速率。
通常根据被测信号的变化率及转换精度要求,确定A/D转换器的转换速率,以保证系统的实时性要求。用不同原理实现的转换器,其转换速率是不一样的,如积分型的、跟踪比较型的A/D转换器转换速率较慢,转换时间一般为几毫秒到几十毫秒,一般用于温度、压力、流量等缓变参量的检测。计算机中广泛采用逐次逼近式A/D转换器为中速转换器,常用于工业多通道单片机测控系统等。并行A/D转换器的转换速度最快,故常用于如实时瞬态记录等转换速度极高的场合。
·确定环境参数。
根据使用环境条件,确定A/D转换芯片要求的一些环境:工作温度、功耗和可靠性等级等。
2、A/D转换典型芯片ADC0809
8位8通道逐次逼近式A/D转换器,CMOS工艺,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存用译码电路,其转换时间为100us左右。
1)ADC0809的内部逻辑结构
ADC 0809内部逻辑结构如图所示。
图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换。地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择。
2)信号引脚
ADC0809芯片为28引脚双列直插式封装,其引脚排列见图9.14.
对ADC0809主要信号引脚的功能说明如下:
·IN0~IN7—模拟量输入通道信号单极性,电压范围0-5V,若信号过小还需进行放大。模拟量输入在A/D转换过程中其值不应变化,对变化速度快的模拟量,在输入前应增加采样保持电路。
·A、B、C地址线
A为低位地址,C为高位地址,模拟通道的选择信号,引脚图中为ADDA,ADDB和ADDC。其地址状态与通道对应关系见表9-1
·ALE 地址锁存允许信号
对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
·START 转换启动信号
START上跳沿时,所有内部寄存器清“0”;START下跳沿时,开始进行A/D转换;在A/D转换期间,START应保持低电平。本信号有时简写为ST。
·D7~D0 数据愉出线
为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高位。
·OE 输出允许信号
用于控制三态输出锁存器向单片机输出转换得到的数据。
OE=0,输出数据线呈高电阻;
OE=1,输出转换得到的数据。
·CLK 时钟信号
ADC 0809的内部没有时钟电路,所需时钟信号由外界提供。通常使用频率为500kHz的时钟信号。
·EOC 转换结束信号
EOC=0,正在进行转换;
EOC=1,转换结束。
使用中该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。
·Vcc +5V电源
·Vref 参考电源
参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V,Vref(一)=0V)。
3) 单片机与ADC0809接口
三个问题:
①要给START线送一个100ns宽的起动正脉冲;
②获取EOC线上的状态信息,因为它是A/D转换的结束标志;
③要给“三态输出锁存器”分配一个端口地址,也就是给OE线上送一个地址译码器输出信号。
MCS-51和ADC接口通常可以采用定时、查询和中断三种方式。
·定时传送方式
对于每种A/D转换器,转换时间作为一项技术指标,是已知的和固定的。如ADC0809的转换时间为128us。可以设计一延时子程序,当启动转换后,CPU调用该延时子程序或用定时器定时,延时时间或定时时间稍大于A/D转换所需时间。等时间一到,转换已经完成,就可以从“三态输出锁存器”读取数据。
特点:电路连接简单,但CPU费时较多。
·查询方式
采用查询法就是将转换结束信号接到I/O接口的某一位,或经过三态门接到单片机数据总线上。A/D转换开始之后,CPU就查询转换结束信号,即查询EOC引脚的状态:若它为低电平,表示A/D转换正在进行,则MCS-51应当继续查询;若查询到EOC变为高电平,则给OE线送一个高电平,以便从线上提取A/D转换后的数字量。
特点:占用CPU时间,但设计程序比较简单。
·中断方式
采用中断方式传送数据时,将转换结束信号接到单片机的中断申请端,当转换结束时申请中断,CPU响应中断后,通过执行中断服务程序,使OE引脚变高电平,以提取A/D转换后的数字量。
特点:在A/D转换过程中不占用CPU的时间,且实时性强。
4) 应用举例
例 分别采用不同方式对8路模拟信号轮流采一遍样,并依次把转换后的数据存放到数据存储区。ADC0809与8031接口工作方式见图。
·EOC开始转换时为低电平,当转换结束时为高电平。
·查询方式:查询EOC引脚,接P1.0。
·中断方式:EOC经反相器接8051的外部中断引脚INT1。
1)定时传送方式
MAIN:MOV R1,#data
MOV DPTR,#7FF8H;P2.7=0,且指向通道0
MOV R7,#08H;置通道数
LOOP:MOVX @DPTR,A;启动A/D转换
MOV R6,#0AH
DLAY:NOP
NOP
NOP
NOP
DJNZ R6,DLAY
MOVX A,@DPTR;读取转换结果
MOV @R1,A
INC DPTR;指向下一个通道
INC R1;修改数据区指针
DJNZ R7,LOOP
2)查询方式
MAIN:MOV R1,#data
MOV DPTR,#7FF8H;P2.7=0,且指向通道0
MOV R7,#08H;置通道数
LOOP:MOVX @DPTR,A;启动A/D转换
SETB P1.0
WAIT:JNB P1.0,WAIT;查询P1.0状态
MOVX A,@DPTR;读取转换结果
MOV @R1,A
INC DPTR;指向下一个通道
INC R1;修改数据区指针
DJNZ R7,LOOP;8个通道全采样完了吗?
RET
3)中断方式
SETB IT1
SETB EX1
SETB EA
MOV DPTR,#7FF8H
MOV A,#0
MOVX @DPTR,A
…
EINT1:MOV DPTR,#7FF8H
MOVX A,@DPTR
MOV 30H,A
MOV A,#00
MOVX @DPTR,A
RETI
第二节 后向输出通道接口技术
在以单片机为核心组成的测控系统中,单片机要通过后向输出通道输出控制信号对控制对象实现控制操作。
知识要点:
后向输出通道的作用、结构
D/A转换接口及应用
一、概述
1.后向输出通道的作用分析:
·数/模转换单片机输出的控制信号是数字信号,需要通过D/A转换器把数字量转换成控制对象所需的模拟电压或电流。
·功率放大驱动经数/模转换得到的模拟电压或电流控制信号,不能满足控制对象的功率要求,必须经功率放大,驱动外部伺服系统。
·干扰信号防治后向输出通道接近控制对象,工作环境相对恶劣,会出现伺服驱动系统通过信号通道、电源以及空间电磁场对单片机应用系统的电磁干扰,另外还会出现机械干扰,因此通常采用信号隔离、电源隔离和大功率开关实现过零切换等方法进行干扰防治。
2.后向输出通道的结构
根据单片机输出信号和控制对象的特点,后向输出通道的结构如图8-12所示。单片机通过1/0接口或数据总线输出的开关量、数字量和频率量可以直接用于开关量、数字量控制系统和频率调制系统,对于模拟量控制系统,需通过D/A、F/V转换成模拟量控制信号。下面对后向输出通道中的重要部分D/A转换接口进行详细分析。
二、D/A转换接口
D/A转换接口技术的主要内容是合理选择D/A转换器和其他有关器件,实现与微机的正确连接以及编制转换程序。
1.概述
(1) D/A转换器
D/A转换器(Digital to Analog Conver)是一种能把数字量转换成模拟量的电子器件。在单片机测控系统中经常采用的是D/A转换器的集成电路芯片,称为D/A接口芯片或DAC芯片。
(2) D/A转换器的性能指标
·分辨率(Resolution)
指D/A接口芯片能分辨的最小输出模拟增量。输人数量发生单位数码变化时,即LSB(最低有效位)产生一次变化时,所对应的输出的模拟量的变化量。对于线性D/A转换器来说,其分辨率△与数字量的位数n的关系为
在实际使用中,表示分辨率高低更常用的方法是采用输入量的位数,如满量程10V的8位DAC芯片的分辨率为8位。
·转换精度(Conversion Accuracy)
指满量程时DAC的实际模拟输出量与理论值的接近程度,与D/A转换芯片的结构和接口配置电路有关。通常,DAC的转换精度为分辨率的一半。
·失调误差
指输人数字量为零时,模拟输出量与理想输出量的偏差。偏差值的大小一般用LSB的份数或用偏差值表示。
(3)D/A转换器的选择要点
·输人信号的形式。
输人信号有并行和串行两种形式,根据实际要求选定。在实际应用中大多数为并行输入。串行输入节省数据线,但速度较慢,适用于远距离数据传输。
·分辨率和转换精度
根据对输出模拟量的精度要求来确定D/A转换器的分辨率和转换精度。常用的分辨率有8位、10位和12位。在精度指标方面,零点误差和满量程误差可以通过电路调整进行补偿,因此主要看芯片的非线性误差和微分非线性误差。
·建立时间
D/A转换器的电流建立时间很短,一般为50-500ns。若是输出电庄形式,加上运算放大器电路,电压建立时间一般为1us到几us,一般都能满足系统要求。
·转换结果的输出形式
转换结果的输出形式有电流或电压,有单极性或双极性,有不同量程,还有多通道输出方式。这可根据应用系统对模拟量形式的实际要求来确定。
2.D/A转换典型芯片DAC0832芯片
DAC0832是微处理器完全兼容的,具有8位分辨率的D/A转换集成芯片,以其价廉、接口简单、转换控制容易等优点,在单片机应用系统中得到了广泛的应用。
(1) DAC0832的引脚
其逻辑结构及管脚号如图所示。
它由8位输人锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。为20脚双列直插式封装结构。各引脚信号说明如下:
·DI7~DI0—转换数据输入。
·/CS—片选信号(输入),低电平有效。
·ILE—数据锁存允许信号(输入),高电平有效。
·/WR1—第1写信号(输入),低电平有效。该信号与ILE信号共同控制输入寄存器是数据直通方式还是数据锁存方式:
当ILE=1和/WR1=0时,为输入寄存器直通方式;
当ILE=1和/WR1=1时,为输入寄存器锁存方式。
·/XFER—数据传送控制信号(输入),低电平有效。
·/WR2—第2写信号(输入),低电平有效。该信号与/XFER信号合在一起控制DAC寄存器是数据直通方式还是数据锁存方式:
/WR2=0和/XFER=0时,为DAC寄存器直通方式;
/WR2=1和/XFER=0时,为DAC寄存器锁存方式。
·Iout1—电流输出“1”;当数据为全1时,输出电流最大;为全0时输出电流最小。
·Iout2—电流输出“2”;DAC转换器的特性之一是:Iout1+Iout2=常数。
·Rfb—反馈电阻端。
即运算放大器的反馈电阻端,电阻已固化在芯片中。因为DAC0832是电流输出型D/A转换器,为得到电压的转换输出,使用时需在两个电流输出端接运算放大器Rfb即为运算放大器的反馈电阻,运算放大器的接法如图所示。
·Vref—基准电压,是外加高精度电压源。该电压可正可负,范围为-10V~+10V。
·DGND—数字地。
·AGND—模拟地。
(2)DAC0832内部结构
DAC0832的内部结构框图如图9. 3所示。
“8位输人寄存器”用于存放CPU送来的数字量,使输人的数字量得到缓冲和锁存,由/LE1控制。“8位DAC寄存器”用于存放待转换的数字量,由/LE2控制。“8位D/A转换电路”由T型电阻网络和电子开关组成,电子开关受“8位DAC寄存器”输出控制。
(3)DAC0832和MCS-51单片机的接口方式
·单缓冲方式连接
所谓单缓冲方式就是使DAC0832的两个输入寄存器中有一个(多为DAC寄存器)处于直通方式,而另一个处于受控的锁存方式。
应用场合:如果只有一路模拟量输出,或虽是多路模拟量输出但并不要求输出同步的情况下,就可采用单缓冲方式。单缓冲方式连接如图9.4所示。
单缓冲方式应用举例:
例1产生锯齿波,其电路连接如图所示。
图中的DAC0832工作于单缓冲方式,其中输入寄存器受控,而DAC寄存器直通。假定输入寄存器地址为5000H,产生锯齿波的程序清单如下:
MOV DPTR ,#5000H
MOV R0,#00H
WW:MOV A,R0
MOVX @DPTR , A
INC R0
NOP
NOP
NOP
AJMP WW
例.2小电机驱动。
分析:对于小功率直流电机驱动,使用单片机极为方便,其方法就是控制电机定子电压接通和断开时间的比值(即占空比),以此来驱动电机和改变电机的转速,这种方法称为脉冲宽度调速法(或简称脉宽调速法)。占空比以及占空比与电机转速的关系如图所示。
电压变换周期为T,电压接通时间为t,则占空比表示为D=t/T。设电机固定接通电源时的最大转速为Vmax,则用脉冲宽度调速的电机转速为:
Vd=Vmax×D
Vd与D的函数曲线如9.7(b)所示。可以看出,实际上Vd与D并不完全是线性关系(如图中实线所表示),但可以近似地看成是线性关系,为此我们可以采用控制加电脉冲宽度的办法来驱动电机并调节其转速。
按图9.9的连接,DAC0832输入寄存器的地址为9000H,则MCS- 51电机驱动程序清单如下:
ORG 0000H
AJMP DAMOT
ORG 08100H
DAMOT:MOV DPTR,#9000H;翰入寄存器地址
MOV A,#80H
MOVX @DPTR,A;输出0V电平
ACALL DELAY1,维持0V电平
MOV A,#0FFH
MOVX @DPTR, A;输出+5V电平
ACALL DELAY2,维持+5V电平
AJMP DAMOT
说明:按上述程序,改变延时子程序的延迟时间就可以改变电机的转速。如把第二次转换的数字圣从0FFH改为00H,则输出脉冲的极性改变(0V~-5V),从而也就改变了电机的转向。
例3按图8031与DAC0832的接口编写程序,在运算放大器输出端输出一个三角波电压。
DAC0832单缓冲方式接口电路:
ORG 1000H
MOV DPTR,#7FFFH;指向0832
MOV R2,#0FFH;循环次数
MOV A,#00H;赋初值
LOOP1:MOVX @DPTR,A;D/A转换输出
INC A
DJNZ R2,LOOP1
MOV R2,#0FEH
LOOP2:DEC A
MOVX GDPTR,A
DJNZ R2,LOOP2
ALMP LOOP1
END
·双缓冲方式连接
所谓双缓冲方式,就是把DAC0832的输入寄存器和DAC寄存器都接成受控锁存方式。双缓冲方式DAC0832的连接如图9.10所示。
应用场合:对于多路D/A转换接口,要求同步进行D/A转换输出时,必须采用双缓冲器同步方式接法。
0832采用这种接法时,数字量的输人锁存和D/A转换输出是分两步完成的,即CPU的数据总线分时地向各路D/A转换器输入要转换的数字量并锁存在各自的输入寄存器中,然后CPU对所有的D/A转换器发出控制信号,使各个D/A转换器输入寄存器中的数据送人DAC寄存器,实现同步转换输出。
应用举例:下图是一个两路同步输出的D/A转换接口电路。
P2.5和P2.6分别选择两路D/A转换器的输人寄存器,控制输人锁存;P2.7连到两路D/A转换器的/XFER端控制同步转换输出;8031的/WR端与所有的/WR1和/WR2端相连。执行下面8条指令就能完成D/A的同步转换输出。
MOV DPTR,#0DFFFH;指向0832 (1)
MOV A,#data11;datal送人0832 (1)中锁存
MOVX @DPTR,A
MOV DPTR,#0BFFFH;指向0832 (2)
MOV A,data2;data2送人0832 (2)中锁存
MOVX @DPTR,A
MOV DPTR,#7FFFH;给0832(1)、0832(2)提供信号,同时完成D/A转换输出
MOVX @DPTR,A
第七章 单片机控制系统抗干扰技术
本章将从干扰源的来源、硬件、软件以及电源系统各方面研究分析并给出有效可行的解决办法。
第一节 干扰的来源及分析
一、 主要的干扰源
影响正常工作的信号称为噪声,又称干扰。
举例:在单片机控制系统中,出现了干扰,就会影响指令的正常执行,造成控制事故或控制失灵;在测量通道中产生了干扰,就会使测量产生误差,计数器收到干扰有可能乱记数,造成记数不准,电压的冲击有可能使系统遭到致命的破坏。
凡是能产生一定能量,可以影响到周围电路正常工作的媒体都可认为是干扰源。干扰有的来自外部,有的来自内部。一般来说,干扰源可分为以下三类:
①自然界的宇宙射线,太阳黑子活动,大气污染及雷电因素造成的;
②物质固有的,即电子元器件本身的热噪声和散粒噪声;
③人为造成的,主要是由电气和电子设备引起。
举例:在系统工作的环境中广泛存在,包括动力电网的电晕量放电、绝缘不良的弧光放电、交流接触器、开关电感负载的继电器接点引起的电火花,照明灯管所引起的放电、变压器、电焊机、吊车,大功率设备启动浪涌,可控硅开关造成的瞬间尖峰,都会对电网产生影响。另外像大功率广播、电视、通讯、雷达、导航、高频设备以及大功率设备所发出的空间电磁干扰。系统本身电路的过渡过程,电路在状态转换时引起的尖峰电流,电感或电容所产生的瞬间电压和瞬变电流也会对系统工作产生千扰。另外,印制电路板布局不合理、布线不周到、排列不合理、粗细不合理,使电路板自身产生相互影响,系统安装布线不合理,强弱电走线不能分开,造成相互干扰。
二、 噪声干扰产生的原因
①电路性干扰。电路性干扰是由于两个回路经公共阻抗耦合而产生的,干扰量是电流。
②电容性干扰。电容性干扰是由于干扰源与干扰对象之间存在着变化的电场,从而造成了干扰影响,干扰量是电压。
③电感性干扰。电感性干扰是由于干扰源的交变磁场在干扰对象中产生了干扰感应电压。而产生感应电压的原因则是由于在干扰源中存在着变化电流。
④波干扰。波干扰是传导电磁波或空间电磁波所引起的。空间电磁波的干扰量是电场强度和磁场强度。传导波的干扰量是传导电流和传导电压。
三、 干扰窜入系统的渠道
环境对单片机控制系统的干扰一般都是以脉冲的形式进人系统的,干扰窜入系统的渠道主要有三条,如图7-1所示。
由图中可见,空间干扰(场干扰)是通过电磁波辐射入系统;过程通道干扰是通过和主机系统相连接的输入通道、输出通道及与其他主机系统相连的通信通道进入单片机系统的;供电系统干扰,主要通过供电系统的直流电源线路或地线进人系统。一般情况下,空间干扰在强度上远小于其他两个渠道进人系统的干扰,而且空间干扰可用良好的屏蔽与正确的接地,或采用高频滤波器加以解决。因此抗干扰的重点应放在供电系统和过程通道的干扰。
第二节 硬件抗干扰技术
一、选用可靠的元器件
一般情况下,元器件在出厂前都进行了测试。在通常应用时,不再进行测试,而直接将元器件用于电路中进行通电运行考验。在考验中发现问题,直接替换不合格芯片或器件。
按着一般的经验,如芯片在通电使用一个月左右而不产生损坏,就可以认为比较稳定。但在购买时,最好到较正规的大公司或商店购买元器件,一般都能保证元器件本身质量的可靠。
二、接插件的选择应用
单片机控制系统通常可由几块印制电路板组成,各板之间以及各板与基准电源之间经常选用接插件相联系。在接插件的插针之间也易造成干扰,这些干扰与接插件插针之间的距离以及插针与地线之间的距离都有关系。在设计选用时要注意以下几个问题。
1.合理地设置插接件
如电源插接件与信号插接件要尽量远离,主要信号的接插件外面最好带有屏蔽。
2.插头座上要增加接地针数
在安排插针信号时,用一部分插针为接地针,均匀分布于各信号针之间,起到隔离作用,以减小针间信号互相干扰。最好每一信号针两侧都是接地针,使信号与接地针理想的比例为1:1。
3.信号针尽量分散配置,增大彼此之间的距离。
4. 设计时考虑信号的翻转时差,把不同时刻翻转的插针放在一起。同时翻转的针尽量离开,因信号同时翻转会使干扰叠加。
三、印制电路板抗干扰设计技术
印制电路板是器件、信号线、电源线的高密度集合体,布线和布局好坏对可靠性影响很大。
1.印制电路总体布局原则
①印制电路板大小要适中,板面过大印制线路太长,阻抗增加,成本偏高;板子太小,板间相互连线增加,易增加干扰环境。
②印制板元件布局时相关元件尽量靠近。如晶振、时钟发生器及CPU时钟输入端相互靠近,大电流电路要远离主板,或另做一块板。
③考虑电路板在机箱内的位置,发热大的元器件放置在易通风散热的位置。
2.电源线和地线与数据线传输方向一致,有助于增强抗干扰能力。接地线可环绕印制板一周安排,尽可能就近接地。
3.地线尽量加宽,数字地、模拟地要分开,根据实际情况考虑一点或多点接地。
4.配置必要的去耦电容
①电源进线端跨接100up以上的电解电容以吸收电源进线引入的脉冲干扰。
②原则上每个集成电路芯片都配置一个0.01up的瓷片电容或聚乙烯电容,可吸收高频干扰。
③电容引线不能太长,高频旁路电容不能带引线。
四、执行机构抗干扰技术
在单片机控制系统输出回路中,存在着执行开关、线圈等回馈干扰。特别是感性负载,电机电枢的反电动势会损坏电子器件,甚至会破坏计算机系统或扰乱程序系统,为防止由于电感负载的瞬间通、断造成的干扰,常采用以下措施:
1.触点两端并联阻容吸收电路,控制触点间放电,如图7-2(a)所示。
2.电感负载两端并联反向二极管,形成反电动势放电回路,保护设备。如图7-2(b)所示,在继电器线圈两端并接二极管。当开关断开时,感应电动势通过二极管放电,防止击穿电源及开关。
第三节 软件抗干扰技术
一、设置软件陷阱
由于系统干扰可能破坏程序指针PC,PC一旦失控,使程序“乱飞”可能进人非程序区,造成系统运行的一系列错误。设置软件陷阱,可防止程序“乱飞”。
方法:在ROM或RAM中,每隔一些指令(十几条即可),就把连续几个单元设置成空操作(所谓陷阱)。当失控的程序掉入“陷阱”,也就是连续执行几个空操作后,程序自动恢复正常,继续执行后面的程序,也可以在程序芯片没有被程序指令字节使用的部分全部置成空操作指令代码,在最后使用跳转指令,一般跳到程序开头。一旦程序飞出到非程序区,执行空操作之后,最后跳回到程序初始化,重新执行程序。或隔一段使用一条跳转到程序开头的指令。
二、增加程序监视系统(Watchdog )
利用设置软件陷阱的办法虽在一定程度上解决了程序“飞出”失控问题,但不能有效地解决死循环问题。
设置程序监视器(Watchdog看门狗)可比较有效地解决死循环问题。程序监视器系统有的采用软件解决,大部分都是采用软硬件相结合的办法。下面以两种解决办法来分析其结构原理。
1、利用单片机内部定时器进行监视
方法:在程序一开始就启动定时器工作,在主程序中增设定时器赋值指令,使该定时器维持在非溢出工作状态。定时时间要稍大于程序一次循环的执行时间。程序正常循环执行一次给定时器送一次初值,使其不能溢出。但若程序失控,定时器则计满溢出中断,在中断服务程序中使主程序自动复位又进入初始状态。
例8051单片机若晶振频率使用6MHz,选定时器T0定时监视程序。程序如下:
ORG 0000H
START:AJMP .MAIN
ORG 000BH
AJMP START
MAIN:SETB EA
SETB IE0
SETB TR0
MOV TMOD,#01H
MAIN1:MOV TH0,datal
MOV TL0,datal
LJMP MAIN
2、利用单稳触发器构成程序监视器
方法:利用软件经常访问单稳电路,一旦程序有问题,CPU不能照常访问,单稳电路则产生翻转脉冲使单片机复位,程序重新开始执行。
三、软件冗余技术
软件冗余技术,就是多次使用同一功能的软件指令,以保证指令执行的可靠性,这从以下几个方面考虑。
1.采取多次读入法,确保开关量输人正确无误
重要的输人信息利用软件多次读入,比较几次结果一致后再让其参与运算。对于按钮和开关状态读入时,要配合软件延时可消除抖动和误动作。
2.不断查询输出状态寄存器,及时纠正输出状态
设置输出状态寄存器,利用软件不断查询,当发现和输出的正确状态不一致时,及时纠正,防止由于干扰引起的输出量变化导致设备误动作。
3.对于条件控制系统,把对控制条件的一次采样、处理控制输出改为循环地采样、处理输出。这种方法对于惯性较大的控制系统具有良好的抗偶然干扰作用。
4.为防止计算错误,可采用两组计算程序,分别计算,然后将两组计算结果进行比较,如两次计算结果相同,则将结果送出。如出现误差,则再进行一次运算,重新比较,直到结果相同。
四、软件可靠性设计
1、利用软件提高系统抗干扰能力
在软件设计时采用如下措施,对提高系统抗干扰能力是积极有力的。
①增加系统信息管理软件。它与硬件相配合,对系统信息进行保护。其中包括防止信息被破坏,出故障时保护信息,故障排除之后恢复信息等。
②防止信息的输人输出过程中出错。如对关键数据采用多种校验方式,对信息采用重复传送校验技术,从而保证信息的正确无误。
③编制诊断程序,及时发现故障,找出故障位置,以便及时检修或启用冗余软件。
④用软件进行系统调度,包括出现故障时保护现场,迅速将故障装置切换成备用装置,在环境条件发生变化时,采取应急措施,故障排除后,迅速恢复系统,继续投人运行等。
2、提高软件自身的可靠性
1).程序分段和采用层次结构
在进行程序设计时,将程序分成若干个具有独立功能的子程序块。各个程序块可以
单独使用,也可与其他程序块一起使用。各程序块之间可通过一固定的通信区和一些指
定的单元进行信息传递。每个程序块都可单独进行调整和修改而不影响其他程序块。
2).采用可测试性设计
软件在编制过程中会出现一些错误。为便于查出程序错误,提高软件开发效率,可采用以下三种方法:一是明确软件规格,使测试易于进行;二是将测试设计的程序段作为软件开发的一部分;三是把程序结构本身组成便于测试的形式。
3).对软件进行测试
测试软件的基本方法是,给软件一个典型的输入,观测输出是否符合要求。发现错误进行修改,直至消除错误,达到设计要求。
测试软件可按下述步骤进行:
①单元测试,即对每个程序块单独进行测试;
②局部或系统测试,即对多个程序块组成的局部或系统程序进行测试,以发现块间连接错误;
③系统功能测试,按功能对软件进行测试,如控制功能、显示功能、通信功能、管理功能、报瞥功能等;
④现场测试,即硬件安装调试后将软件进行安装测试,以便对整个控制系统的功能及性能作出评价。
五、软件自诊断技术
软件诊断技术主要从两个方面进行考虑,一方面是对系统硬件和过程通道的自诊断,另一方面是对过程软件本身进行诊断和故障排除。
1、对硬件系统进行诊断
对硬件系统诊断包含两个方面内容:一是确定硬件电路是否存在故障,这叫故障测试;二是指出故障的确切位置,给维护以操作指导,这叫故障定位。
单片机控制系统有的配备有系统测试程序,在系统上电时,首先对系统的主要部件以及外设I/0端口进行测试,以确认系统硬件工作是否正常。对接口故障的测试,主要是检测接口中元器件的故障,这就要求在进行接口电路设计时要考虑以下因素:
①在接口设计时,除考虑接口的功能外,要考虑提供检测的寄存器或缓冲器,以便检测使用;
②可将接口划分成若干个检测区,在每一检测区将检测点逐一编号,进行测试;
③可将测试点按顺序编制成故障字典,以便按测试结果给出故障部位,进行故障定
位。
2、软件运行自诊断
设置陷阱、使用程序监视器、时间冗余方法
时间冗余方法是通过消耗时间资源达到纠错的目的。时间冗余方法通常采用指令复执和程序卷回两种途径来实现。
1)指令复执技术
所谓复执,就是程序中的每条指令都是一个重新启动点,一旦发现错误,就重新执行被错误破坏的现行指令,指令复执既可用编制程序来实现,也可用硬件控制来实现,基本的实现方法是:
①当发现错误时,能准确保留现行指令的地址,以便重新取出执行;
②现实指令使用的数据必须保留,以便重新取出执行时使用。
指令复执的次数通常采用次数控制和时间控制两种方式,如在规定的复执次数或时间之内故障没有消失,称之复执失败。
2)程序卷回技术
程序卷回不是某一条指令的重复执行,而是一小段程序的重复执行。为了实现卷回,也要保留现场。程序卷回的要点是:
①将程序分成一些小段,卷回时也要卷回一小段,不是卷回到程序起点;
②在第n段之末,将当时各寄存器、程序计数器及其他有关内容移人内存,并将内存中被第n段所更改的单元又在内存中另开辟一块区域保存起来。如在第(n+1)段中不出问题,则将第(n+1)段现场存档,并撤消第二段所存内容;
③如在第(n+1)段出现错误,就把第n段的现场送给机器的有关部分,然后从第(n+1)段起点开始重复执行第(n十1)段程序。
第四节 供电系统抗干扰技术
供电系统干扰分为:
① 过压、欠压、停电 使用各种稳压器和不间断电源UPS
② 浪涌、下陷、降出 快速响应的交流电压调压器
③ 尖峰电压 使用具有噪声抑制能力的交流稳压器或隔离变压器
④ 射频干扰 低通滤波器
一、建议的供电解决方案
为了防止电源系统窜人干扰,影响单片机控制系统的正常工作,可采用如图7-5所示的供电配置。
如图7-5所示,整个供电系统从以下几个方面考虑。
①交流进线端加交流滤波器,可滤掉高频干扰,如电网上大功率设备启停造成的瞬间干扰。滤波器市场上的成品有一级、二级滤波之分,安装时外壳要加屏蔽并使其良好接地,进出线要分开,防止感应和辐射耦合。低通滤波器仅允许50Hz交流通过,对高频和
中频干扰有很好的衰减作用。
②要求高的系统加交流稳压器。
③采用具有静电屏蔽和抗电磁干扰的隔离电源变压器。
④采用集成稳压块两级稳压。
⑤主电路板采取独立供电,其余部分分散供电,避免一处电源有故障引起整个系统颠覆。
⑥直流输出部分采用大容量电解电容进行平滑滤波。
⑦线间对地增加小电容滤波消除高频干扰。
⑧交流电源线与其他线尽量分开,减少再度耦合干扰。
⑨尽量提高接口器件的电源电压,提高接口的抗干扰能力。
第五节 接地系统抗干扰技术
在设计时,若能将接地和屏蔽正确地结合起来使用,可以解决大部分干扰引起的故障。接地问题包括两个方面的内容:一个是接地点是否正确;另一个是接地点是否牢固。接地点选择正确可防止系统各部分的串扰,接地点牢固可使接地点处于零阻抗,从而降低了接地电位,防止了接地系统的共模干扰。
一、系统地线分类
两大类:
保护接地主要是为了避免工作人员因设备绝缘损坏或性能下降时遭受触电危险和保证设备的安全
工作接地主要是保证控制系统稳定可靠的运行,防止地环路引起的干扰。
在单片机控制系统中,地线大致分为以下几类:
① 数字地也叫逻辑地,它是数字电路的零电位;
② 模拟地它是放大器、采样保持器以及A/D转换器和比较器等的零电位;
③功率地即大电流网络元件、功放器件的零电位;
④信号地即传感器件的地电平;卜
⑤交流地指交流50Hz电源的零线;
⑥直流地指直流电源的地线;
⑦屏蔽地一般同机壳相联,为防止静电感应和磁场感应而设置的,常和大地相接。
二、不同地线的处理原则
1.一点接地和多点接地
在低频(小于1MHz)电路中,布线和元件之间的电感不会产生太大影响,常采用一点接地。
在高频(高于10MHz)电路中,寄生电容和电感影响较大,易采用多点接地。
2. 数字地和模拟地必须分开。
3.交流地与信号地不要共用。
4.浮地和接地
系统浮地,是将系统电路的各个部分地线浮置起来,不与大地相联。通常采用系统浮地,机壳接地,可使抗干扰能力强,安全可靠。
5.印制电路板地线布线
其如下所示:
①TTL、CMOS器件的地线要呈辐射网状,其他地线不要形成环路;
②地线尽量加宽,最好不要小于3mm;
③旁路电容地线不要太长;
④大规模集成电路最好跨越平行的地线和电源线,以消除干扰。
6.传感器信号地
由于传感器和机壳之间易引起共模干扰,为提高抗共模干扰能力,一般A/D转换器的模拟地采用浮空隔离,并可采用三线采样双层屏蔽浮地技术,就是将地线和信号线一起采样,可有效地抑制共模干扰。
第六节 输入输出通道抗干扰技术
一、开关信号的抗干扰技术、
1、开关量的电平转换
提高开关量电平进行开关信号传输,可以降低电磁干扰,而输人到单片机中的电平都是TTL电平,因此存在一个电平转换问题。可采用如图7-9所示的电路。若提高开关量输出的电平可参考图7-10所示的电路。
二、采用隔离技术
① 对启停负荷不大、响应速度不太高的设备,一般采用继电器隔离比用光电隔离更直接。继电器能直接控制动力电路,而驱动继电器的集成电路要用集电极开路的集成电路(OC门),并在继电器线圈两端加续流二极管,以保证驱动电路正常工作,如图7-11所示。
② 在交流启停负荷较大时,大负荷触点在接通或断开时,所产生的火花和电弧具有十分强烈的干扰作用,可采用如图7-12所示的电路,用两个对接的可控硅代替交流接触器,它们的控制极由小继电器的一个触点控制,触点接通,两个可控硅轮流导通,触点断开,两个可控硅完全关断。固态继电器也就是将对接的可控硅封装在一个模块中的器件。
③ 快速直流负载的光耦合驱动。如图7-13所示。
④ 快速驱动交流负载的光电耦合驱动。如图7-14所示。
二、模拟通道的抗干扰技术
1 、硬件措施
1)模拟量输人回路
加入RC滤波器,以减小工频干扰信号对输入信号的影响,如图7-15所示。
2)光电耦合器隔离
在模拟通道使用光电耦合器要按照如图7-16的安排设计。
3)适当选用A/D芯片
在干扰严重的场合,可选用双积分式A/D转换器。要求转换速度快的场合,要选用逐次逼近方式的转换器。
2 、软件措施
用软件对输入量的滤波处理是消除低频干扰的重要措施,常用的滤波算法有以下几
种:
1)限幅滤波
规定在相邻两次采样信号之间的差值不得超过一个固定数值。
2)中值滤波
每获得一个采样数据时连续采样三次,找出三个采样值中的一个居中的值作为本次采样值。
3)算术平均值滤波
连续记录几次采样值,求其平均值作为本次采样值。
4)五中取三平均值滤波
该办法是若得到一个采样值,要连续采样五次,然后按大小顺序排列,去掉一个最大的,去掉一个最小的,取其中间三个数求其平均值。
5)一阶惯性滤波
对于低频干扰信号,可用此滤波模拟RC滤波,来消除干扰。
三、长线传输的抗干扰技术
1 、双绞线传输
在数字信号传输过程中,根据传送距离的不同,双绞线使用方法也有所不同,如图7-17所示。
当传送距离在5m以下时,发送和接收端连接负载电阻。若发送侧为集电极开路驱动,则接收侧的集成电路用施密特型电路,抗干扰能力更强。
当用双绞线作远距离传送数据时,或有较大噪声干扰时,可使用平衡输出的驱动器和平衡输入的接收器。发送和接收信号端都要接匹配电阻,如图7-17(b)、(c)所示。
用双绞线传输与, 光电耦合器联合使用时,可按图7-18所示的方式连接。图中(a)是集电极开路驱动器与光电耦合器的一般情况。(b)是开关接点通过双绞线与光电耦合器连接的情况。如在光电耦合器的光敏晶体管的基极上接有电容及电阻,且后面连接施密特集成电路驱动器,则会大大加强抗噪声能力,如图中所示。
二、长线传输的阻抗匹配
长线传输时如匹配不好,会使信号产生反射,从而形成严重的失真。为了对传输线进行阻抗匹配,必须估算出其特性阻抗Rpo利用示波器观察的方法可以大致测定传输线特性阻抗的大小,测试方法如图7-19所示。调节可变电阻R,当R与特性阻抗Rp相匹配时,用示波器测量A门输出波形畸变最小,反射波几乎消失,这时R值可认为是该传输线的特性阻抗Rp。
传输线阻抗的匹配有以下四种形式:
1 .终端并联匹配
如图7-20所示,终端匹配电阻Rl、R2的值,按Rp=RI/R2的要求选取。一般Rl为220-330Ω,而R2可在270-390Ω范围内选取。此种方法由于终端阻值偏低,相当于负载加重,使高电平有所下降,使高电平抗干扰能力有所下降。
2 .始端串联匹配
如图7-21所示,匹配电阻R的取值为Rp与A门输出低电平时输出阻抗Rsc(约20Ω)之差值。此方法会使终端低电平抬高,相当于增加了输出阻抗,降低了低电平的抗干扰能力。
3 .终端并联隔直匹配
如图7-22所示,因电容C在较大时起隔直作用,并不影响匹配。所以只要求匹配电阻R与Rp相等即可。它不会引起输出低电平的降低,增加了高电平的抗干扰能力。
4 .终端钳位二极管匹配
如图7-23所示,利用二极管D把B门输人端低电平钳位在0.3V以下,可以减少波的反射和振荡,可提高动态抗干扰能力。
三、长线电流传输
用电流传输代替电压传输,可获得较好的抗干扰能力。如图7-24所示,从电流转换器输出0-10mA(或4-20mA)电流,在接收端并上500Ω(或lkΩ)的精密电阻,将此电流转换为0-5V(或1-5V)的电压,然后送人A/D转换器。在有的实用电路里输出端采用光电耦合器输出驱动,也会获得同样的效果。此种方法可减少在传输过程中的干扰,提高传输的可靠性。