单片机跳转指令关于按键后跳转问题代码(转移指令表问题)

纠纷处理 (9:00-18:00)
图书审核 (9:00-18:00)
抱歉,您要找的页面不存在。工控自动化技术文摘:单片机知识
单片机知识
第一章& 计算机基础知识
&&& 本章简要阐述计算机中最基本的数学知识。本章的内容是必要的入门知识,是以后各章的基础。
第一节&& 数制与编码
&&& 数制是人们利用符号来计数的科学方法。数制有很多种,但在计算机的使用上常使用的则为十进制、二进制和十六进制。
&& &一、数制的基与权
&&& 数制所使用的数码的个数称为基,数制每一位所具有的值称为权。
&&& 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种,即B为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)可电改写只读存储器E2PROM
E2PROM可用电的方法完成写入和清除其内容的功能,其编程电压和清除电压均与微机CPU的5V工作电压相同,不需另加电压,它既有RAM读写操作简便,又有数据不会因掉电而丢失的优点,因而使用极为方便。加之E2PROM保存的数据至少可达10年以上,每块芯片可擦写1万次以上。
第二章&&&&&&&& &&单片机概述
第一节&&& 单片机的概念
一、单片机的概念
通常所说的微机是指由CPU、存储器、I/O接口电路等各种大型集成电路芯片组装在一块或者由几块印制电路板组装而成的机器。
其中,用几块印制电路板组装成的微机则称之为多板微机或多板机,如现在广泛使用的台式或笔记本式PC微机都是这种结构。
随着大型集成电路技术的不断进步,20世纪80年代开发出了能在一个芯片上集成CPU、存储器、I/O接口等电子电路的超微型计算机,这种单个芯片式的微型计算机就被命名为单片微型计算机。
由于单片机在应用时通常是处于被控系统的核心地位并融入其中,即以嵌入的方式进行使用,为了强调其&嵌入&的特点,也常常将单片机称为嵌入式微控制器EMCU。
二、通用单片机和专用单片机
根据控制应用的需要,可以将单片机分成为通用型和专用型两种类型。
通用型单片机是一种基本芯片,它的内部资源比较丰富,性能全面且适用性强,能覆盖多种应用需求。用户可以根据需要设计成各种不同应用的控制系统,即通用单片机有一个再设计的过程。
专用单片机芯片是针对一种产品或一种控制应用而专门设计的,设计时已经对系统结构的最简化、软硬件资源利用的最优化、可靠性和成本的最佳化等方面都作了通盘的考虑和论证,所以专用单片机具有十分明显的综合优势。例如电度表和IC卡读写器上的单片机等。
三、单片机与单片机系统
单片机通常是指芯片本身。
单片机系统则是在单片机芯片的基础上扩展其它电路或芯片构成的具有一定应用功能的计算机系统。在单片机系统中,单片机处于核心地位,是构成单片机系统的硬件和软件基础。
四、单片机应用系统与单片机开发系统
单片机应用系统是为控制应用而设计的,该系统与控制对象结合在一起使用,是单片机开发应用的成果。
单片机开发系统是单片机应用系统开发调试的工具。主要有:
逻辑分析仪:只能用于简单的单片机系统;
微型计算机:用于复杂的单片机系统;
在线仿真器:进行单片机应用系统的软硬件开发和EPROM写入。
五、单片机的程序设计语言和软件
机器语言是用二进制代码表示的单片机指令,用机器语言构成的程序称之为目标程序。
汇编语言是用符号表示的指令,汇编语言是对机器语言的改进,是单片机最常用的程序设计语言。
注意:这两种语言均与单片机硬件关系密切,这就要求程序设计人员必须精通单片机的硬件系统和指令系统。
高级语言:编译型语言有PL/M51、C-51、C、MBASIC-51等;
解释型的有MBASIC和MBASIC-52等。
第二节 &&单片机的发展
一、单片机的历史及发展概况
根据单片机发展过程中各个阶段的特点,其发展历史大概可划分为以下四个阶段:
第一阶段():单片机的初级阶段。因工艺限制,单片机采用双片的形式,而且功能简单。
第二阶段():低性能单片机阶段。以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)
功能:实现数据的并行输入输出。
MCS- 51单片机有一个全双工的串行口。
功能;以实现单片机和其它数据设备之间的串行数据传送。
7、中断控制系统
80C51共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。全部中断分为高级和低级共两个优先级别。
8、时钟电路
MCS- 51芯片的内部有时钟电路,但石英晶体和微调电容需外接。
功能:时钟电路为单片机产生时钟脉冲序列。
典型的晶振频率:6MHz、11.0592MHz、12MHz。
9、位处理器
位处理器称为布尔处理器。
功能:以状态寄存器中的进位标志位C为累加位,可进行各种位操作。
总线:连接计算机各部件的一组公共信号线。
分类:地址总线、数据总线和控制总线。
作用:减少了单片机的连线和引脚,提高了集成度和可靠性。
三、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外接晶体引线端
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;
当使用外部时钟时,用于接外部时钟脉冲信号。
&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个端口是单片机与外部设备进行信息(数据、地址、控制信号)交换的输人或输出通道。
a)& 作为通用输入/输出口;
b)& 地址线/数据线分时复用。
在扩展系统中,低8位地址线与数据线分时使用PO口。PO口先输出片外存储器的低8位地址并锁存到地址锁存器中,然后再输出或输入数据。
功能:作为通用输人/输出口使用。
a)通用输人/输出口使用;
b)作为高8位地址总线口使用。
在扩展系统中,其作为扩展系统的高8位地址总线,与P0口低8位地址线一起组成16位地址总线。
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-8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
不能使用本汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
同一标号在一个程序中只能定义一次,不能重复定义。
标号的有无取决于本程序中的其它语句是否需要访问这条语句。
2)、操作码
操作码用于规定语句执行的操作内容,操作码是以指令助记符或伪指令助记符表示的,操作码是汇编指令格式中唯一不能空缺的部分。
3)、操作数
操作数用于给指令的操作提供数据或地址。
注释不属于语句的功能部分,它只是对语句的解释说明。
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+FH
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、十进制加法调整指令
要点分析:
1)这条指令必须紧跟在ADD或ADDC指令之后,且这里的ADD或ADDC的操作是对压缩的BCD数进行运算。
2)DA指令不影响溢出标志。
例& 设(A)=56H,(R7)=78H,执行指令:
&&& ADD A,R7
&&& 结果:(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;两个地址指针分别指向两个加数的百位、千位
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;个位与十位数相加
二、分支程序的设计
分支程序主要是根据判断条件的成立与否来确定程序的走向。因此在分支程序中需要使用控制转移类指令。可组成简单分支结构和多分支结构。
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个。
外中断是由外部信号引起的,共有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允许定时/计数中断
第三节& 定时器/计数器的工作方式
1、电路逻辑结构
方式0是13位计数结构的工作方式,其计数器由TH0全部8位和TL0的低5位构成。TH0的高3位弃之不用。
下图是定时器/计数器0在工作方式0的逻样结构(定时器/计数器1与此完全相同)。
当为计数工作方式时,计数值的范围是:
&&&&&&&&&&&&&&&&&&& 1~8192(213)
当为定时工作方式时,定时时间的计算公式为:
(213一计数初值)&晶振周期&12& 或& (213-计数初值)&机器周期
二、&&&&& 方式1
16位计数结构的工作方式,计数器由TH0全部8位和TL0全部8位构成。
其逻样电路和工作情况与方式0完全相同。
当为计数工作方式时,计数值的范围是:
&&&&&&&&&&&&&&&&&&& 1~65536(216)
当为定时工作方式时,定时时间的计算公式为:
(216一计数初值)&晶振周期&12& 或& (216-计数初值)&机器周期
三、&&&&& 方式2
1、电路逻辑结构
初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数。
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。二进制数表示为1B。十六进制表示为0FC03H。
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
DELAY:MOV R6,#0FFH
DL0:MOV R7,#0FFH
DJNZ R7,DL1
DJNZ R6,DL0
例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;存放计数的高字节
例:设计一个节日彩灯循环闪烁的应用系统。
分析:该题可以有多种循环方式,延时时间及左右移不同会有不同的循环效果。以下只是其中的一种形式编程。电路见图,由P1口的8位控制8路电灯电路,在每一路中都通过一个可控硅SCR控制N路并联电灯的开关。单片机工作频率12MHz,该程序延时选为200 ms,用定时器T0作为定时器,初值为50 ms。编程如下:
START:MOV P1,#0FEH;初始化为第0位的一组灯亮
L1:ACALL DELAY;调延时子程序
RL A;顺序左移一位
DELAY:MOV TMOD,#01H
&& MOV R1,#04H
DELAY-1:MOV TH0,#3CH
&& MOV TL0,#0B0H
&& SETB TR0
JNB TF0,$
DJNZ R1,DELAY_1
第八章 单片机串行数据通信
第一节& 概 述
一、串行通信基本原理
计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。
并行通信的特点是:各数据位同时传送,传送速度快、效率高。但并行数据传送有多少数据位就需多少根数据线,因此传送成本高。并行数据传送的距离小于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、远程通信
在远}

我要回帖

更多关于 单片机跳转指令 的文章

更多推荐

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

点击添加站长微信