单片机技术及应用课件_第1页
单片机技术及应用课件_第2页
单片机技术及应用课件_第3页
单片机技术及应用课件_第4页
单片机技术及应用课件_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机技术及应用清华大学基础工业训练中心冯一兵8/10/20231单片机技术及应用8/1/20231

第一章单片机的基础知识第二章MCS-51单片机的初步认识第三章MCS-51的指令系统

8/10/20232第一章单片机的基础知识8/1/20232

第四章汇编语言程序设计第五章定时器/计数器第六章中断的基本概念第七章串行口的应用8/10/20233第四章汇编语言程序设计8

第一章单片机的基础知识1.1微计算机与单片机

单片机是计算机的一种。一台完整的计算机由硬件和软件共同组成。计算机的软件由各种程序组成,包括操作系统(如windows)和各种应用程序(如word),计算机的硬件由下列几个部份构成:CPU、存储器、外部设备及接口。单片机主要用于简单的数据采集和控制,原本的意思是将CPU、存储器和外设接口(I/O)集成在一个芯片(singlechip)上的处理器(Processor),后来的正式名称是微控制器(microcontroller)。因此在网上查找资料时,可以使用微控制器作为关键词查找。8/10/20234第一章单片机的基础知识8/单片微型计算机就是将CPU、RAM、ROM、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。因此,一块芯片就构成了一台计算机。它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。8/10/20235单片微型计算机就是将CPU、RAM、ROM、定时/计数器和多CPU:CPU(centralcontrolunit)的全称是中央处理器。负责计算机的计算和控制计算机的运行。

存储器:存储器存放各种程序和数据。存储器分为内部存储器和外部存储器两部分。外部存储器大家都比较熟悉,如硬盘、光盘、软盘等等。内部存储器有两种:一部分称为ROM(只读存储器),存放最基本的程序,主要用于计算机启动时使用,如在PC机中存放BIOS;另一部分成为RAM,它能够随时读写。存放正在运行的程序和使用的数据。内部存储器的读写速度远远高于外部存储器,而外部存储器的容量则远远大于内部存储器。

