配套课件-单片机原理及接口技术_第1页
配套课件-单片机原理及接口技术_第2页
配套课件-单片机原理及接口技术_第3页
配套课件-单片机原理及接口技术_第4页
配套课件-单片机原理及接口技术_第5页
已阅读5页,还剩769页未读 继续免费阅读

下载本文档

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

文档简介

第1章单片机基础知识1.1单片机概述1.2微型计算机中数的表示方法及数制间的转换1.3二进制数的运算1.4微机的码制和编码习题与思考题1.1单片机概述1.1.1微处理器、微型计算机和单片机的概念电子计算机高速发展到今天,通常可分为巨型机、大型机、中型机、小型机和微型机五类。它们在系统结构和基本工作原理方面并无本质的区别,只是在体积、性能和应用领域方面有所不同。1.微处理器MP(MicroProcessor)

微处理器就是传统计算机的CPU,是集成在同一块芯片上的具有运算和逻辑控制功能的中央处理器,简称MP,它是构成微型计算机系统的核心部件。

2.微型计算机MC(MicroComputer)

以微处理器为核心,再配上存储器、I/O接口和中断系统等构成的整体,称为微型计算机。它们可集中装在同一块或数块印刷电路板上,一般不包括外设和软件。3.微型计算机系统MCS(MicroComputerSystem)

这是指以微型计算机为核心,配上外围设备、电源和软件等,构成能独立工作的完整计算机系统。

4.单片微型计算机(SingleChipMicrocomputer)

单片机是将微处理器、存储器、I/O(Input/Output)接口和中断系统集成在同一块芯片上,具有完整功能的微型计算机,这块芯片就是其硬件。1.1.2单片机的发展状况单片机的发展很快,每隔二三年就要更新换代一次,其发展过程大致可分为以下几个阶段。

(1)第一代单片机(1974~1976年):这是单片机发展的起步阶段。

(2)第二代单片机(1976~1978年):这一阶段生产的单片机已是单块芯片,但其性能低、品种少、寻址范围有限、应用范围也不广。

(3)第三代单片机(1979~1982年):这是8位单片机的成熟阶段。(4)第四代单片机(1983年以后):这一阶段8位单片机向更高性能发展,同时出现了工艺先进、集成度高、内部功能更强和运算速度更快的16位单片机,它允许用户采用面向工业控制的专用语言,如C语言等。1.1.3ATMEL89系列单片机简介

ATMEL89系列(以下简称AT89)单片机是美国ATMEL公司生产的8位高性能单片机,其主要技术优势是内部含有可编程Flash存储器,用户可以很方便地进行程序的擦写操作,在嵌入式控制领域中被广泛的应用。AT89系列单片机与工业标准MCS-51系列单片机的指令组和引脚是兼容的,因而可替代MCS-51系列单片机使用。AT89系列单片机可分为标准型、低档型和高档型三种类型。表1-1列举出AT89系列单片机的概况。表1-1AT89系列单片机概况型号AT89C51AT89C52AT89C1051AT89C2051AT89S8252档次标准型低档型高档型Flash/KB48128片内RAM/KB12825664128256I/O/条3232151532定时器/个23123中断源/个68369串行接口/个11111M加密/级33223片内振荡器有有有有有EEPROM/KB无无无无无1.2微型计算机中数的表示方法及数制间的转换1.2.1微型计算机中的常用数制微型计算机中常用的数制有三种,即十进制数、二进制数和十六进制数。

1.十进制数十进制数是我们最熟悉的一种进位计数制,其主要特点是:

(1)它由0、1、2、3、4、5、6、7、8、9不同的基本数码符号构成,基数为10。(2)进位规则是“逢十进一”,一般在数的后面加符号D表示十进制数。所谓基数,在数学中指计数制中所用到的数码的个数。2.二进制数二进制数是计算机内的基本数制,其主要特点是:

(1)任何二进制数都只由0和1两个数码组成,其基数是2。

(2)进位规则是“逢二进一”。一般在数的后面用符号B表示这个数是二进制数。二进制数同样可以用幂级数形式展开。3.十六进制数十六进制数是微型计算机软件编程时常采用的一种数制,其主要特点是:

(1)十六进制数由16个数符构成:0、1、2、…、9、A、B、C、D、E、F,其中A、B、C、D、E、F分别代表十进制数的10、11、12、13、14、15,其基数是16。

(2)进位规则是“逢十六进一”。一般在数的后面加一个字母H表示是十六进制数。1.2.2数制间的转换

1.二进制数与十六进制数的转换

1)二进制数转化成十六进制数采用四位二进制数合成一位十六进制数的方法,以小数点开始分成左侧整数部分和右侧小数部分。

2)十六进制数转换成二进制数将十六进制数的每位分别用四位二进制数码表示,然后把它们连在一起即为对应的二进制数。2.二进制数与十进制数间的转换1)二进制数转换成十进制数将二进制数按权展开后相加即得到对应的十进制数。2)十进制数转化成二进制数十进制数的整数部分和小数部分转化成二进制数的方法不同,要将它们分别转换,然后将结果合并到一起即得到对应的二进制数。

(1)十进制整数转成二进制整数的常用方法是“除2取余法”,即用2连续去除要转换的十进制数和所得的商,直到商小于2为止,依次记下各个余数,然后按最先得到的余数为最低位,最后得到的余数为最高位依次排列,就得到转换后的二进制整数。(2)十进制小数转换成二进制小数的常用方法是“乘2取整法”,即用2连续去乘要转换的十进制小数部分和前次乘积后的小数部分,依次记下每次乘积的整数部分,直到小数部分为0或满足所需要的精度为止,然后按最先得到的整数为二进制小数的最高位,最后得到的为最低位依次排列,就得到转换后的二进制小数。3.十六进制数和十进制数间的转换1)十六进制数转换成十进制数将十六进制数按权展开后相加即得到对应的十进制数。2)十进制数转换成十六进制数与二进制相似,十进制整数和小数要分别转换。

(1)十进制整数转换成十六进制整数的方法是“除16取余法”,即用16连续去除要转换的十进制整数和所得的商,直到商小于16为止,依次记下各个余数,然后按最先得到的余数为最低位,最后得到的余数为最高位依次排列,就得到所转换的十六进制数。(2)十进制小数转换成十六进制小数的常用方法是“乘16取整法”,即用16连续去乘要转换的十进制小数部分和前次乘积的小数部分,依次记下每次乘积的整数部分,直到小数部分为零或满足所需要的精度为止,然后按最先得到的整数为十六进制小数的最高位,最后得到的为最低位依次排列,就得到所转换的十六进制小数。1.3二进制数的运算1.3.1算术运算

1.加法运算运算规则为:0+0=0、1+0=0+1=1、1+1=10(向高位有进位)。

2.减法运算运算规则为:0-0=0、1-0=1、1-1=0、0-1=1(向高位借1当作2)。3.乘法运算运算规则为:0×0=0、0×1=1×0=0、1×1=1。

4.除法运算除法运算是乘法运算的逆运算。与十进制类似,从被除数最高位开始取出与除数相同的位数,减去除数。1.3.2逻辑运算微型机内二进制信息的逻辑运算由专门的逻辑电路完成。

1.逻辑与运算逻辑与常用符号“∧”表示,运算规则为:0∧0=0,1∧0=0,0∧1=0,1∧1=1。两个位数相同的二进制数进行逻辑与时,只是对应位进行与运算。2.逻辑或运算逻辑或又称为逻辑加,常用符号“∨”表示,其运算规则为:0∨0=0,1∨0=1,0∨1=1,1∨1=1。

3.逻辑非运算逻辑非运算又称逻辑取反,常用运算符号“-”表示,运算规则为:=1,=0。4.逻辑异或运算逻辑异或又称半加,是不考虑进位的加法,常用运算符号表示。1.4微机的码制和编码1.4.1原码、反码和补码在微型计算机中,参与算术运算的数基本表示形式是机器数。所谓机器数就是已经数码化的带符号数。在8位微型计算机中约定,最高位D7用来表示符号,而其他7位用于表示数值。如图1-1所示,D7=0表示正数,D7=1表示负数。

图1-18位机器数结构1.原码在微型计算机中,原码就是机器数的原始形式。最高位为符号位,0表示正数,1表示负数,其余位表示数值。一个数的原码标记方法是将该数用方括号括起来,在方括号右下角加一个“原”字来表示。

2.反码微型计算机中二进制数的反码有正数反码和负数反码之分,求法也很简单。正数的反码和原码相同;负数反码的符号位与负数原码的符号位相同。3.补码微型计算机中,二进制数补码的概念我们可以先通过钟表对时的例子加以解释。例如,现在的正确时间为下午3点钟,而某块手表却错误地指向早上7点钟,为了校准手表,可采取两种方法,一种是顺时针拨8个小时,另一种是逆时针拨4个小时,两种的结果是相同的。这样可得到两个数学算式:

(1)顺拨时是加法运算:7+8=12(自动丢失)+3=3。

(2)逆拨时是减法运算:7-4=3。

8位二进制数中,正数和负数的补码求法不同。具体方法如下:

(1)正数的补码与正数的原码相同,一般表达式为:[X]补=X(X>0)。

(2)负数的补码由它的绝对值求反加1后得到,一般表达式为[X]补=+1。

(3) 0的补码只有一种,为[+0]补=[-0]补=00000000B

对于8位二进制数,补码表示的范围为-128~+127。1.4.2微型机中常用的编码

1.BCD码

BCD码是将每一位十进制数用二进制数编码,它保留了十进制的权,数字则用二进制数表示,因而也称为二-十进制数。一般用标识符[…]BCD表示。BCD码种类较多,如8421码、2421码、格雷码等,其中最常用的编码为8421码。

1) 8421码编码方法

8421码编码原则是每位十进制数用4位二进制数来表示,8、4、2、1代表4位二进制数每一位的权。8421码名称也由此而得。十进制数共有0~9十个数字,而4位二进制数共有16种组合。8421码用其中0000B~1001B组合表示0~9十个十进制数。而1010B~1111B六个编码舍去不用。它们之间的对应关系如表1-2所示。表1-28421码与十进制数的对应关系十进制数BCD码十进制数BCD码00000B70111B10001B81000B20010B91001B30011B1000010000B40100B1100010001B50101B1200010010B60110B1300010011B2) BCD码的运算

BCD码用4位二进制数表示0~9十个十进制数,但4位二进制数可表示16种状态。因而有六种状态在BCD编码中为非法码。这样在BCD码的运算中必须进行修正才能得到正确的结果。(1) BCD码加法运算:两个BCD码相加的原则是“逢十进位”,其和也是一个BCD数。

(2) BCD码减法运算:BCD码作减法运算时也需要修正。修正的原则是:低4位出现非法码(大于9)或低4位向高4位有借位,则低4位减6修正;高4位出现非法码(大于9)或高4位最高位有借位,则高4位减6修正。2.ASCII码在微型计算机中,除了处理数字信息外,还要处理大量字母和符号信息。这些字母和符号统称为字符,它们也必须用特定规则进行二进制编码,以供微型计算机识别和处理。习题与思考题1.1什么是单片微型计算机?它与微处理器、微型计算机、微型计算机系统有何区别?

1.2单片机的发展分为哪几个阶段?各阶段的特点是什么?

1.3AT89系列单片机分为几类?各类的主要技术特点是什么?都有哪些型号?

1.4微型计算机中常用的数制有几种?计算机内部采用哪种数制?1.5十六进制数能被计算机直接执行吗?为什么要用十六进制数?1.6将下列十进制数转换为二进制数和十六进制数。(1) 125(2) 0.525(3) 121.687(4) 47.9451.7将下列二进制数转换为十进制数和十六进制数。

(1) 10110101(2) 0.10110010(3) 0.1010(4) 1101.01011.8将下列十六进制数转换为十进制数和二进制数。

(1) ABH(2) 28.07H(3) ABC.DH(4) 0.35FH1.9已知下列各组二进制数X、Y,试求X+Y、X-Y、X×Y和X÷Y。