外部输入输出设备(I/O)及接口:用于和人打交道。如显示器、键盘、鼠标等等,硬盘、光盘等也属于外部设备8/10/20236CPU:CPU(centralcontrol

1.2MCS-51系列单片机20世纪80年代初,Intel推出了MCS-51系列单片机,3个基本型:

8031:内部没有程序存储器

8051:内部有程序存储器(ROM4K)8751:内部有可编程可改写程序存储器(EPROM4K)Intel在推出MCS-51体系结构后不久,开放了8051内核技术,为MCS-51系列单片机的发展起了很大作用。

8/10/202371.2MCS-51系列单片机8/1/20237

在Intel公司推出了MCS-51不久便实施了最彻底的技术开放政策;在众多电器商、半导体商的积极参与下,将MCS-51发展成了众多型号系列的80C51MCU家族。MCS-51经典的体系结构、极好的兼容性和Intel公司的开放政策不仅使众多厂家参与发展,也诱使半导体厂家对MCS-51实行为所欲为的改造。8/10/202388/1/20238

Philips公司着力发展基于51内核的控制功能及外围单元,把MCS-51迅速推进到80C51的MCU时代。另外基于FlashROM的在线可编程(ISP)技术,改变了单片机应用系统的结构模式和开发运行条件。P80C51P80C52Atmel公司推出了采用FlashROM技术的AT89C51AT89C52AT89S52等,增加了一些外部接口功能。Cygnal公司2003年推出51内核的SOC(片上系统)型单片机,C8051F系列单片机。

8/10/20239Philips公司着力发展基于51内核的控制功能及外

1.3计算机中常用的几个术语1.3.1电平(level):计算机和数字电路中常使用电平一词,用于反映信号(signal)的状态。一个信号或者作为数字电路的一个输入,或者作为数字电路的输出。通常使用+5V直流电源作为数字电路的供电电源,一个信号有2个稳定的状态,一个称为高电平,一个称为低电平。高电平是指电压在+2.7V以上、5V以下的状态,低电平是指+0.8V以下、0V以上的状态。因此,对于一个器件,输出3.1V或者输出3.8V还是输出4.3V本质上是一样的,都属于高电平状态;同样输出0.7V还是0.3V也属于同一种状态,即低电平状态,也没有什么差别。咱们这次做实验,用的是+5V直流电源。判断一个电路是否正常工作,要按上述标准进行。随着技术的快速发展,现在许多器件使用+3.3V甚至2.2V直流电源,对这些器件,高电平、低电平的定义也进行了相应修改。8/10/2023101.3计算机中常用的几个术语8/1/202310

1.3.2二进制和十六进制 由于数字电路中一个信号只有2个稳定的状态:高电平(用“1”表示)和低电平(用“0”表示),因此在计算机中,数据采用的是二进制而不是十进制。二进制数就是以2为基数,数符为0、1,逢二进一。书写时,右边代表低位,左边代表高位。下面是二进制数的例子:

(8)(4)(2)(1)0110等于十进制61010等于十进制101111等于十进制15

8/10/2023111.3.2二进制和十六进制8/1/202311虽然计算机中采用的是二进制,不过有时却不太方便,因此有时使用十六进制,即把二进制数中的4位作为一组一起表示。在十六进制中,数符为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A、B、C、D、E、F分别代表十进制的10、11、12、13、14、15。如:二进制数01011001表示为十六进制数59二进制数00111111表示为十六进制数3F十六进制数只是为了方便人们的阅读和书写,计算机实际处理的还是二进制数。在汇编语言和其它高级语言中,为了将二进制数、十六进制数和十进制数加以区分,在二进制数后加一个后缀B,在十六进制数后加一个后缀H,十进制数后不加任何后缀。如:01011100B8585H0D3H十六进制数如果最高位是字母,则必须前面加一个0。

8/10/202312虽然计算机中采用的是二进制,不过有时却不太方便,因此有时使用1.3.3位(bit)、字节(byte)、字(word)在二进制中,每一“位”叫bit,一般通俗称为位。连续的8位组织在一起称为一个字节(byte)。字节是计算机组织数据的基本单位。我们通常说一个计算机的内存多大,比如100M,指的就是它的内存是100M字节。再比如说一个硬盘是100G,也是指这个硬盘能够存储100G个字节的数据。1M等于100万,1G等于1000M。 字(word)是每种特定的计算机组织数据和进行运算的单位。比如计算机做加法时能够一次做多少位二进制数的加法。每种计算机,字长差别很大,单片机字长一般是8位或者16位,而PC机字长则有64位甚至更多。我们通常说这是多少位的计算机就是指该计算机的字长是多少位。8/10/2023131.3.3位(bit)、字节(byte)、字(word)81.3.4

寄存器(register)

CPU中有很多寄存器。所谓寄存器就是可以存放东西的地方,这些东西可以是指令、地址等,也可以是数。寄存器的长度(位数)等于计算机的字长。一个8位单片机中寄存器的长度就是8位。一个64位PC机中寄存器的位数就是64位。下面介绍一些CPU中常用的寄存器。

指令寄IR(InstructionRegister):存放CPU从存储器中取出的指令码。CPU对指令进行译码,产生各种控制信号,这些控制信号指挥CPU内部的各种部件完成该指令规定的动作,比如对2个数做加法、减法、逻辑与、从存储器中取一个数、向存储器中写一个数、将一个数向外部设备输出、从外部设备输入一个数等等。8/10/2023141.3.4寄存器(register)8/1/2023141.3.5程序计数器PC(ProgramCounter):指出程序中当前指令在 存储器中的地址。程序是由一条条指令构成的,它们存放在存储器中。存放程序的存储器叫做程序存储器。存储器由许多单元组成,每个单元像个小房间,可以向里放东西,也可以从中取东西。每个单元对应一个存储器地址(就像房间的房间号)。8/10/2023151.3.5程序计数器PC(ProgramCounte

1.3.6数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的──数字,或者说都是一串‘0’和‘1’组成的序列。换言之,地址、指令也都是数据。

指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。

地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。

数据:这是由微处理器处理的对象,在各种不同的应用电路中各不相同,8/10/2023161.3.6数据、地址、指令:之所以将这三者放在一1.3.7总线:在计算机中,各部件是以处理器(CPU)为核心的,各部件都要与处理器相连接,各部件之间的工作必须相互协调,如果处理器和各部件间单独连线,则线的数量将多得惊人,所以在处理机中引入了总线的概念,各个部件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来。但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要对器件进行选择和控制,使器件分时工作,任何时候只能有一个器件发送或接受数据。器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。8/10/2023171.3.7总线:在计算机中,各部件是以处理器(CPU)为核8/10/2023188/1/2023181.4程序的执行过程8/10/2023191.4程序的执行过程8/1/202319一个计算机是这样工作的。当加电之后,时钟信号产生,并且自动产生一个复位信号。复位信号将程序计数器PC复位为0;CPU以PC的值为存储器地址从存储器0单元中取出第一条指令放到指令寄存器IR中;然后CPU对IR中的指令进行译码,产生各种控制信号,这些控制信号完成该指令规定的功能;在完成该指令功能的同时,程序计数器PC加1,为从存储器中取出下一条指令做准备。第一条指令执行结束以后,CPU以PC的值为存储器地址从存储器1单元中取出第2条指令放到指令寄存器IR中,…,一直继续下去,直到程序执行结束。单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000’,所以程序总是从‘0000’单元开始执行,也就是说:在MCS-51程序存储器中一定要存在‘0000’这个单元,并且在‘0000’单元中存放的一定是一条指令。8/10/202320一个计算机是这样工作的。当加电之后,时钟信号产生,并且1.5单片机应用的开发过程1、电路板的制作2、目标文件的生成:利用PC机上的开发软件,编写源程序,经汇编(或编译)后生成目标文件(.HEX).3、目标程序的烧写:将目标程序装入到单片机芯片或存储器芯片中。使用编程器或采用在系统编程(ISP)技术.

8/10/2023211.5单片机应用的开发过程8/1/202321第二章MCS-51单片机的初步认识2.1引脚功能电源引脚Vcc(40):电源+5V

0.5VGnd(20):地时钟XTAL1(19):内部振荡器输入端XTAL2(18):内部振荡器输出端

8/10/202322第二章MCS-51单片机的初步认识8/8/10/2023238/1/202323(a)内部时钟方式,(b)外部时钟方式晶振6MHZ电容5-30P复位电路(9)电容C22ufR21-2KR1200

复位后程序计数器PC=0000H程序从0000H地址单元开始执行,复位时间大约5-10mS,RST引脚加高电平8/10/202324(a)内部时钟方式,(b)外部时钟方式晶振6MHZ电容EA(31):输入EA引脚接高电平时,从内部程序存储器开始,当程序超过内部程序器的容量时转到外部程序存储器取指令。EA引脚接低电平时,单片机转到外部程序存储器中取指令(无论片内是否有程序存储器)。外部程序存储器的地址从0000H开始编址。8/10/202325EA(31):输入8/1/2023252.2实验1指令的初步认识8/10/2023262.2实验1指令的初步认识8/1/202326

从上一节我们看到MCS-51有40个管脚,我们已经用了6个,还有34个,这34个管脚中有32个分成了4组,每组8个,分别叫做P0.0-P0.7P1.0-P1.7P2.0-P2.7P3.0-P3.7分别叫做P0口、P1口、P2口、P3口。这4个口都是双向(既可以输出也可以输入)口,但又有所不同,P0口、P2口、P3口除可以用作输入输出以外还有第二功能,以后用到时再讲。我们的第一个实验是要用单片机点亮一只发光二极管LED或者同时点亮8只发光二极管。我们将这8只发光二极管接在P1.0-P1.7上(管脚1-8)。8/10/202327从上一节我们看到MCS-51有40个管脚,我们已经用在这个图中如果想让某一个发光二极管(比如第1个)亮怎么办呢?当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。也就是说,我们要能够让1引脚按要求变为高或低电平就可以了。我们又怎样让它变‘高’或变‘低’呢?计算机能听得懂的命令称之为计算机的指令。在MCS-51中,让一个引脚输出高电平或低电平的指令有两种,一种是SETB和CLR指令,这种叫做位操作指令。我们要1脚输出高电平,只要写SETBP1.0,要1脚输出低电平,只要写CLRP1.0就可以了。还有一种就是数据传送指令,比如MOVP1,#data。这种指令一次同时改变P1口8位的状态。我们要1脚输出高电平,只要写MOVP1,#01H,要1脚输出低电平,只要写MOVP1,#00H就可以了。

8/10/202328在这个图中如果想让某一个发光二极管(比如第1个)亮怎么办呢?我们怎样才能计算机执行这条指令呢?第一步借助计算机里的编辑软件编写源程序。现在普遍使用的是KeilC51软件。计算机是看不懂SETBCLR之类的指令,所以第二步把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西——数字。因此我们得把SETBP1.0变为(D2H,90H),把CLRP1.0变为(C2H,90H),至于为什么是这两个数字,这也是由51芯片的设计者--INTEL规定的,我们不去研究。这个翻译的过程在计算机术语中叫做编译。编译后生成的文件叫做目标文件。第三步就要把目标文件写入到单片机中去。有两种方法一种是要借助于一个硬件工具“编程器”。还有一种就是在线编程ISP.

8/10/202329我们怎样才能计算机执行这条指令呢?第一步借助计算机里的编辑软ORG0000H;存储器ROM起始地址LJMP0100H;跳转到主程序地址ORG0100H;主程序起始地址CLRP1.0;执行指令ENDORG0000H;存储器ROM起始地址CLRP1.0;执行指令ENDORG0000H;存储器ROM起始地址MOVP1,#11111110B;执行指令END8/10/202330ORG0000H;存储器ROM起始地址8/1/20233这里ORG、END是伪指令,分号后面的是注释,这些都是不往单片机中写入的,ORG是表示从程序存储器ROM(只读存储器)的什么地址开始存储,END表示指令结束。LJMP是跳转指令,因为芯片的设计者规定,单片机ROM中的开始一些字节有专门的用途,所以我们把指令从0100H这个地址开始存储。8/10/2023318/1/2023318/10/2023328/1/2023322.3单片机汇编语言程序初步认识2.3.1在前边的实验中我们只是点亮了一个LED,我们还可以让它闪烁。闪烁实际上就是要灯亮一段时间,再灭一段时间,也就是说要P1.0不断地输出低和高电平。但是程序是不是可以直接写入:SETBP1.0CLRP1.0这是不行的。第一,计算机执行指令的时间很快,执行完SETBP1.0后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLRP0.0指令,灯又亮了,所以根本看不出灯曾经灭过。第二,在执行完CLRP1.0后,不会再去执行SETBP1.0指令,以后再也没有机会让LED灭了。为了解决这两个问题,我们可以做如下设想,第一,在执行完SETBP1.0后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以看出LED曾经灭过了。第二,在执行完第二条指令后,让计算机再去执行第一条指令,不断地兜圈,我们称之为"循环",这样就可以完成任务了。8/10/2023332.3单片机汇编语言程序初步认识8/1/2023338/10/2023348/1/202334ORG0000H;存储器ROM起始地址LJMP0100H;跳转到主程序地址ORG0100H;主程序起始地址LOOP:SETBP1.0;熄灭LED,LCALLDELAY;调用延时子程序CLRP1.0;点亮LEDLCALLDELAY;调用延时子程序LJMPLOOPDELAY:MOVR7,#250;工作寄存器R7赋初值D1:MOVR6,#250;工作寄存器R6赋初值D2:DJNZR6,D2;62500DJNZR7,D1RETEND8/10/202335ORG0000H由这个实验我们可能会提出这样几个问题?1、程序中R6R7代表什么意思?2、程序的延迟是怎么实现的?延迟时间的长短怎么确定?3、什么是汇编语言,汇编语言的基本格式是怎样的?8/10/202336由这个实验我们可能会提出这样几个问题?8/1/2023362.3.2工作寄存器什么是工作寄存器呢?计算机做运算时,为了要得到最终结果,往往要有很多的中间结果,这些中间结果要有个地方才行。所以在单片机中有一个区域称为RAM(RAM随机存储器),也叫数据存储器,也就是随时可以将数据写进去,也可以在需要的时候将数据读出来。在MCS-51单片机中,片内RAM有128个字节,其中最低的32个字节开辟为工作寄存器区。8/10/2023372.3.2工作寄存器8/1/2023378/10/2023388/1/2023382.3.3CPU时序的基本概念

在上面一个实验中我们知道DJNZR6,D2这句话会被执行62500次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。我们规定:计算机访问一次存储器的时间,称之为一个机器周期。这是一个时间基准,一个机器周期包括12个时钟周期。设一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。在工作于6M晶振的单片机中,它的机器周期是2微秒。MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。8/10/2023392.3.3CPU时序的基本概念8/1/202339

现在让我们来计算刚才那段延时程序的延迟时间。首先必须知道晶振的频率,我们所用晶振为6M,这样一个机器周期就是2微秒。而DJNZ指令是双周期指令,所以执行一次需要4个微秒。一共执行62500次,正好250000微秒,也就是250毫秒。发光二极管在一秒钟内亮灭各两次。问题:如果我们想改变二极管亮灭的频率,该怎么办呢?8/10/202340现在让我们来计算刚才那段延时程序的延迟时间。首先必须2.4MCS-51存储器组织2.4.1RAM(随机存储器)ROM(只读存储器)RAMCPU在运行时能随时进行数据的写入读出,电源关闭时,所存信息丢失。ROM写入信息后,关闭电源,信息不丢失的存储器,也叫非易失性存储器。因此,写入和擦除过程比RAM复杂。根据写入和擦除过程的不同分:掩膜ROM、光擦除ROM、电可擦除ROM、Flash(闪存)。8/10/2023412.4MCS-51存储器组织8/1/2023418/10/2023428/1/202342

2.4.2MCS-51程序存储器80C51分程序存储器和数据存储器,程序存储器分片内和片外两部分,最大64K.当EA接高电平时,首先从片内存储器取指令,当超过范围时系统会自动转到片外程序存储器取指令。80C51片内程序存储器大小是4K(0000H-0FFFH)。随着半导体技术的发展,现在常用的89C5X单片机,使用Flash技术内部程序存储器可以达16K、32K或64K.所以一般只使用内部程序存储器就够了。复位后,程序的第一条指令总是从0000H地址读取。8/10/2023432.4.2MCS-51程序存储器8/1/2023432.4.3MCS-51数据存储器也分片内RAM和片外RAM。片内RAM128个字节,地址00H-7FH,片外RAM最大64K,地址0000H-FFFFH●工作寄存器区32个00H-1FH●位寻址区20FH-2FH16个字节,128位,00H-7FH被寻址的位可以进行位操作。没有用到的单元可以按通用RAM进行字节操作。位操作还是字节操作,由指令区分例如:SETB00H;使20H单元的D0位置“1”MOV20H,#01H;两条指令的区别是:第二条D0为“1”,D1-D7都为“0”,第一条D0为“1”,D1-D7保持不变.

8/10/2023442.4.3MCS-51数据存储器8/1/202344字节地址位地址

2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20HD7D6D5D4D3D2D1D07FH7EH7DH7CH7BH7AH79H78H77H76H75H74H73H72H71H70H6FH6EH6DH6CH6BH6AH69H68H67H66H65H64H63H62H61H60H5FH5EH5DH5CH5BH5AH59H58H57H56H55H54H53H52H51H50H4FH4EH4DH4CH4BH4AH49H48H47H46H45H44H43H42H41H40H3FH3EH3DH3CH3BH3AH39H38H37H36H35H34H33H32H31H30H2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H1FH1EH1DH1CH1BH1AH19H18H17H16H15H14H13H12H11H10H0FH0EH0DH0CH0BH0AH09H08H07H06H05H04H03H02H01H00H8/10/202345字节地址位地址

2FH2EH2D

●通用RAM区80个,一般用于堆栈或其他操作●片外RAM64K0000H-FFFFH低地址与片内RAM重合。靠指令区分:MOV38H,#80H;片内RAMMOVX@DPTR,#80H片外RAM8/10/202346●通用RAM区80个,一般用于堆栈或其他操作8/2.4.4MCS-51的特殊功能寄存器(SFR)●21个,与片内RAM统一编址,分布在80H-FFH地址空间内。●字节地址能被8整除的(即十六进纸的地址码尾数为0或8的)单元可以具有位地址功能。例如:P0(字节地址80H位地址80H-87H)P1(字节地址90H位地址90H-97H)P2(字节地址A0H位地址A0H-A7H)P3(字节地址B0H位地址B0H-B7H)ACC(字节地址E0H位地址E0H-E7H)●每个寄存器都有一个名字,不用记它的地址号。8/10/2023472.4.4MCS-51的特殊功能寄存器(SFR)8/1/符号单元地址名称位地址符号地址*ACCE0H累加器ACC.7~ACC.0E7H~E0H*BF0H乘法寄存器B.7~B.0F7H~F0H*PSWD0H程序状态字PSW.7~PSW.0D7H~D0HSP81H堆栈指针

DPL82H数据存储器指针(低8位)

DPH83H数据存储器指针(高8位)

*IEA8H中断允许控制器IE.7~IE.0AFH~A8H*IPB8H中断优先控制器IP.7~IP.0BFH~B8H*P080H通道0P0.7~P0.087H~80H*P190H通道1P1.7~P1.097H~90H*P2A0H通道2P2.7~P2.0A7H~A0H*P3B0H通道3P3.7~P3.0B7H~B0HPCON87H电源控制及波特率选择

*SCON98H串行口控制SCON.7~SCON.09FH~98HSBUF99H串行数据缓冲器

*TCON88H定时控制TCON.7~TCON.08FH~88HTMOD89H定时器方式选择

TL08AH定时器0低8位

TL18BH定时器1低8位

TH08CH定时器0高8位

TH18DH定时器1高8位

8/10/202348符号单元地址名称位地址符号地址*ACCE0H累加器ACC.●累加器(Acc)运算指令的目标寄存器,用于访问外部存储器的唯一寄存器。●B寄存器(B)专用于乘除法指令,亦可作通用寄存器。●堆栈指针(SP)栈指针复位状态07H●数据指针(DPTR)16位寄存器,由两个8位寄存器DPH与DPL组成。主要作用是提供访问外部数据存储器或I/O端口的地址。DPH与DPL可作为通用寄存器使用。●程序计数器(PC)即指令指针。16位寄存器,为CPU提供当前待取的指令地址。CPU每读取一个字节的指令内容,PC即自动加一。复位状态为0000H。不能在程序中直接读或修改PC的内容。●

8/10/202349●累加器(Acc)●8/1/2023492.5MCS-51的并行口操作2.5.1●4个并行口,8位,输入/输出,每一条口线都可以单独用作位输入/输出。●P0口:用作地址/数据总线,分时复用技术,执行输出指令时,低8位地址信息、8位数据信息先后出现在P0口(地址/数据总线)上。执行输入指时,先输出8位地址,然后数据进入内部数据总线。●P2口:在有外部ROM或扩展了外部RAM时,用作地址的高8位。

8/10/2023502.5MCS-51的并行口操作8/1/2023508/10/2023518/1/202351单片机在读写外部数据时,P0口上首先出现的是低8位地址,然后是数据信号,当然地址信号与指令数据信号之间有一段缓冲的过度时间,这就要求,在数据信号出现以前必须把低8位的地址信号保存起来,这时是用ALE选通脉冲去控制锁存器把低8位地址予以锁存。这就是说在一个单片机的系统中,只要外部扩展有存储器或输入输出设备,就必须增加一片锁存器器件(74LS273或74LS373)。所以单片机上有一个引脚ALE,用来区别P0输出的是地址还是数据。

8/10/202352单片机在读写外部数据时,P0口上首先出现的是低8位地址,然后

●P3口的第二功能P3.0RXD(串行口数据输入)P3.1TXD(串行口数据输出)P3.2INT0(外部中断0输入)P3.3INT1(外部中断1输入)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器“写”控制信号)P3.7RD(外部数据存储器“读”控制信号)●P1口:I/O口8/10/202353●P3口的第二功能8/1/2023532.5.2

什么时间用到口的第二功能?要不要预先设置?回答是:不用,靠指令来区分。●MOVX指令时:P0P2P3(WRRD)●外部取指令时:P0P2●串口I/O功能处于运行状态用到RXDTXD●外部中断已打开时用到INT0INT1●定时器/计数器处于外部计数状态时用到T0T18/10/2023542.5.2什么时间用到口的第二功能?要不要预先设置?8/2.5.3并行口使用注意事项1、P0口做为I/O使用时,要接上拉电阻。(一般5K-10K)其他几个口内部有上拉电阻。2、注意每根口线的负载能力(最大吸收电流),和整个口吸收电流的总和限制。3、4个口都是双向口。当需要读口的引脚状态时,必需先向口锁存器写入“1”,然后再读数据。8/10/2023552.5.3并行口使用注意事项8/1/2023558/10/2023568/1/202356

第三章MCS-51的指令系统3.1指令:是CPU按照人们的意图来完成某种操作的命令。一台计算机的CPU所能执行的全部指令的集合称为这个CPU的指令系统。MCS-51指令系统共有111条指令。

单字节指令:49条单周期指令:64条双字节指令:48条双周期指令:45条三字节指令:17条四周期指令:2条8/10/202357第三章MCS-51的指令系统8/符号约定:Rn表示当前工作寄存器中的R0

R7Direct表示对内部单元直接寻址的8位地址Ri表示8位地址指针

R0或

R1,地址在R0或R1中。DPTR表示16位地址指针,地址在DPTR中。#data表示8位立即数。#data16表示16位立即数。A+基地址表示以A为变址寄存器。addr11表示短转移的11位地址。addr16表示长转移的16位地址。rel表示相对转移的地址偏移量。bit表示位地址。(xx)表示XX单元的内容,如(A)表示寄存器A的内容。((xx))表示以(xx)为指针,所指单元的内容。例如,((DPTR))表示数据指针DPTR所指单元的内容。8/10/202358符号约定:8/1/202358程序状态字(PSW)Cy:进位(借位)标志;位操作累加器。AC:半进位(借位)标志,低半字节向上有进位(借位)时。F0:用户标志,由用户自行设置,在程序运行中标识某种状态。OV:溢出标志。有符号数加减运算发生溢出时置位。P:奇偶标志(标识Acc的当前奇偶状态),奇数个1时,P=1

RS1RS0:寄存器组选择8/10/202359程序状态字(PSW)RS1RS0:寄存器组选择8/1/202●累加器(Acc)运算指令的目标寄存器,用于访问外部存储器的唯一寄存器。●B寄存器(B)专用于乘除法指令,亦可作通用寄存器。●堆栈指针(SP)栈指针复位状态07H●数据指针(DPTR)16位寄存器,由两个8位寄存器DPH与DPL组成。主要作用是提供访问外部数据存储器或I/O端口的地址。DPH与DPL可作为通用寄存器使用。●程序计数器(PC)即指令指针。16位寄存器,为CPU提供当前待取的指令地址。CPU每读取一个字节的指令内容,PC即自动加一。复位状态为0000H。不能在程序中直接读或修改PC的内容。8/10/202360●累加器(Acc)8/1/2023603.2寻址方式基本寻址方式:寄存器寻址直接寻址寄存器间接寻址立即寻址扩展寻址方式:变址寻址相对寻址位寻址8/10/2023613.2寻址方式8/1/2023613.2.1寄存器寻址:操作数放在寄存器中,指令中直接给出该寄存器的名称的寻址方式例如:若(R0)=30H,指令MOVA,R0执行后(A)=30H采用寄存器寻址的寄存器可以为:工作寄存器R0-R7累加器A寄存器B数据指针DPTR8/10/2023623.2.1寄存器寻址:操作数放在寄存器中,指令中直接给3.2.3直接寻址:在指令中给出了参与运算的操作数所在单元的地址,或所在位的位地址。例如:MOVA,20H若(20H)=55H指令运行后(A)=55H即把20单元的内容(数)送累加器A直接寻址方式可以有3种地址空间:1、内部RAM:00H-7FH2、21个特殊功能寄存器3、位寻址空间

8/10/2023633.2.3直接寻址:在指令中给出了参与运算的操作数所在单3.2.4立即寻址:指令码中直接给出操作数的寻址方式紧跟在操作码之后的操作数称为立即数,立即数可以是一个字节,也可以是两个字节,并要用“#”来标识。例如:MOVA,#50H注意与MOVA,50H的区别MOVDPTR,#2100H由于立即数是一个常数,所以只能作为源操作数。立即寻址对应的寻址空间位ROM空间8/10/2023643.2.4立即寻址:指令码中直接给出操作数的寻址方式8/13.2.5寄存器间接寻址:寄存器中的内容为地址,从该地址去取操作数的寻址方式。作为地址寄存器的寄存器只有R0、R1、DPTR,在指令中表示为@R0、@R1、@DPTR。若(R0)=30H,(30H)=5AH,指令MOVA,@R0z执行后(A)=5AH.寄存器间接寻址的寻址范围:1、片内RAM00H-7FH(采用@R0@R1)2、片外RAM0000H-FFFFH@DPTR指出地址,也可由@R0和@R1指出操作数所在单元的低8位地址,此时高8位地址由P2口提供。

●片内RAM的数据传送用MOV类指令,片外RAM的数据传送用MOVX类指令8/10/2023653.2.5寄存器间接寻址:寄存器中的内容为地址,从该地址3.2.6位寻址方式对位地址中的内容进行操作的寻址方式.位寻址方式的实质是属于位的直接寻址。例如:MOVC,00H若位地址00H的内容为1,执行后PSW.7(Cy)的内容为1.CLR07HSETBACC.6位寻址空间:1、片内RAM的20H-2FH单元的128个可寻址位2、SFR的可寻址位(常用符号位地址表示)

8/10/2023663.2.6位寻址方式对位地址中的内容进行操作的寻址方式3.3数据传送类指令3.3.1MOV型指令将源操数内容送到目的操作数中,或将源操作数和目的操作数进行交换。1、以累加器为目的的操作数(4条)MOVA,#DATA;MOVA,direct;MOVA,Rn;MOVA,@Ri;2、以直接地址为目的的操作数(5条)MOVdirect,#DATA;MOVdirect,direct;MOVdirect,Rn;MOVdirect,@Ri;MOVdirect,A8/10/2023673.3数据传送类指令8/1/202367举例并说出指令运行结果:

MOVA,R1;将工作寄存器R1中的值送入到累加器A中,R1中的值保持不变。

MOVA,50H;将内存50H单元中的值送入到累加器A中,50H单元中的值保持不变。

MOVA,@R1;先看R1中是什么值,把这个值当做地址,并将这个地址单元中的值送入累加器A中,前面我们已学过,这是寄存器间接寻址方式。

8/10/202368举例并说出指令运行结果:

MOVA,R1;将工作寄存器R

3、以寄存器Rn为目的操作数(3条)MOVRn,#DATA;MOVRn,directMOVRn,A4、以寄存器间接寻址为目的操作数(3条)MOV@Ri,#DATA;MOV@Ri,directMOV@Ri,A5、以数据指针为目的的16位数据传送(1条)MOVDPTR,#DATA16;

8/10/2023693、以寄存器Rn为目的操作数(3条)8/1/202

3.3.2MOVX型指令(4条)

是用于片内和片外数据交换的唯一方式。MOVXA,@DPTRMOVX@DPTR,AMOVXA,@RiMOVX@Ri,A

应用例1:将内部30H单元的内容送外部数据存储器4000H单元。MOVR0,#30H;设置(内部)源指针MOVDPTR,#4000H;设置(外部)目标指针MOVA,@R0;读源数据MOVX@DPTR,A;写目标数据应用例2:读外部RAM3000H单元内容MOVP2,#30H;由P2口提供高8位地址30HMOVR0,#0;低8位地址为00HMOVXA,@R0;读(3000H)单元

8/10/2023703.3.2MOVX型指令(4条)8/1/202注意:

1、在89C51中,与外部存储器RAM打交道的只可以是累加器A,所有需要送入外部RAM的数据必须要通过A送出去。而所有要读入外部RAM中的数据也必需要通过A读入。内部RAM间可以直接进行数据传递,而外部则不行。比如,要将外部RAM中某单元(设为110H单元的数据)送入另外一个单元(设为200H单元),也必须要先将110H单元中的内容读入A,然后再送入200H单元中去。2、要读写外部的RAM,当然也必须要先知道RAM的地址,在前两条指令中,地址是被地址放在DPTR中的,而后两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只能提供低8位地址,必须用P2口提供高8位地址。3、使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。

8/10/202371注意:

1、在89C51中,与外部存储器RAM打交道的只可以3.3.3MOVC型指令(2条)用于对程序存储器的操作MOVCA,@A+PCMOVCA,@A+DPTR

用于读取ROM中的常数例如:有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5)MOVDPTR,#TABLEMOVA,R0MOVCA,@A+DPTR..TABLE:DB0,1,4,9,16,25

8/10/2023723.3.3MOVC型指令(2条)用于对程序存储器的操作8/3.3.4堆栈操作指令(2条)堆栈是在内部RAM中按“后进先出”规则开辟的一片存储区。用来保护CPU执行程序的现场。如CPU相应中断和子程序调用时的返回地址、重要的单元和寄存器的内容等。其中保护重要的单元和寄存器的内容采用堆栈操作指令完成。PUSHdirect;SP←(SP)+1(SP)←(direct)POPdirect;(direct)←((SP))SP←(SP)-1使用堆栈指令时应注意:1、PUSH和POP指令的操作数必须是单元地址。2、MCS-51的堆栈建在内部RAM中,系统复位后(SP)=07H.在应用系统中一般把栈区开辟

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论