(1) X=10101110B,Y=1001B(2) X=101101B,Y=1010B(3) X=11010011B,Y=1110B(4) X=11001110B,Y=110B1.10将下列各组十六进制数转换成二进制数,然后分别完成逻辑与、逻辑或、逻辑非、逻辑异或运算。

(1) 23H和BCH(2) ABH和76H(3) CDH和8FH(4) 10H和67H1.11在8位二进制计算机数中,正负数如何表示?1.12什么叫机器数?机器数的表示方法有几种?1.13写出下列各十进制数的原码、反码和补码。(1) +28(2) +69(3) -125(4) -541.14什么是BCD码?BCD码与二进制数有何区别?1.15写出下列各十进制数的BCD码。(1) 34(2) 59(3) 1983(4) 2701.16已知下列各组数据,用BCD码求下列X+Y和X-Y。(1) X=36,Y=26(2) X=100,Y=44(3) X=27,Y=79(4) X=51,Y=881.17什么是ASCII码?查表写出下列字符的ASCII码。(1) A (2) 7 (3) b (4) @(5) = (6) ? (7) G (8)回车CR第2章AT89C51单片机结构和原理 2.1AT89C51单片机的结构2.2AT89C51单片机引脚及其功能

2.3AT89C51存储器2.4AT89C51单片机工作方式2.5AT89C51时钟电路与时序习题与思考题2.1AT89C51单片机的结构AT89系列单片机在结构上基本相同,只是在个别模块和功能上有些区别。图2-1是AT89C51单片机的内部结构框图。它包含了作为微型计算机所必需的基本功能部件,各功能部件通过片内单一总线连成一个整体,集成在一块芯片上。图2-1AT89C51内部结构框图2.1.1中央处理器(CPU)CPU是单片机内部的核心部件,是一个8位二进制数的中央处理单元,主要由运算器、控制器和寄存器阵列构成。

1.运算器运算器用来完成算术运算和逻辑运算功能,它是AT89C51内部处理各种信息的主要部件。运算器主要由算术逻辑单元(ALU)、累加器(ACC)、暂存寄存器(TMP1、TMP2)和状态寄存器(PSW)组成。(1)算术逻辑单元(ALU):AT89C51中的ALU由加法器和一个布尔处理器组成(图中未具体画出)。

(2)累加器(ACC):用来存放参与算术运算和逻辑运算的一个操作数或运算的结果。

(3)暂存寄存器(TMP1、TMP2):用来存放参与算术运算和逻辑运算的另一个操作数,它对用户不开放。

(4)状态寄存器(PSW):PSW是一个8位标志寄存器,用来存放ALU操作结果的有关状态。表2-1PSW各位定义表位编号PSW7PSW6PSW5PSW4PSW3PSW2PSW1PSW0位定义CYACF0RS1RS0OV—P位地址D7HD6HD5HD4HD3HD2HD1HD0H①进位标志位CY:表示累加器A在加减运算过程中其最高位A7有无进位或借位。②辅助进位位AC:表示累加器A在加减运算时低4位(A3)有无向高4位(A4)进位或借位。③用户标志位F0:是用户定义的一个状态标志位,根据需要可以用软件来使它置位或清除。④寄存器选择位RS1、RS0:AT89C51共有四组,每组八个工作寄存器R0~R7。编程时用于存放数据或地址。但每组工作寄存器在内部RAM中的物理地址不同。RS1和RS0的四种状态组合就是用来确定四组工作寄存器的实际物理地址的。RS1、RS0状态与工作寄存器R0~R7的物理地址关系如表2-2所示。表2-2工作寄存器组R0~R7的物理地址RS1RS0工作寄存器组号R0~R7的物理地址0

00

11

011012300H~07H08H~0FH16H~17H18H~1FH⑤溢出标志位OV:当执行算术指令时,由硬件自动置位或清零,表示累加器A的溢出状态。⑥奇偶标志位P:用于指示运算结果中1的个数的奇偶性,若累加器A中1的个数为奇数,则P=1;若1的个数为偶数,则P=0。2.控制器控制器是单片机内部按一定时序协调工作的控制核心,是分析和执行指令的部件。控制器主要由程序计数器PC、指令寄存器IR、指令译码器ID和定时控制逻辑电路等构成。程序计数器PC是专门用于存放现行指令的16位地址的。CPU就是根据PC中的地址到ROM中去读取程序指令码和数据,并送给指令寄存器IR进行分析。

指令寄存器IR用于存放CPU根据PC地址从ROM中读出的指令操作码。指令译码器ID是用于分析指令操作的部件,指令操作码经译码后产生相应于某一特定操作的信号。定时控制逻辑中定时部件用来产生脉冲序列和多种节拍脉冲。3.寄存器阵列寄存器阵列是单片机内部的临时存储单元或固定用途单元,包括通用寄存器组和专用寄存器组。通用寄存器组用来存放过渡性的数据和地址,提高CPU的运行速度。专用寄存器组主要用来指示当前要执行指令的内存地址,存放特定的操作数,指示指令运行的状态等。2.1.2存储器

AT89C51单片机内部有256个字节的RAM数据存储器和4 KB的闪存程序存储器(Flash),当不够使用时,可分别扩展为64KB外部RAM存储器和64KB外部程序存储器。它们的逻辑空间是分开的,并有各自的寻址机构和寻址方式。这种结构的单片机称为哈佛型结构单片机。程序存储器是可读不可写的,用于存放编好的程序和表格常数。数据存储器是既可读也可写的,用于存放运算的中间结果,进行数据暂存及数据缓冲等。2.1.3I/O端口

AT89C51单片机对外部电路进行控制或交换信息都是通过I/O端口进行的。单片机的I/O端口分为并行I/O端口和串行I/O端口,它们的结构和作用并不相同。

1.并行I/O端口

AT89C51有四个8位并行I/O端口,分别命名为P0口、P1口、P2口和P3口,它们都是8位准双向口,每次可以并行输入或输出8位二进制信息。2.串行I/O端口

AT89C51有一个全双工的可编程串行I/O端口,它利用了P3口的第二功能,即将P3.1引脚作为串行数据的发送线TXD,将P3.0引脚作为串行数据的接收线RXD。2.1.4定时器/计数器

AT89C51内部有两个16位可编程定时器/计数器,简称为定时器0(T0)和定时器1(T1),T0和T1分别由两个8位寄存器构成,其中T0由TH0(高8位)和TL0(低8位)构成,T1由TH1(高8位)和TL1(低8位)构成。TH0、TL0、TH1、TL1都是SFR中的特殊功能寄存器(见表2-4)。T0和T1在定时器控制寄存器TCON和定时器方式选择寄存器TMOD的控制下(TCON、TMOD为特殊功能寄存器),可工作在定时器模式或计数器模式下,每种模式下又有不同的工作方式。当定时或计数溢出时还可申请中断。详细情况参见第6章。2.1.5中断系统单片机中的中断是指CPU暂停正在执行的原程序转而为中断源服务(执行中断服务程序),在执行完中断服务程序后再回到原程序继续执行。中断系统是指能够处理上述中断过程所需要的部分电路。

AT89C51的中断系统由中断源、中断允许控制器IE、中断优先级控制器IP、定时器控制器TCON(中断标志寄存器)等构成,IE、IP、TCON均为SFR特殊功能寄存器(见表2-2)。2.1.6内部总线总线是用于传送信息的公共途径。总线可分为数据总线、地址总线、控制总线。单片机内的CPU、存储器、I/O接口等单元部件都是通过总线连接到一起的。采用总线结构可以减少信息传输线的根数,提高系统可靠性,增强系统灵活性。

AT89C51单片机内部总线是单总线结构,即数据总线和地址总线是公用的。2.2AT89C51单片机引脚及其功能AT89C51有40条引脚,与其他51系列单片机引脚是兼容的。这40条引脚可分为I/O端口线、电源线、控制线、外接晶体线四部分。其封装形式有两种:双列直插封装(DIP)形式和方形封装形式,如图2-2所示。图2-2AT89C51封装和引脚分配图(a)双列直插式封装;(b)方形封装2.2.1I/O端口功能

1.P0口

P0口有八条端口线,命名为P0.0~P0.7,其中P0.0为低位,P0.7为高位。每条线的结构组成如图2-3所示。它由一个输出锁存器,两个三态缓冲器,输出驱动电路和输出控制电路组成。P0口是一个三态双向I/O口,它有两种不同的功能,用于不同的工作环境。图2-3P0口位结构图2.P1口

P1口有八条端口线,命名为P1.0~P1.7,每条线的结构组成如图2-4所示。P1口是一个准双向口,只作普通的I/O口使用,其功能与P0口的第一功能相同。作输出口使用时,由于其内部有上拉电阻,所以不需外接上拉电阻;作输入口使用时,必须先向锁存器写入“1”,使场效应管T截止,然后才能读取数据。图2-4P1口位结构图3.P2口

P2口有八条端口线,命名为P2.0~P2.7,每条线的结构如图2-5所示。P2口也是一个准双向口,它有两种使用功能:一种是当系统不扩展外部存储器时,作普通I/O口使用,其功能和原理与P0口第一功能相同,只是作为输出口时不需外接上拉电阻;另一种是当系统外扩存储器时,P2口作系统扩展的地址总线口使用,输出高8位的地址A7~A15,与P0口第二功能输出的低8位地址相配合,共同访问外部程序或数据存储器(64KB),但它只确定地址并不能像P0口那样还可以传送存储器的读写数据。图2-5P2口位结构图4.P3口

P3口有八条端口线,命名为P3.0~P3.7,每条线的结构如图2-6所示。P3口是一个多用途的准双向口。第一功能是作普通I/O口使用,其功能和原理与P1口相同。第二功能是作控制和特殊功能口使用,这时八条端口线所定义的功能各不相同,如表2-3所示。

图2-6P3口位结构图表2-3P3口各位的第二功能5.I/O口的读写

P0~P3口都可作为普通I/O口来使用。当作为输入口使用时,必须先向该口的锁存器中写入“1”,然后再从读引脚缓冲器中读入引脚状态,这样的读入结果才正确(前面已分析过)。2.2.2电源线

AT89C51单片机的电源线有以下两种:

(1)VCC:+5V电源线。

(2)VSS:接地线。2.2.3外接晶体引脚

AT89C51单片机的外接晶体引脚有以下两种:

(1)XTAL1:片内振荡器反相放大器的输入端和内部时钟工作的输入端。采用内部振荡器时,它接外部石英晶体和微调电容的一个引脚。

(2)XTAL2:片内振荡器反相放大器的输出端,接外部石英晶体和微调电容的另一端。采用外部振荡器时,该引脚悬空。2.2.4控制线

AT89C51单片机的控制线有以下几种:

(1)RST:复位输入端,高电平有效。

(2)ALE/:地址锁存允许/编程线。

(3):外部程序存储器的读选通线。

(4)/VPP:片外ROM允许访问端/编程电源端。2.3AT89C51存储器AT89C51单片机存储器结构采用哈佛型结构,即将程序存储器(ROM)和数据存储器(RAM)分开,它们有各自独立的存储空间、寻址机构和寻址方式。其典型结构如图2-7所示。图2-7AT89C51存储器结构图(a)程序存储器地址分配;(b)数据存储器地址分配2.3.1程序存储器

AT89C51程序存储器有片内和片外之分。片内有4KB字节的Flash程序存储器,地址范围为0000H~0FFFH。当不够使用时,可以扩展片外程序存储器,因程序计数器PC和程序地址指针DPTR都是16位的,所以片外程序存储器扩展的最大空间是64KB,地址范围为0000H~FFFFH。2.3.2数据存储器

AT89C51数据存储器也有片内和片外之分。片内有256个字节RAM,地址范围为00H~FFH。片外数据存储器可扩展64KB存储空间,地址范围为0000H~FFFFH,但两者的地址空间是分开的,各自独立的,结构分配如图2-7(b)所示。1.片内数据存储器

AT89C51单片机片内数据存储器可分为两部分:00H~7FH单元空间的128字节为RAM区;80H~FFH单元空间的128字节为专用寄存器(SFR)区。两部分的地址空间是连续的。

(1)片内RAM区:共128字节,它又可划分为通用寄存器区、位寻址区、普通RAM区,如图2-8所示。

普通RAM区7FH

30H2FH7F7E7D7C7B7A7978

2EH7776757473727170

2DH6F6E6D6C6B6A6968

2CH6766656463626160

2BH5F5E5D5C5B5A5958

2AH5756555453525150

29H4F4E4D4C4B4A4948

28H4746454443424140位寻址区27H3F3E3D3C3B3A3938

26H373635343332313025H2F2E2D2C2B2A2928

24H2726252423222120

23H1F1E1D1C1B1A1918

22H1716151413121110

21H0F0E0D0C0B0A0908

20H0706050403020100

1FH

3组

18H

17H

2组

10H通用寄存器区0FH

1组

08H

07H

0组

00H图2-8AT89C51内部RAM空间分配①通用寄存器区:00H~1FH这32个单元为通用寄存器区,分为四组,每组占八个RAM单元,地址由小到大分别用代号R0~R7表示。通过设置程序状态字PSW中的RS1、RS0状态来决定哪一组寄存器工作,如表2-2所示。②位寻址区:20H~2FH这16个单元为位寻址区。它有双重寻址功能,既可以进行位寻址操作,也可以同普通RAM单元一样按字节寻址操作。③普通RAM区:30H~7FH这80个单元为普通RAM区。用于存放用户数据,只能按字节存取。④堆栈区:堆栈是片内RAM存储器中的特殊群体。图2-9堆栈结构图(2)专用寄存器区:片内80H~FFH这一区间,AT89C51集合了一些特殊用途的寄存器,一般称之为特殊功能寄存器SFR。每个SFR占有一个RAM单元。它们离散地分布在80H~FFH地址范围内,如表2-4所示。表2-4AT89C51特殊功能寄存器SFR一览表

没有被SFR占据的地址可能在片内并不存在。对这些地址读出时,通常会得到随机的数据,而写入时将会有不确定的效应,因此软件设计时不要使用这些单元。特殊功能寄存器通常用寄存器寻址,但也可以用直接寻址方式进行字节访问。其中11个寄存器还可进行位寻址(表2-4中带*号的寄存器)操作,其位地址的分配如表2-5所示。表2-5SFR中的位地址分配寄存器符号位地址字节地址D7D6D5D4D3D2D1D0BF7F6F5F4F3F2F1F0F0HACCE7E6E5E4E3E2E1E0E0HPSWD7D6D5D4D3D2D1D0D0HIP

BCBBBAB9B8B8HP3B7B6B5B4B3B2B1B0B0HIEAF

ACABAAA9A8A8HP2A7A6A5A4A3A2A1A0A0HSCON9F9E9D9C9B9A999898HP1979695949392919090HTCON8F8E8D8C8B8A898888HP0878685848382818080H2.片外数据存储器

AT89C51单片机可扩展片外64KB空间的数据存储器,地址范围为0000H~FFFFH,它与程序存储器的地址空间是重合的,但两者的寻址指令和控制线不同。2.4AT89C51单片机工作方式2.4.1复位方式单片机在开机时或在工作中因干扰而使程序失控或工作中程序处于某种死循环状态等情况下都需要复位。复位的作用是使中央处理器CPU以及其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。AT89C51单片机的复位靠外部电路实现,信号由RESET(RST)引脚输入,高电平有效,在振荡器工作时,只要保持RST引脚高电平两个机器周期,单片机即复位。复位后,PC程序计数器的内容为0000H,其他特殊功能寄存器的复位状态如表2-4所示。片内RAM中内容不变。复位电路一般有上电复位、手动开关复位和自动复位电路三种,如图2-10所示。图2-10单片机复位电路图(a)上电复位电路;(b)手动复位电路;(c)自动复位电路2.4.2程序执行方式程序执行方式是单片机的基本工作方式,也就是执行用户编写好并存放在ROM中的程序。2.4.3省电方式

AT89系列单片机提供了两种通过软件编程来实现的省电运行方式,即空闲方式和掉电方式。省电方式可以使单片机在供电困难的环境中功耗最小,仅在需要正常工作时才正常运行。单片机正常工作时消耗10~20mA电流,空闲方式工作时消耗1.75mA电流,掉电方式工作时消耗5~50μA电流,可见在省电方式下单片机耗能很小。在空闲和掉电方式下,单片机内部硬件控制电路如图2-11所示。图2-11空闲和掉电方式内部电路图2.4.4EPROM编程和校验方式

1.签名字节的读出签名字节是生产厂家在生产89系列单片机时写入到存储器中的信息。信息内容包括生产厂家、编程电压和单片机型号。2.Flash存储器编程方式这里的编程是指利用特殊手段将用户编写好的程序代码写入AT89C51片内4KB字节Flash存储器的过程(89C52方法相同)。编程前必须先确定编程电压。AT89系列单片机只有两种编程电压,一种是低压编程方式,用5V电压;另一种是高压编程方式,用12V电压。这一编程电压可从器件封装表面读取或从签名字节中读取。

(1)在地址线上输入要编程单元的地址。(2)在数据线上输入要写入的数据字节。(3)在/Vpp端加入编程电压(5V或12V)。(4)激活相应的控制信号。(5)在ALE/端加入一个编程负脉冲,数据线上的数据字节就写入地址线上对应的Flash存储器单元地址中了。图2-12Flash编程硬件逻辑电路图3.程序的校验方式程序校验方式是指对编程中写入的程序代码进行读出,并与程序写入前代码进行比较验证的过程。

4.EPROM加密方式用户编写好的程序通过编程和校验无误,写入到EPROM中后,可进行加密保护以防止非法读出受保护的应用软件。5.程序擦除工作方式

AT89C51单片机的片内Flash存储器可多次编程,但在每次对程序存储器进行编程前必须先执行擦除操作,使存储器单元内容变为全FFH状态(包括签名字节)。2.5AT89C51时钟电路与时序2.5.1振荡器与时钟电路单片机内各部件之间有条不紊的协调工作,其控制信号是在一种基本节拍的指挥下按一定时间顺序发出的,这些控制信号在时间上的相互关系就是CPU时序。而产生这种基本节拍的电路就是振荡器和时钟电路。

AT89C51单片机内部有一个用于构成振荡器的单级反相放大器,如图2-13所示。图2-13AT89C51内部振荡器电路图

引脚XTAL1为反相器输入端,XTAL2为反相器输出端。当在放大器两个引脚上外接一个晶体(或陶瓷振荡器)和电容组成的并联谐振电路作为反馈元件时,便构成一个自激振荡器,如图2-14所示。图2-14内部振荡器等效电路图

单片机也可采用外部振荡器向内部时钟电路输入一固定频率的时钟源信号。此时,外部信号接至XTAL1端,输入给内部时钟电路,而XTAL2端浮空即可,如图2-15所示。

图2-15外部时钟电路图2.5.2时序

1.振荡周期振荡周期指由单片机片内或片外振荡器所产生的,为单片机提供时钟源信号的周期(其值为1/fosc)。

2.时钟周期时钟周期又称为状态周期S,由内部时钟电路产生,是振荡周期的二倍。每个时钟周期分为P1和P2两个节拍,前半周期P1节拍信号有效,后半周期P2节拍信号有效,每个节拍完成不同的逻辑操作。3.机器周期一个机器周期由六个状态周期(12个振荡周期)组成,六个状态周期用S1~S6表示,每一状态周期的两个节拍用P1、P2表示,则一个机器周期的12个节拍就可用S1P1、S1P2、S2P1、…、S6P1、S6P2来表示。4.指令周期执行一条指令所占用的全部时间。一个指令周期通常由1~4个机器周期组成。若外接晶振频率为fosc=12MHZ,则四个基本周期的具体数值为:

(1)振荡周期=1/12μs。

(2)时钟周期=1/6μs。

(3)机器周期=1μs。

(4)指令周期=1~4μs。图2-16AT89C51单片机典型指令时序图习题与思考题2.1AT89C51单片机内部结构由哪几部分组成?2.2程序状态字PSW各位的定义是什么?2.3程序计数器PC的作用是什么?怎样工作?2.4P0~P3口各有什么功能?P0口用作普通I/O口使用时应注意什么?

2.5AT89C51单片机只用内部Flash存储器时,引脚如何处理?

2.6AT89C51单片机存储器结构是怎样的(画图说明)?片内数据存储器共有多少字节?划分成几个区域工作?

2.7在AT89C51单片机ROM空间中,0003H、000BH、0013H、001BH、0023H有什么特殊用途?

2.8什么是堆栈?堆栈指针SP的初值是多少?堆栈工作必须遵守的原则是什么?2.9AT89C51单片机的外RAM和外ROM使用相同的地址空间和同一条总线,那么是否会在总线上出现读错和写错现象?为什么?

2.10什么是对I/O口的“读—修改—写”操作?

2.11单片机的复位方式有几种?复位后各寄存器、片内RAM的状态如何?

2.12如何改变当前工作寄存器组?

2.13AT89C51单片机的省电运行方式有几种?如何进入和退出?2.14AT89C51中XTAL1和XTAL2的功能是什么?采用外部时钟源时如何处理这两个引脚?

2.15什么是程序加密?

2.16什么是振荡周期、时钟周期、机器周期、指令周期?它们之间关系如何?

2.17什么是指令的时序?简述单字节双周期指令的执行过程,并画出时序图。第3章AT89C51指令系统 3.1指令系统简介3.2寻址方式3.3AT89C51指令系统3.4实验习题与思考题3.1指令系统简介AT89C51单片机共有111条指令。其中,单字节指令49条,双字节指令45条,三字节指令17条。在111条指令中,有64条是单机器周期指令,45条双机器周期指令,两条四机器周期指令。计算机执行指令时间的长短并不取决于指令所占存储器的字节数,而是取决于所占用的机器周期数。3.2寻址方式3.2.1符号注释在以后章节的学习过程中,经常用到一些符号,下面逐一介绍。

(1)Rn(n=0~7):表示八个通用寄存器R0~R7。

(2)Ri(i=0,1):表示两个寄存器R0、R1,它们常在间接寻址中作为8位地址指针。

(3)#DATA:表示8位立即数,即包含在指令中的8位常数,如#30或#00110001B。(4)#DATA16:表示16位立即数,即包含在指令中的16位常数,如#2010H。

(5)direct:表示片内RAM(含特殊功能寄存器)的直接地址。

(6)addr11:表示11位目的地址。

(7)addr16:表示16位目的地址。

(8)rel:表示带符号的8位地址偏移量。(9)bit:表示位地址。(10)@:作为寄存器的前缀,表示间接寻址。(11)(×):表示×中内容。(12)((×)):表示×所指地址单元的内容。(13)→:表示将箭头左边内容送入箭头右边。3.2.2寻址方式

1.立即数寻址立即数寻址是指操作数作为指令的一部分存放在程序存储器中,在取指令运行的同时,直接获得该操作数。这类操作数可以是一字节或两字节操作数,应用时应在操作数前面加“#”号,以区别直接地址。2.直接寻址直接寻址是指在指令中直接给出操作数所在存储单元的地址。执行指令时,从该地址中直接获取操作数。在AT89C51中,可直接寻址的单元为内部RAM低128个字节和所有的特殊功能寄存器。对于特殊功能寄存器,既可以使用名字,也可以使用地址。但一般程序设计中都建议使用名字,以便于程序的阅读和理解。图3-1直接寻址示意图3.寄存器寻址寄存器寻址是指把寄存器的内容作为操作数。寄存器可以是通用寄存器R0~R7,也可以是ACC、B、DPTR等寄存器。4.寄存器间接寻址在寄存器间接寻址中,指令中的一个操作数是加了前缀“@”的寄存器,“@”表示该寄存器中的内容是操作数的地址。执行指令时,计算机根据这个地址取出操作数完成相应的操作,这种寻址方式称作寄存器间接寻址。在AT89C51中,可用于间接寻址的寄存器是R0、R1、DPTR。其中,R0和R1用于8位地址寻址,DPTR用于16位地址寻址。图3-2间接寻址示意图5.变址寻址(基址寄存器+变址寄存器)

变址寻址是指以寄存器的内容作为基地址,然后在这个基地址的基础上加上地址偏移量形成操作数的地址,并在这个地址中取出操作数。在变址寻址中只能用DPTR和PC作为基址寄存器,累加器A作为偏移量寄存器。变址寻址用于读取程序存储器的数据,常用于查表操作。

例如执行“MOVCA,@A+DPTR”指令时,用累加器A的内容加上DPTR的内容作为一个地址,然后从这个地址中取出操作数送入累加器中。设累加器A的内容为20H,DPTR的值为2000H,程序存储器2020H单元内容为47H,则执行该指令后累加器A的值为47H。其示意图如图3-3所示。图3-3变址寻址示意图6.相对寻址相对寻址是将程序计数器PC中的当前值与指令第二字节给出的偏移量相加,其结果作为跳转指令的转移地址。相对寻址主要用于转移类指令,寻址范围是程序存储器。

7.位寻址位寻址是指指令的操作数为8位二进制数的某一位,指令中给出的是操作数的位地址。可用于位寻址的区域是片内RAM20H~2FH单元和部分特殊功能寄存器(见表2-4)。3.3AT89C51指令系统3.3.1数据传送类指令计算机在进行各种操作和运算时,CPU需要操作数,这些操作数有的在累加器中,有的在寄存器中,有的在存储器中,有的由单片机的外部设备提供。AT89C51提供了丰富的指令,使这些操作数能够进行传送,为计算机的各种运算提供数据。用到的助记符有MOV、MOVC、MOVX、XCH、XCHD、SWAP、PUSH、POP共八种,数据传送类指令如表3-1(略)所示。1.片内RAM传送指令片内RAM传送指令功能是将源操作数的内容传送到目的操作数,而源操作数内容不改变(源操作数、目的操作数概念参阅4.2.1节)。表中机器码格式中的rrr=000~111,分别表示某个工作寄存器组的R0~R7寄存器中的一个,程序状态寄存器PSW的RS1、RS0决定了当前寄存器。表中指令操作除影响PSW中P的标志位外,其他任何标志位不受影响。2.外部RAM传送指令外部RAM传送指令功能也是将源操作数的内容传送到目的操作数,而源操作数内容不改变。只是在访问外部RAM时,目的操作数和源操作数总有一个在累加器A中,另一个在片外存储器中。DPTR用于片外16位地址寻址,Ri用于16位地址的低8位地址寻址。执行MOVX指令能够产生读和写信号,执行其他任何指令都不会产生读写信号。[例3.10]将片外RAM2000H单元内容送入片内RAM20H单元中。MOVDPTR,#2000HMOVXA,@DPTR ;片外2000H单元内容→累加器AMOV20H,A ;(A)→片内20H单元[例3.11]将片外RAM1000H单元内容送入片外RAM3000H单元。

MOVDPTR,#1000H ;地址指针指向1000H MOVXA,@DPTR ;将1000H单元内容送入A MOVDPTR,#3000H ;地址指针指向3000H MOVX@DPTR,A;将累加器A的内容送入3000H单元[例3.12]用间接寻址将片内RAM10H单元内容送入片外RAM20H单元。MOVR0,#10HMOVA,@R0 ;取片内单元数据MOVR0,#20HMOVX@R0,A ;送入片外地址单元3.查表指令

MOVC查表指令是指程序存储器内的查表指令,用来获取程序存储器数据表格中的数据,并将获取的数据送入累加器A中。“MOVCA,@A+DPTR”指令执行时,是将累加器A的值与DPTR的值相加得到一个16位的地址,并将该地址指向的程序存储器单元的内容送入累加器A中。[例3.13]下面的程序从程序存储器1000H单元开始存放,写出执行下列程序后,累加器A、寄存器R0和程序指针PC的值。1000H:MOVA,#01H

;01→A,数据项数送入累加器1002H:ADDA,#0BH ;项数+偏移量0BH→A,A为0CH1004H:MOVCA,@A+PC;PC为1005H,与0CH相加后,程序到1011H单元取;数04H送入A中1005H:MOVR0,A ;(A)→R0,PC为1006H1010H:02H1011H:04H1012H:06H1014H:08H执行结果为(A)=04H,(R0)=04H,(PC)=1006H。4.堆栈指令堆栈是在内部RAM中开辟的一端相对固定,一端活动的存储空间,活动端称为栈顶,固定端称为栈底,所有数据的存入和取出都从栈顶进行。堆栈主要用于进行数据保护。在AT89C51中,堆栈是自底向上生成的,寄存器SP始终指向栈顶地址。复位时,SP的初值为07H,但这个初值可以通过“MOVSP,#DATA”语句来修改,以确定堆栈的使用空间。PUSH指令用于把直接寻址的一个字节数压入栈顶。执行这条指令时,先将栈顶指针SP的值加1,然后把直接寻址单元里的数存入到SP指向的单元中。

POP指令用于把栈顶的内容送入直接寻址的一个单元中。[例3.14]执行下列指令,注意累加器A的变化。

MOVSP,#63H ;设置堆栈初值

MOVA,#17H ;17H送入A PUSHACC ;将17H压入堆栈保存

RLA ;将累加器A的内容左循环一次

MOVR1,A ;(A)→R1 POPACC ;将17H弹出并送入累加器中5.交换指令

(1)XCH指令是将源操作数的值与目的操作数累加器A的值全字节交换;

(2)XCHD指令是将源操作数与目的操作数累加器A低4位内容交换,而高4位不变;

(3)SWAP指令是将累加器A的内容高4位和低4位互换。[例3.15]设(A)=47H,(R0)=58H,(58H)=36H,分别执行下列指令,写出累加器A和各寄存器的值。

执行结果①

XCHA,R0 ;(A)=58H,(R0)=47HH②XCHA,@R0 ;(A)=36H,(58H)=47H③XCHDA,@R0 ;(A)=46H,(58H)=37H④SWAPA ;(A)=74H3.3.2算术运算类指令在AT89C51指令系统中,提供了加、减、乘、除及加法BCD码调整指令,虽然这类指令(特别是加减指令)操作比较灵活,但它们全是单字节操作。若要进行多字节算术运算,还需要单独编程。算术运算类指令见表3-2(略)所示。1.不带进位加法指令

ADD是不带进位的加法运算指令,其功能是将累加器A的内容与源操作数的内容相加,结果送入累加器A中,源操作数指定单元的内容不变。该指令执行结果影响标志位CY、OV、AC、P。

两个数相加时,可通过对CY的检测判断运算结果是否有进位,如果最高位有进位时,CY为1,否则为0。若是两个有符号数相加,因为符号位要参加运算,就有可能产生溢出现象,即超出单字节数所能表示的有符号数的最大范围(-128~+127)。从例3-16可知两个负数相加,结果为正数22H,显然不对,这就是溢出。2.带进位的加法指令

ADDC指令功能是同时把源操作数所指出的内容、进位标志CY和累加器A的内容相加,结果存入累加器A中。ADDC指令一般用于多字节加法运算,在多字节加法运算中,低字节加法结果可能产生进位,用ADDC指令可使高字节相加的同时加上低字节的进位。该指令执行结果影响标志位CY、OV、AC、P。3.加1指令该指令用于将操作数的内容加1。该指令除影响奇偶标志位P外,不会对其他任何标志位产生影响。

4.带借位减法指令

SUBB指令功能是将累加器A中内容减去源操作数的内容及进位CY的值,结果送入累加器A中。该指令影响标志位CY、OV、AC、P。

5.减1指令该指令用于将操作数的内容减1。与INC指令相同,仅影响奇偶标志位P。6.乘法指令乘法指令功能是将累加器A的内容和寄存器B的内容相乘,结果是16位二进制数。其中高8位保存在寄存器B中,低8位保存在累加器A中。若乘积大于0FFH,溢出标志OV=1,否则为0。例如,设(A)=C5H,(B)=08H,则执行指令“MULAB”后,结果为(B)=03H,(A)=28H,表示积(BA)=0328H,OV=1。7.除法指令除法指令功能是用累加器A的内容(被除数)除以寄存器B的内容(除数)。指令执行后,商保存在累加器A中,余数保存在寄存器B中。相除之后,标志位CY一定为0,OV只是在除数B=0时为1,其他情况下都为0。8.十进制调整指令“DAA”是一条对累加器A中的BCD码进行调整的指令。应用时必须跟在ADD或ADDC指令后面。因为当两个压缩的BCD码按二进制作加法运算时,其结果不一定是压缩的BCD码,所以必须用DA指令进行调整(参阅第1章)。3.3.3逻辑操作与移位指令这类指令主要包括与、或、异或、求反、清零、移位等操作指令。逻辑操作与移位指令如表3-3(略)所示。1.逻辑与指令“与”指令是将源操作数与目的操作数按位相与,其结果送入目的操作数中。“与”指令可以屏蔽操作数的某些位,即使操作数某些位清零,其他位保持不变。

2.逻辑或指令“或”指令是将源操作数与目的操作数按位相或,其结果送入目的操作数中。“或”指令可以使操作数的数据位置1,即使操作数某些位置1,其他位保持不变。3.逻辑异或指令“异或”指令是将源操作数与目的操作数按位相异或,即不同为1,相同为0,其结果送入目的操作数。“异或”指令可以使操作数的数据位取反,即使操作数某些位取反,其他位保持不变。

4.累加器清零与取反指令

CLRA指令功能是将累加器A的内容清零。CPLA指令功能是将累加器A的内容按位取反,即累加器A中各位1变0,0变1。5.移位指令

AT89C51移位指令有四种,都是对累加器A进行操作。这组移位指令只能对操作数移一位,若要移多位,则要通过编写程序完成。

(1)RLA的指令功能是将累加器A的内容左循环移位。如图3-4所示,累加器A的最高位移入最低位,同时其他各位依次左移。

图3-4左循环移位指令示意图图3-5带进位左循环移位指令示意图(2)RLCA的指令功能是将累加器A的内容和进位标志一起左循环移位。如图3-5所示,累加器A的最高位移入进位位CY,同时其他各位依次左移,CY位移入累加器A的最低位。

(3)RRA的指令功能是将累加器A的内容右循环移位。如图3-6所示,累加器A的最低位移入最高位,同时其他各位依次右移。图3-6右循环移位指令示意图

图3-7带进位右循环移位指令示意图(4)RRCA的指令功能是将累加器A的内容和进位标志一起右循环移位。如图3-7所示,累加器A的最低位移入进位位CY,同时其他各位依次右移,CY位移入累加器A的最高位。3.3.4控制转移类指令控制转移类指令主要以改变程序计数器PC内容为目标,用来控制程序执行的流向。它主要分为以下几类,如表3-4所示。表3-4控制转移类指令1.无条件转移指令无条件转移指令是指当程序执行到这条指令时,程序将无条件地转移到指令指向的地址单元取指运行。

(1)AJMP为短转移指令。

(2)LJMP为长转移指令。

(3)SJMP为相对转移指令。

(4)“JMP@A+DPTR”为间接转移指令,用它可实现分支转移。2.有条件转移指令有条件转移指令是指根据指令中给出的条件进行判断,若条件成立,则程序转向指定的目的地址执行,否则顺序执行程序。有条件转移指令的目标地址都在相对于该指令的下一条指令为-128~+127的区域内。1)累加器判零指令

JZ指令的功能是判断累加器A的值。若累加器A的值为0,则程序转移到目标地址;否则,顺序执行程序。

JNZ指令的功能是判断累加器A的值。若累加器A的值不为0,则程序转

温馨提示

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

最新文档

评论

0/150

提交评论