《单片机应用与实践教程》课件第1章_第1页
《单片机应用与实践教程》课件第1章_第2页
《单片机应用与实践教程》课件第1章_第3页
《单片机应用与实践教程》课件第1章_第4页
《单片机应用与实践教程》课件第1章_第5页
已阅读5页,还剩537页未读, 继续免费阅读

下载本文档

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

文档简介

项目1键盘/显示系统的设计

任务一单片机最小系统任务二LED显示器的设计任务三按钮开关的使用任务四数码管显示器的设计任务五点阵显示器的设计任务六专用键盘显示接口习题与思考题

项目1键盘/显示系统的设计

任务一单片机最小系统

任务要求

【任务内容】

组装一个AT89C51单片机的最小系统,外接8个发光二极管,要求最小系统一上电,8个发光二极管即分成两组,一组点亮,一组熄灭。

【知识要求】

了解AT89C51单片机的结构与引脚;掌握单片机最小系统电路的设计。

相关知识

知识1单片机概述

1.基本概念

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

(2)微型计算机MC(MicroComputer)。以微处理器为核心,再配上存储器、I/O(Input/Output)接口和中断系统等构成的整体,称为微型计算机。

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

(4)单片机(SingleChipMicrocomputer)。单片机是将微处理器、存储器、I/O接口和中断系统集成在同一块芯片上,具有完整功能的微型计算机。

2.单片机的发展

(1)第一代单片机(1974~1976年):这是单片机发展的起步阶段。这个时期生产的单片机的特点是制造工艺落后,集成度较低,而且采用双片形式。典型的代表产品有仙童公司的F8系列机和Intel公司的3870系列机。

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

限、应用范围不广。典型的代表产品是Intel公司的MCS-48系列机。

(3)第三代单片机(1979~1982年):这是8位单片机的成熟阶段。这一代单片机和前两代相比,不仅存储容量大、寻址范围广,而且中断源、并行I/O口、定时器/计数器的个数都有了不同程度的增加,同时它还新集成了全双工串行通信接口电路。在指令系统方面普遍增设了乘除指令和比较指令。这一时期生产的单片机品种齐全,可以满足各方面的需要。代表产品有Intel公司的MCS-51系列机、Motorola公司的MC6801系列机等。

(4)第四代单片机(1983年以后):这一阶段8位单片机向更高性能发展,同时出现了工艺先进、集成度高、内部功能更强和运算速度更快的16位单片机,它允许用户采用面向工业控制的专用语言,如C语言等。代表产品有Intel公司的MCS-96系列机和NC公司的HPC16040系列机等。

3.ATMEL89系列单片机简介

ATMEL89系列(以下简称AT89)单片机是美国ATMEL公司生产的8位高性能单片机,其主要技术优势是内部含有可编程Flash存储器,用户可以很方便地进行程序的擦除和写入操作。

AT89系列单片机与工业标准MCS-51系列单片机的指令系统和引脚是兼容的,因而可替代MCS-51系列单片机使用。AT89系列单片机可分为标准型、低档型和高档型三种类型。表1-1列举了AT89系列单片机的概况。知识2计算机中的数

1.常用进制

二进制计数的特点如下:

(1)状态简单,凡是具有两个状态的元件都可用来表示二进制数的0和1,容易实现。

(2)运算规则简单,大大地简化了计算机中的运算线路。

(3)可用布尔代数这一数学工具对计算机电路进行设计和分析,便于对计算机结构的优化。十进制数、十六进制数、二进制数之间的对应关系如表1-2所示。

2.常用进制之间的转换

1)二进制数与十进制数之间的转换

(1)二进制数转换成十进制数。要将二进制数转换成十进制数,需将二进制数按权展开相加即可。例如:

(2)方法一:可用“除2取余”法,即将十进制整数反复除以2,直至商等于0为止。然后将所得的一系列余数按逆序排列即为所求的二进制整数。

[例1.1]

(38)10=(100110)2方法二:可用“减幂”法,即将十进制整数不断减去2的最高次幂,直至差值等于0为止。

[例1.2]

(38)10=(100110)2十进制小数的转换可用“乘2取整”法,即将十进制小数反复乘以2,直至所剩小数部分等于0为止,然后将每次所得整数按顺序排列即为所求的二进制小数。如果所求的结果永不为0,可根据精度要求用“0舍1入”的方法进行取舍。

[例1.3](0.625)10=(0.101)2

2)二进制数与十六进制数之间的转换

(1)二进制数转换为十六进制数。由于数16与数2之间的关系为24=16,因此4位二进制数对应一位十六进制数。根据这个关系,对于二进制数的整数部分的转换,只要从小数点开始依次向左每4位为一节,最后不足4位的前面补0;小数部分由小数点向右,每4位为一节,最后不足4位的后面补0。然后把每4位二进制数用相应的一位十六进制数代替,即转换成十六进制数。

[例1.4]

(10001111011011.111010)2=(23DB.E8)16

(2)十六进制数转换为二进制数。不论是十六进制的整数或小数,只要把每一位十六进制的数用相应的4位二进制数代替,就可以转换成二进制数。

[例1.5](5BD.6A)16=(10110111101.0110101)2

3.二进制运算规则

1)算术运算规则

加法规则:

(1) 0+0=0

(2) 1+0=0+1=1

(3) 1+1 =10(向高位进位1)

减法规则:

(1) 0-0=0

(2) 1-1=0

(3) 1-0=1

(4) 0-1=1(向高位有借位)乘法规则:

(1) 0×0=0

(2) 0×1=0

(3) 1×0=0

(4) 1×1=1

二进制的乘法运算是十分简单的,只有当两个1相乘时积才为1,否则积为0。

2)逻辑运算法则

“或”运算(逻辑加),运算符为“+”或“∨”:

(1) 0∨0 = 0

(2) 1∨0 = 1

(3) 0∨1 = 1

(4) 1∨1 = 1

按位加是不考虑进位的加法运算。

“与”运算(逻辑乘),运算符为“· ”或“∧”:

4.计算机中数的表示

1)位(bit)和字节(Byte)

“位”是计算机能够表示的最小的数据单位。位用b表示。字节由8个二进制位组成,通常一个存储单元中存放着1个字节的数据。字节用B表示。

2)字(Word)和字长

“字”是微处理器内部进行数据处理的基本单位,通常它也是微处理器与存储器之间和输入/输出电路之间传送数据的基本单位。字用W表示。“字长”是指一个字所包含的二进制数的位数,它是微处理器的重要指标之一,通常用数据总线的位数来决定微处理器的字长。

8位微处理器的字长是8位,每一个字由一个字节组成,如图1-1(a)所示,在字节中,最左边的位(D7)为最高位(MSB),最右边的位(D0)为最低位(LSB)。16位微处理器的字长是16位,每一个字由两个字节组成,如图1-1(b)所示,左边的字节是高位字节,最左边的位为最高位;右边的字节是低位字节,最右边的位为最低位。图1-1字和字节

3)机器数与真值

在计算机中,不带正、负号的数称为无符号数。它将字长的所有位均用于表示数值位。一个n位字长的数据可用来表示2n个正整数。例如,一个8位数据可表示的数值范围为00000000B~11111111B,即0~255,共256(28)个数。

在计算机中,数的正、负号与数一起存放在寄存器或内存单元中,因此数的符号在机器中已“数码化”了,通常规定在数的前面增设一位符号位,并规定正号用“0”表示,负号用“1”表示。若以8位字长的存数单元为例,设有数:N1=+1010101,N2=-1010101。N1和N2在计算机中的表示形式为:N1=01010101,十进制数为+85;N2=11010101,十进制数为-85,而不是213。

在计算机中,把存放在寄存器、存储器或数据端口中的数称为机器数。机器数所对应的值称为真值。机器数的真值到底是多少,取决于机器数所对应的是无符号数还是有符号数以及所对应的是什么码制表示的数。知识3AT89C51单片机的结构

AT89C51单片机的内部结构框图如图1-2所示。图1-2AT89C51内部结构框图

AT89C51内部包含了作为微型计算机所必需的功能部件,各功能部件通过片内单一总线连成一个整体,集成在一块芯片上。其中CPU系统与CPU外围单元组成单片机最小系统,最小系统与各功能单元构成单片机的基本结构,在基本结构的基础上还可进行外部功能的扩展,形成各种不同的单片机应用系统。

1.中央处理器

1)运算器

运算器用来完成算术运算、逻辑运算和位运算功能,它是AT89C51内部处理各种信息的主要部件。运算器的组成框图如图1-3所示,主要由算术逻辑单元(ALU)、累加器(ACC)、暂存寄存器(TEMP1、TEMP2)、寄存器B和状态寄存器(PSW)组成。图1-3运算器组成框图

(1)算术逻辑单元(ALU)。AT89C51中的ALU是运算器的核心部件,由加法器和一个布尔处理器组成。它不仅可以对8位二进制变量进行与、或、非、异或等逻辑运算以及加、减、乘、除等四则运算,还具有运算结果判断、数据传送、程序转移等功能。

从图1-3中可以看出,加法器有两个输入:暂存器TEMP1和TEMP2。加法器有两个输出:一个是累加器ACC,经过运算,结果又通过内部总线送回到累加器中;另一个是状态寄存器PSW。布尔处理器是运算器的重要组成部分,由独立的逻辑电路来处理位操作。它有自己的累加器C、自己的位寻址RAM和I/O空间,还有相应的指令系统,给用户提供丰富的位操作功能。

布尔处理器以进位位C作为累加器,可以对可寻址位执行置位、复位、取反、转移以及位传送等位操作。进位标志位与其他可寻址位之间完成逻辑与、或操作后,结果送回

C中。

(2)暂存寄存器(TEMP1、TEMP2)。TEMP1和TEMP2是ALU的两个输入端口,用来存放参与算术运算和逻辑运算的操作数,它对用户不开放。

(3)累加器(ACC)。ACC是CPU使用最频繁的一个寄存器,在指令系统中用助记符A表示。

(4)状态寄存器(PSW)。PSW是一个8位标志寄存器,用来存放ALU操作结果的有关状态。PSW中CY、AC、OV、P各位状态通常是在操作过程中自动形成的,而F0、RS0、RS1则可以由用户根据需要由位操作指令加以改变。

PSW各位定义如表1-3所示。进位标志位CY:表示累加器A在加减运算过程中其最高位D7有无进位或借位。若有,则CY=1;若没有,则CY=0。CPU在进行移位操作时也会影响这个标志位。在位操作中,CY作为累加器C使用。辅助进位位AC:表示累加器A在加减运算时低4位(D3)有无向高4位(D4)进位或借位。若有,则AC=1;若没有,则AC=0。AC通常在二/十进制调整时使用。

溢出标志位OV:当执行算术指令时,由硬件自动置位或清零,表示累加器A的溢出状态。进行补码运算时,当运算结果超出累加器A能表示的数值范围时,由硬件自动置1,否则等于0。奇偶标志位P:每条指令执行完毕后,硬件根据A中的内容自动置位或复位,用于指示运算结果中1的个数的奇偶性。若累加器A中1的个数为奇数,则P=1;若1的个数为偶数,则P=0。该标志位常用于串行通信的数据校验。

寄存器选择位RS1、RS0:AT89C51共有4组,每组8个工作寄存器R0~R7,编程时用于存放数据或地址。每组工作寄存器在内部RAM中的物理地址不同。

RS1和RS0的4种状态组合就是用来确定4组工作寄存器的实际物理地址的。单片机上电复位后,RS1、RS0的状态为00。用户可通过位操作指令或数据传送指令改变RS1、RS0的状态,选择当前工作的工作寄存器组。

用户标志位F0:用户定义的一个状态标志位,根据需要可以用软件来使它置位或清除,供测试使用。

PSW1:未定义。用户可以通过位地址D1H或位标志PSW1使用该位。

[例1.6]试分析执行加法指令,完成0FFH与01H相加后PSW各位的状态。

MOVA,#0FFH

ADDA,#01H

执行上述加法指令时的人工算式是:

11111111B

+ 00000001B

 

100000000B

(5)寄存器B。寄存器B用于乘除法运算。乘法运算时,两个乘数分别来自A、B,运算结果的低8位存于A,高8位存于B。除法运算中被除数来自A,除数来自B,结果商存于A,余数存于B。

其他情况下,寄存器B作为通用寄存器或普通RAM单元使用。

2)控制器

控制器是单片机内部按一定时序协调工作的控制核心,是分析和执行指令的部件。控制器主要由程序计数器PC、指令寄存器IR、指令译码器ID和定时控制逻辑电路、数据指针DPTR、堆栈指针SP等构成。它用于控制指令的读入、译码和执行,并对指令执行的过程进行定时和逻辑控制。

(1)程序计数器PC。PC是控制器中最基本的寄存器,专门用于存放下一条将要从程序存储器中取出指令代码的16位地址,可对64KB的存储空间进行寻址。CPU就是根据PC中的地址到ROM中去读取程序指令码和数据,并送给指令寄存器IR进行分析。每取出现行指令的一个字节后,PC就自动加1,即(PC)+1→PC,指向下一个要读取字节的地址。所以,待执行程序的机器码,必须在程序执行前预先一条条地按顺序存放到程序存储器ROM中,并使PC中的初始地址为程序第一条指令的内存地址。改变PC值就可以改变程序执行的流程。

当遇到转移指令时,PC内容会被指定的地址取代,实现程序转移。

当执行子程序调用或进入中断服务程序时,PC的内容会被置入这些程序的入口地址。同时,PC的原值被压入堆栈保存,待子程序或中断服务程序执行完毕后被弹出,实现程序返回。

(2)数据指针DPTR。DPTR是一个16位的特殊功能寄存器,用于片外数据存储器的地址寄存器,可以对64KB的外部数据存储器和I/O端口进行间接寻址。

DPTR既可作为一个16位寄存器使用,也可作为两个独立的8位寄存器使用。高位字节寄存器为DPH,低位字节寄存器为DPL。

(3)指令寄存器IR和指令译码器ID。IR用于存放CPU根据PC地址从ROM中读出的指令操作码。ID用于分析指令操作。指令操作码经译码后产生相应的电平信号,送入定时控制逻辑电路,并由定时控制逻辑电路产生相应的控制信号,完成指令的执行。

(4)定时控制逻辑电路。其中的定时部件用来产生脉冲序列和多种节拍脉冲;控制逻辑根据指令译码器产生的操作信号,按一定时间顺序发出一系列节拍脉冲控制信号来完成指令所规定的全部操作。

2.存储器

单片机的存储器分为程序存储器和数据存储器。

程序存储器主要用于存放编好的程序和表格常数。程序在开发调试成功之后就要永久地存储在程序存储器中,在断电情况下也不会丢失。程序存储器在操作运行的过程中是可读不可写的,因此又被称为只读存储器ROM。数据存储器用于存放运算的中间结果,进行数据暂存及数据缓冲等,在程序运行期间既可读也可写,用RAM实现。

AT89C51单片机内部集成了256B的RAM。其中,低128B为数据RAM区,用来存放过渡性的数据和地址;高128B为专用寄存器组,主要用来指示当前要执行指令的内存地址、存放特定的操作数、指示指令运行的状态等。当片内的ROM和RAM存储器不够使用时,可分别扩展为64KB外部RAM存储器和64KB外部程序存储器。它们的逻辑空间是分开的,并有各自的寻址机构和寻址方式。

3.I/O端口

AT89C51单片机对外部电路进行控制或交换信息都是通过I/O端口进行的。单片机的I/O端口分为并行I/O端口和串行I/O端口。

1)并行I/O端口

AT89C51有4个8位并行I/O端口,分别命名为P0口、P1口、P2口和P3口,它们都是8位准双向口,每次可以并行输入或输出8位二进制信息。也可以按位操作进行输入或输出信息。每个并行I/O端口内部都有一个8位数据输出锁存器(即特殊功能寄存器SFR中的P0~P3)、一个输出驱动器和一个8位输入缓冲器。因此,CPU进行数据输出时可以将数据锁存,进行数据输入时可以得到缓冲。

2)串行I/O端口

AT89C51有一个全双工的可编程串行I/O端口,它利用了P3口的第二功能,即将P3.1引脚作为串行数据的发送线TXD,将P3.0引脚作为串行数据的接收线RXD。在串行口控制寄存器SCON、电源及波特率选择寄存器PCON和串行数据缓冲器(它们都是特殊功能寄存器)的控制下,每次只能发送或接收一位二进制信息。这样,CPU内部的8位并行二进制数必须变成一位一位的串行数据才能通过TXD发送出去。同理,从RXD接收的数据也是一位一位的串行数据,必须转化为并行数据后才能供CPU使用。

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中的特殊功能寄存器(见表1-11)。

5.中断系统

单片机中的中断是指CPU暂停正在执行的原程序转而为中断源服务(执行中断服务程序),在执行完中断服务程序后再回到原程序继续执行。中断系统是指能够处理上述中断过程所需要的部分电路系统。

AT89C51的中断系统由中断源、中断允许控制器IE、中断优先级控制器IP、定时器控制器TCON、中断标志寄存器等构成,IE、IP、TCON均为SFR特殊功能寄存器(见表1-11)。AT89C51的中断源(产生中断请求信号的来源)有5个,分别是:两个外部中断源INT0、INT1(中断信号从P3.2、P3.3引脚输入)和3个内部中断源—定时器0溢出中断、定时器1溢出中断、串行口中断。每个中断源都有固定的中断服务程序入口地址。

6.内部总线

单片机内的CPU、存储器、I/O接口等单元部件都是通过总线连接在一起的。采用总线结构可以减少信息传输线的根数,提高系统可靠性,增强系统灵活性。

AT89C51单片机内部总线是单总线结构,即数据总线和地址总线是公用的。内部所有单元电路都挂在总线上,它们之间的信息传递都经过内部总线,并采用分时操作、分时使用的方法,所以不会引起信息冲突或抢占总线的问题。

知识4AT89C51单片机的引脚及其功能

AT89C51与MCS-51系列单片机引脚是兼容的,可分

为I/O端口线、电源线、控制线和外接晶体线四部分。其封装形式有两种:双列直插式封装(DIP)和方形封装,如图1-4

所示。图1-4AT89C51封装和引脚分配图

1.I/O端口功能

在AT89C51中有4个双向并行I/O端口P0~P3。每个端口都有8条端口线,共32条线,并都配有端口锁存器、输出驱动器和输入缓冲器,用于CPU与外部设备之间交换信息。但由于每个端口的结构各不相同,因此它们在功能和用途上有差别。

1) P0口

P0口有以下两个功能:

(1)作普通I/O口。当AT89C51无需扩展外部存储器时,P0口可作为普通的I/O口使用,此时需要外接上拉电阻。P0口的输出能力可驱动8个TTL电路。

(2)作地址/数据线。当AT89C51需要扩展外部存储器时,P0口作地址/数据总线使用。此时P0口是真正的双向口,不能再作它用,数据的输出和读入都是在CPU内部总线的控制下有条不紊地进行的。

2) P1口

1口有8条端口线,命名为P1.0~P1.7。由于其内部有上拉电阻,所以输入时不存在高阻状态,输出时不需外接上拉电阻。

P1口只作普通的I/O口使用,其功能与P0口的第一功能相同。

3) P2口

P2口有8条端口线,命名为P2.0~P2.7。它有两种使用功能,分别在不同状态下使用。

(1)作普通I/O口。当系统不扩展外部存储器时,P2作普通I/O口使用,其功能和原理与P0口第一功能相同,只是作为输出口时不需外接上拉电阻。此时P2口也是一个准双

向口。

(2)作地址线。当系统外扩存储器时,P2口作系统扩展的地址总线使用,输出由程序计数器PC来的高8位地址PCH或数据指针DPTR来的高8位地址DPH作为地址总线的高8位A8~A15。与P0口第二功能输出的低8位地址相配合,共同访问外部程序或数据存储器(64KB)。它只确定地址,并不能像P0口那样还可以传送存储器的读写数据。由于P2口有锁存功能,输出的高8位地址是锁存的,因此无需外加地址锁存器。当系统外接有程序存储器时,访问片外程序存储器操

作频繁,P2口不断输出高8位地址,因此不宜再作通用I/O口使用。

在仅有片外数据存储器的系统中,若片外RAM容量不大于256B,可直接使用R0、R1作为低8位地址间接寻址,此时P2口无需输出地址,仍可作通用I/O口使用。若片外RAM容量超过256B,则需要P2口输出高8位地址。

4) P3口

P3口有8条端口线,命名为P3.0~P3.7。P3口是一个多用途的准双向口,通常有两种功能。

(1)作普通I/O口。功能和原理与P0口相同,只是作输出口时不需要上拉电阻。

(2)作控制和特殊功能口使用。这时8条端口线所定义的功能各不相同,如表1-4所示。

P3端口可以按字节访问也可以按位访问,因此可以单独设定P3端口各位的工作状态。在应用中,可以根据需要把几条端口线设定为第二功能进行使用,剩下的口线仍作第一功能使用。

AT89C51单片机上电复位时,所有I/O口的复位值均为1。

5) I/O口的负载能力及应用功能

通过以上分析可以看出,4个I/O口结构上有相同之处,但由于存在一些差异,使它们在负载能力、应用功能方面存在不同。

(1)端口负载能力。P0口为三态双向口,负载能力最强,能够驱动8个TTL电路;P1、P2、P3口为准双向口,负载能力为4个TTL电路。

(2)端口应用功能。

P0口:可以作为普通I/O口;当系统外接存储器和I/O口时,通常作为低8位地址/数据总线分时复用口,低8位地址由地址锁存信号ALE下跳沿锁存到外部地址锁存器中,高8位地址由P2口输出。

P1口:通常作为普通I/O口,每一位都能作为可编程的输入或输出口线。

P2口:可以作为普通I/O口使用;当系统外接存储器和I/O口时,又作为扩展系统的高8位地址总线,与P0口一起组成16位地址总线。

P3口:为双功能口。每一位均可独立定义为普通I/O口或第二功能输入/输出。

2.电源线

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

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

(2) VSS:接地线。

3.外接晶振引脚

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

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

4.控制线

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

(1) RST:复位输入端,高电平有效。当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。

(2) ALE/:地址锁存允许/编程线。当访问外部存储器时,ALE线上输出一个高电位脉冲,其下降沿将P0口输出的片外存储器低8位地址锁存到外部专用地址锁存器中,以实现低字节地址和数据的分时传送。即使不访问外部存储器,ALE端仍以不变的频率(振荡器频率的1/6)输出脉冲序列,该脉冲序列可作外部时钟源或定时脉冲源使用。在对AT89C51片内Flash存储器编程时,该引脚用于输入编程负脉冲(

)。

(3):外部程序存储器的读选通线,低电平有效。当AT89C51访问外部程序存储器时,每个机器周期

输出两个负脉冲,用于选通片外ROM,并将外部ROM的内容送入P0口(数据总线)。访问外部RAM时无效。该信号可以驱动8个LSTTL负载。

(4)

/VPP:片外ROM允许访问/编程电源端。若

=0,则只允许CPU访问外部程序存储器(地址0000H~FFFFH);若=1,则先访问内部程序存储器,但当PC中地址值超过4KB范围时,将自动转向执行片外程序存储器指令。在Flash存储器编程时,该引脚用于施加编程电压VPP(芯片所要求的编程电压)。知识5AT89C51单片机最小系统

AT89C51片内有Flash程序存储器,由它构成的最小应用系统简单可靠。由于集成度高的原因,最小应用系统只能是基本控制单元。换句话说,AT89C51的最基本工作条件离不开晶振电路和复位电路,这也是所有单片机必需的两个基本电路。

1.晶振电路

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

引脚XTAL1为反相器输入端,XTAL2为反相器输出端。当在放大器两个引脚上外接一个晶体(或陶瓷振荡器)和电容组成的并联谐振电路作为反馈元件时,便构成了一个自激振荡器,如图1-6所示。图1-6内部振荡器等效电路图此振荡器由XTAL1端向内部时钟电路提供一定的频率时钟源信号。另外,振荡器的工作还可由软件控制,当对单片机内电源控制寄存器PCON中的PD位置1时,可停止振荡器的工作,使单片机进入省电工作状态,此振荡器称为内部振荡器。

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

所示。图1-7外部时钟电路图片内振荡器的频率是由外接石英晶体的频率决定的,其频率值可为4~24MHz,当频率稳定性要求不高时,可选用陶瓷谐振器。

片内振荡器对构成并联谐振电路的外接电容C1和C2要求并不严格。外接晶体时,C1和C2的典型值为30pF左右;外接陶瓷谐振器时,C1和C2的典型值为47pF左右。

2.复位电路

1)上电复位电路

上电复位电路中考虑到振荡器有一定的起振时间,复位引脚上高电平必须持续10ms以上才能保证有效复位。因此,一般采用专用的复位芯片或简单的RC电路来实现。图1-8(a)所示为一种常用的简易RC复位电路,通过对电容的充电在接通电源的同时完成系统的复位工作。R、C的参数可以调整复位的时间。图1-8单片机复位电路图

2)按键复位电路

单片机在运行期间若出现非正常状态,则可以通过人工强制干预的方法进行复位。常用电路如图1-8(b)所示,S键按下时,RST端经电阻R1接通VCC电源实现复位。同时,上电时即使没有将S键按下,由于R2C电路对电容C充电,RST端也会出现一段高电平,实现上电复位。

此外,加上电源电路后得到的单片机最小系统电路如图1-9所示。图1-9AT89C51最小应用系统任务实施

【设备与器件清单】

1.设备清单:PC机、单片机开发系统、稳压电源。

2.器件清单:

【跟我做】

1.准备器件,设计硬件电路图。

析:单片机最小系统电路由电源电路、复位电路、

晶振电路构成,最小系统驱动发光管点亮的参考电路如图1-10所示。图1-10单片机最小系统参考电路

2.编写控制程序。

在AT89C51单片机最小系统基础上,将8只发光二极管连接到P2口,由P2口进行控制。当P2口的引脚输出低电平“0”时,电流流过发光二极管而发光,当P2口的引脚输出高电平“1”时,发光二极管两端电压相等,不发光。

参考程序如下:

ORG 0000H

MAIN: MOV P2,#0F0H

SJMP $

END

【课后任务】

1.编写实训报告,总结实训过程中遇到的问题、解决方法和收获。

2.如果需要8只LED分两组交替闪烁,如何设计?

3.如果改用P0口和P1口来控制16只LED,让8只LED交替点亮,如何设计?任务扩展

知识6AT89C51单片机I/O口内部结构

1.P0口

P0口每条端口线的结构组成如图1-11所示。它由一个输出锁存器、两个三态缓冲器、输出驱动电路和输出控制电路组成。其中,输出驱动电路由上拉场效应管T1和驱动场效应管T2组成,输出控制电路则由一个与门、一个非门和一个模拟开关MUX组成。图1-11P0口位结构图

1)作普通I/O口

P0口作为普通的I/O口使用时,CPU发控制信号为0(低电平),与门封锁,使T1截止,同时使MUX触点处于下方,将锁存器的端与T2的栅极接通。因T1处于截止状态,故端口为漏极开路电路。

CPU向P0端口输出数据时,写脉冲加到锁存器的CL上,其上升沿将内部总线传送给D端的数据取反后出现在端,又经T2反相,这样在P0引脚上出现的数据正好是D端的写入数据。但在开漏极状态下,要使P0引脚真正反映D端的写入状态,必须外接上拉电阻。

当CPU从P0口读入外部输入数据(输入口)时,有两种读入方式:读锁存器和读引脚。

(1)读锁存器。在P0口的每一根线的结构上都设有一个读锁存器缓冲器(图1-11中的缓冲器1),当CPU读锁存器时,读入的数据是锁存器的输出状态,由Q端经三态缓冲器1进入内部总线。

读锁存器操作实际上是“读—修改—写”指令中的“读”动作。所谓“读—修改—写”指令,是指端口处于输出状态,但必须先从端口读入当前的数据进入CPU,在CPU中经过计算修改之后,重新输出到该端口上。例如,逻辑与指令“ANLP1,A”就属于这类指令。该指令的执行过程是:CPU先读入P1口上的数据,然后与累加器A中的数据按位进行逻辑与操作,最后将与的结果送回P1口,完成对P1口各位状态的修改。这类指令中,读入P1口的数据是前一次写入P1口输出锁存器的数据,而不是P1口的实际状态,两者不一定相同。

因此,在这种情况下,若直接读引脚,有可能得到错误的读入结果。

(2)读引脚。读引脚时,缓冲器2用于直接读取引脚数

据。但读引脚时必须注意,如果此前该口D端锁存过“0”数据,则T2是导通的,这样引脚上输入的“1”就被钳位在“0”状态,而无法使端口呈高阻输入状态,造成读取错误。所以,应先向端口锁存器写入“1”,使T2截止,则外输入的“1”就可进入缓冲器2中。因此,作为普通I/O口使用时,P0口是准双向口。

2)作地址/数据线

P0口作地址/数据总线使用时,CPU控制信号为1(高电平),使与门打开,同时使MUX触点处于上方,场效应管T1、T2都由地址/数据总线控制工作,而且是互补输出状态。

当从P0口输出地址数据时,若地址/数据为“1”,与门输出“1”使T1导通,反相器输出“0”使T2截止,P0引脚上出现高电平;若地址/数据为“0”,与门输出“0”使T1截止,反相器输出“1”使T2导通,P0引脚上出现低电平“0”。当从P0口输入数据时,信号从三态缓冲器2进入内部总线,CPU自动对锁存器先写“1”。此时P0口是真正的双向口。

2.P1口

P1口每条线的结构组成如图1-12所示。

与P0口不同,该端口电路结构中没有多路转换开关MUX,因此,P1口只作普通的I/O口使用,其功能与P0口的第一功能相同。同样,作输入口使用时,必须先向锁存器写入“1”,使场效应管T截止,然后才能读取数据。因此,P1口也是一个准双向口。图1-12P1口位结构图

3.P2口

P2口每条线的结构如图1-13所示。图1-13P2口位结构图

1)作普通I/O口

P2口作普通I/O口时,CPU发出的控制信号使多路选择开关MUX打向1端,此时P2口作普通I/O口使用,其功能和原理与P0口第一功能相同,只是作为输出口时不需外接上拉电阻。此时P2口也是一个准双向口。

2)作地址线

2口作地址线时,控制信号使多路选择开关MUX打向2端,此时P2口作系统扩展的地址总线使用,输出由程序计数器PC来的高8位地址PCH或数据指针DPTR来的高8位地址DPH作为地址总线的高8位A8~A15。与P0口第二功能输出的低8位地址相配合,共同访问外部程序或数据存储器(64KB)。它只确定地址,并不能像P0口那样还可以传送存储器的读/写数据。由于P2口有锁存功能,输出的高8位地址是锁存的,因此无需外加地址锁存器。在仅有片外数据存储器的系统中,若片外RAM容量不大于256B,可直接使用R0、R1作为低8位地址间接寻址,此时P2口无需输出地址,仍可作通用I/O口使用。若片外RAM容量超过256B,则需要P2口输出高8位地址。在片外RAM的读/写周期内,P2口锁存器的内容不受影响,周期结束后,多路转换开关MUX自动切换到1端,寄存器原来的数据又会重新出现在引脚上。

4.P3口

P3口每条线的结构如图1-14所示。图1-14P3口位结构图

P3口是一个多用途的准双向口。当P3口工作于第一功能即作普通I/O口使用时,其功能和原理与P0口相同,只是作输出口时不需要上拉电阻。在P3口的引脚信号输入通道中有两个缓冲器,第二功能的输入信号取自第一个缓冲器(上边)的输出端。普通输入信号取自第二个三态缓冲器(下边)的输出端。知识7AT89C51单片机的工作方式

1.复位方式

单片机在开机时或在工作中因干扰而使程序失控或工作中程序处于某种死循环状态等情况下都需要复位。复位的作用是使中央处理器CPU以及其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。复位后,PC程序计数器的内容为0000H,即单片机从0000H单元开始执行程序。同时,复位操作会影响特殊功能寄存器(SFR)的状态,但片内RAM中的内容不变。SFR的复位状态如表1-5所示。

2.程序执行方式

连续执行方式是指从指定地址开始连续执行程序存储器ROM中存放的程序。

单步执行方式是指在单步运行键控制下,每按一次单步键,程序按顺序执行一条指令的工作方式,通常用于程序调试。单步运行键通常通过外部中断方式实现,详见项目2中任务一的知识11。

3.低功耗方式

待机工作方式和掉电方式是由电源控制寄存器PCON控制的,PCON是一个按位定义的特殊功能寄存器,其字节格式如表1-6所示。该寄存器的各位定义如下:

SMOD:串行口波特率加倍控制位,等于“1”时波特率加倍。

GF1、GF0:通用标志位,由用户通过软件设置。

PD:掉电方式位,PD=1进入掉电工作方式。

IDL:待机方式位,IDL=1进入待机工作方式。

若PD和IDL同时为1,则进入掉电工作方式。

复位时,PCON=0×××0000B,单片机处于正常工作状态,若要进入待机或掉电工作状态,仅需将PD或IDL置位即可。

1)待机工作方式

待机工作方式是指在程序运行的过程中,在CPU暂时无需工作时,单片机进入的一种低功耗工作方式。

使用指令使PCON的IDL位置1,即进入待机方式。在此方式下,振荡器仍然运行,并向中断系统、串行口和定时器提供工作时钟信号,但向CPU提供时钟的电路被封锁,CPU停止工作。

CPU的状态在待机期间维持不变,与CPU有关的SP、PC、PSW、内部RAM和全部工作寄存器及引脚都保持进入待机方式时的状态,ALE和保持高电平。待机期间各引脚的状态如表1-7所示。

退出待机方式继续正常工作的方式有两种:激活中断和硬件复位。

(1)激活中断。在待机方式下,中断系统仍处于工作状态,因此可以采用中断方法激活CPU,使其恢复到正常工作状态。任何一个开放的中断源在待机方式下中断请求,都将使IDL被硬件自动清零,使单片机退出待机方式进入正常工作方式。CPU响应此中断请求,进入中断服务程序,当中断服务程序执行完最后一条RETI指令后,程序将返回到原先置待机方式指令后的下一条指令处开始继续执行。

PCON的两个通用标志位GF1、GF0可用来指示中断是在正常运行期间发生的还是在待机状态发生的。例如,待机方式的启动指令也可以同时把一个或两个通用标志位置1,各中断服务程序根据对这两个标志位的检查结果,就可以确定此次中断是在什么情况下发生的。

(2)硬件复位。在待机方式下振荡器仍然工作,只要在RST引脚上送一个延时大于两个机器周期的正脉冲,就能将IDL清零,使单片机退出待机状态,CPU恢复工作,程序从待机方式启动指令的后一条指令继续执行。

用硬件复位使单片机退出待机方式,在内部复位操作开始之前,尚有两个或三个机器周期的时间执行程序,在此期间,片内硬件禁止对内部RAM进行存取操作,但对端口引脚的访问却不禁止。

2)掉电方式

PCON中的PD位控制着单片机进入掉电保护方式。若使PD位置为1,单片机即进入掉电方式。掉电方式下片内振荡器停振,送入时钟电路的振荡信号被封锁,不产生时钟信号,片内一切工作都停止,只有片内RAM的内容被保留,端口的输入状态值都保存在对应的SFR中,ALE和引脚输出逻辑低电平。如果在执行片内程序时启动了掉电方式,各端口引脚将继续输出其相应的SFR的内容。若片外程序进入掉电方式,P2口也输出其SFR的数据,P0口将处于高阻状态。退出掉电方式的唯一方法是硬件复位。

电期间,VCC电源(也是备用电源引入端)可以降至2V,在进入掉电方式之前,VCC不能降低,而在退出掉电方式之前,VCC必须恢复正常的电压值。当VCC恢复正常的5V后,硬件复位信号须维持10ms,使振荡器重新起振并稳定下来,单片机才可以退出掉电方式。复位操作使所有SFR均恢复成初始值,并从0000H单元重新开始执行程序。定时器、中断允许、波特率和端口状态都要重新安排,但片内RAM的内容并不受影响。低功耗方式往往用于直流电源供电或停电时依靠备用电源供电的情况,可以大大降低功耗。单片机正常工作时消耗10~20mA电流,而CPU的耗电量占芯片耗电的80%~90%。在低功耗方式下,CPU停止工作,待机工作方式时消耗1.75mA电流,掉电方式工作时消耗5~50μA电流,可见耗能很小。

4.编程和校验方式

1)签名字节读出方式

签名字节是生产厂家在生产AT89系列单片机时写入到存储器中的信息,包括生产厂家、编程电压和单片机型号。这些信息一般也会印在单片机封装外壳的顶面(或底面),但由于某些原因看不到封装表面的这些信息时,我们就要通过读取签名字节的方法来获得这些信息,特别是编程电压。

2) Flash存储器编程方式

这里的编程是指利用特殊手段将用户编写好的程序代码写入AT89C51片内4KBFlash存储器的过程。编程前必须先确定编程电压。AT89系列单片机只有两种编程电压:一种是低压编程方式,用5V电压;另一种是高压编程方式,用12V电压。这一编程电压可从器件封装表面读取或从签名字节中读取。

AT89C51存储器编程时,必须在硬件上先建立好地址、数据和相应的控制信号,如图1-15所示。图1-15Flash编程硬件逻辑电路图具体编程步骤如下:

(1)在地址线上输入要编程单元的地址。

(2)在数据线上输入要写入的数据字节。

(3)在/VPP端加入编程电压(5V或12V)。

(4)激活相应的控制信号。

(5)在ALE/ 端加入一个编程负脉冲,数据线上的数据字节就写入地址线上对应的Flash存储器单元地址中了。

3)程序校验方式

程序校验方式是指对编程中写的程序代码进行读出,并与程序写入前的代码进行比较验证的过程。

校验只能在程序没有被加密的情况下进行。程序加密后不能直接校验,但可通过观察它们的功能是否被实现来验证。

4) EPROM加密方式

用户编写好的程序通过编程和校验无误,写入到EPROM中后,可进行加密保护以防止非法读出受保护的应用软件。程序的加密是通过软件对加密位的编程来实现的。AT89系列单片机的加密位有三位,分别为LB1、LB2和LB3。当加密位被编程后,Flash存储器的内容不能用校验方法进行读出,从而实现保密功能。当程序被擦除时,加密位也一起被擦除,同时恢复Flash存储器的全部功能。

5)程序擦除方式

AT89C51单片机的片内Flash存储器可多次编程,但在每次对程序存储器进行编程前必须先执行擦除操作,使存储器单元内容变为全FFH状态(包括签名字节)。知识8

STC89C52单片机串口下载电路及流程

STC89C52单片机各方面的性能都兼容AT89C51,并且具备更多的功能,特别是具备ISP在线下载程序功能,单片机初学者只需要根据图1-16所示的硬件电路,就可以直接进行编程和下载,不用购买昂贵的编程器就能学习单片机技术。在PC机端,需要下载STC专用的下载编程软件STC_

ISP_V480.EXE,并点击运行。

(1)将STC89C52RC芯片放入单片机下载板的40脚活动插座中。

(2)在图1-17所示的编程界面中选择对应的单片机芯片型号,如STC89C52RC。

(3)点击“打开程序文件”选择合适的烧写文件( .HEX)。

(4)点击“Download/下载”按钮,然后接通单片机下载板的电源。

(5) 3s左右,就能完成程序下载并运行。图1-16ISP下载硬件电路图1-17STC编程软件界面任务二LED显示器的设计

任务要求

【任务内容】

组装一个AT89C51单片机的最小系统,外接8个发光二极管,依次将发光管由右到左单灯点亮,循环往复。

【知识要求】

了解AT89C51的存储器结构;掌握寻址方式和部分数据传送指令的使用;掌握汇编程序结构;掌握循环程序设计方法;了解单片机中的时钟与时序。

相关知识

知识1AT89C51单片机的存储器

AT89系列单片机存储器结构将程序存储器(ROM)和数据存储器(RAM)分开,它们有各自独立的存储空间、寻址机构和寻址方式。

AT89C51共有4个存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。其典型结构如图1-18所示。图1-18AT89C51存储器结构图

1.程序存储器

AT89C51程序存储器是只读存储器,用于存放程序代码和表格常数,有片内和片外之分。片内有4KB的Flash程序存储器,地址范围为0000H~0FFFH。当内部ROM不够使用时,可以扩展片外程序存储器,因程序计数器PC和程序地址指针DPTR都是16位的,所以片外程序存储器扩展的最大空间是64KB,地址范围为0000H~FFFFH。

无论片内还是片外扩展的程序存储器,两者的地址空间是统一的。0000H~0FFFH这4KB的地址空间为片内和片外程序存储器所共有,或片内占用或片外占用,但两者不能同时占用。

为了对片内、片外ROM的使用加以区分,AT89C51提供了一个专用的控制引脚。引脚接高电平时,单片机程序从内部ROM开始执行,当PC值超出内部ROM的容量时,会自动转向外部程序存储器空间。若引脚接低电平,则程序从外部扩展程序存储器的0000H地址开始取指执行,不管是否有内部Flash存储器。不论从片内还是片外程序存储器读取指令,系统的执行速度都是相同的。

在64KB程序存储器空间中,有6个单元具有固定用途。第一个是0000H单元,因AT89C51复位后程序计数器PC的内容为0000H,故CPU必须从0000H单元开始执行程序,即0000H单元是整个系统程序的起始地址。其余的5个单元分别是中断服务程序的入口地址,如表1-8所示。

0000H单元与另一固定地址单元0003H(外部中断0服务程序入口地址)之间只有3B的空间,因此,一般在0000H单元中存放一条绝对转移指令,用户编写的程序从转移地址开始存放,这样做是为了跳过其他5个中断入口地址。当系统不使用中断时,则无需跳转,程序从0000H单元开始顺序存放即可。在系统需要扩展外部程序存储器时,P0口和P2口作为地址总线使用。P0口作为地址/数据复用总线使用,它先输出16位地址的低8位(PC程序计数器低8位,高8位由P2口输出)。当系统不需扩展,只用内部4KB的Flash存储器时,P0口和P2口可作为普通I/O口使用。详细扩展电路在后面项目中介绍。

2.数据存储器

内部数据存储器为256B的RAM,地址范围为00H~FFH。片外数据存储器为可扩展的64KB存储空间,地址范围为0000H~FFFFH,两者的地址空间是分开且各自独立的,访问的指令也各不相同。访问内部数据存储储器时,用MOV指令;访问外部数据存储器时,用16位DPTR寻址,可寻址空间为64KB,用MOVX指令。片内/外RAM的结构分配如图1-18(b)所示。

1)内部数据存储器

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

(1)数据RAM区。数据RAM区共128B,它又可划分为工作寄存器区、位寻址区和用户RAM区,如图1-19所示。图1-19内部数据存储器结构图①工作寄存器区。00H~1FH这32个单元为工作寄存器区,又称通用寄存器,用于数据运算和传送过程中的暂存单元。工作寄存器共分为4组,每组占8个RAM单元,地址由小到大分别用代号R0~R7表示。通过设置程序状态字PSW中的RS1、RS0状态来决定哪一组寄存器工作,如表1-9所示。不用的工作寄存器单元可作一般的RAM使用。②位寻址区。20H~2FH这16个单元为位寻址区。它有双重寻址功能,既可进行位寻址操作,也可同普通RAM单元一样按字节寻址操作。位地址为00H~7FH,128个位地址的分配如表1-10所示。③用户RAM区。30H~7FH这80个单元为用户RAM区,用于存放用户数据,只能按字节存取。

堆栈是一种特殊的数据存储区域,是为程序调用和中断服务而设立的,用于保护现场和断点地址。它按照“先进后出”的规律存取数据,固定的一端称为栈底,活动的一端称为栈顶,用堆栈指针SP指示。复位时,SP的初值为07H,但这个初值可以通过“MOVSP,#DATA”语句来修改,以确定堆栈的使用空间。对堆栈的操作都是在栈顶进行,有两种操作:一种是数据的写入,称为入栈或压栈;另一种是数据的读出,称为出栈或弹出。入栈操作用于将数据压入栈顶,执行该操作时,先将栈顶指针SP的值加1,然后把数存入到SP指向的单元中。出栈操作用于把栈顶的数据弹出,执行该操作时,先将堆栈指针SP指向的单元内容弹出并送入目标地址中,然后将SP的值减1,SP仍指向栈顶。

(2)专用寄存器区。片内80H~FFH这一区间集合了21个特殊用途的寄存器,一般称之为专用寄存器或特殊功能寄存器(SFR)。除了程序计数器PC和4个通用工作寄存器组外,其余所用寄存器都在SFR区内。它们的功能是固定的,用户不得更改。单片机通过对这些特殊寄存器的读/写访问实现对各功能单元的控制。每个SFR占有一个RAM单元,它们离散地分布在80H~FFH地址范围内,如表1-11所示。特殊功能寄存器可以用直接寻址方式进行字节访问,其中11个带*号的寄存器还可进行位寻址操作,其位地址的分配如表1-11所示。

没有被SFR占据的地址用户不可访问,对这些地址读出时,通常会得到随机的数据,而写入时将会有不确定的效应,因此软件设计时不要使用这些单元。

主要的特殊寄存器的名称及主要功能介绍如下(详细的用法见后述内容):

A—累加器,自身带有全零标志Z。A=0,则Z=1;A≠0,则Z=0。该标志常用于程序分支转移的判断条件,如指令JZ,JNZ。

B—寄存器,常用于乘除法运算。

PSW—程序状态字,主要起着标志寄存器的作用,其8位定义见表1-3。

SP—堆栈指针。

DPTR—16位寄存器,可分成DPL(低8位)和DPH(高8位)两个寄存器。

P0~P3—I/O端口寄存器,是4个并行I/O端口影射在SFR中的寄存器。通过对该寄存器的读/写,可实现从相应I/O端口进行输入/输出操作。

IP—中断优先级控制寄存器。

IE—中断允许控制寄存器。

TMOD—定时器/计数器方式控制寄存器。

TCON—定时器/计数器控制寄存器。

TH0,TL0—定时器/计数器0。

TH1,TL1—定时器/计数器1。

SCON—串行端口控制寄存器。

SBUF—串行数据缓冲器。

PCON—电源控制寄存器。

2)片外数据存储器

当内部256B的数据RAM不够使用时,AT89C51单片机可扩展片外64KB空间的数据存储器,地址范围为0000H~FFFFH。单片机使用R0、R1或DPTR来存放这些地址,通过地址寻找存储于其中的数据,这种方法叫做寄存器间接寻址。

当使用8位的R0、R1时,以页面方式寻址。页内地址即低8位地址由R0、R1决定,共256B;页面地址即高8位地址由P2决定,共256B。当用16位DPTR寄存器寻址时,即可在64KB范围内寻址。片外数据存储器的地址空间与程序存储器的地址空间是重合的,但两者的寻址指令和控制线不同。程序存储器的访问指令为MOVC,控制线为,而片外数据存储器的访问指令为MOVX,读/写控制线为、。所以,尽管地址重合,也不会造成混乱。知识2汇编语言与指令系统概述

1.计算机语言

计算机语言随着计算机的发展而发展,它的种类很多,主要分为机器语言、汇编语言和高级语言。

1)机器语言

机器语言就是用二进制编码表示每条指令。因为计算机只能识别二进制数,所以计算机只能够直接执行用机器语言编写的机器码程序。不同种类的计算机,由于其内部结构不完全相同,它的机器码指令也不一定相同。

例如,用单片机AT89C51机器码指令完成“9+5”的操作,所用的机器码指令如下:

0111010000001001 ;该指令将9存入累加器A中

0010010000000101 ;该指令将累加器A与5相加,

并把结果存入累加器A中

如果将以上两条指令输入单片机中,就可以直接执行。显然,用机器码指令编写程序,指令难以记忆,程序可读性和移植性差,不易查错和修改,限制了计算机的使用和推广。

2)汇编语言

汇编语言是符号化的机器语言。它用一些容易理解和记忆的符号代替机器码指令,因此又把汇编语言称为助记符语言,也就是说助记符指令与机器码指令是一一对应的。汇编语言同机器语言一样,不同结构的计算机,其汇编指令也不相同。上述“9+5”的例子用AT89C51汇编语言可写成:

MOVA,#09H

ADDA,#05H对比机器码,汇编语言克服了机器语言的缺点,方便了用户记忆指令和编写程序,但用汇编语言编写的源程序毕竟不是计算机能直接识别的机器码,需用汇编程序“翻译”成机器码后方可执行。这就是汇编过程—首先将助记符指令编译成机器码指令,然后交给计算机硬件来执行。

采用汇编语言编写程序,可以直接访问和操作单片机中的寄存器及存储器单元,对数据的处理表述得非常具体。

3)高级语言

高级语言是接近自然语言和数学语言的算法语言,具有直观、通用等特点。相对于高级语言,机器语言和汇编语言属于低级语言。用低级语言编写程序需要完全了解CPU硬件结构,对程序设计人员要求较高,且程序不能移植。高级语言避免了低级语言的上述问题,提高了编写程序的效率,使计算机的应用得到了普及。但高级语言必须经过编译程序编译成目标代码后才能被CPU执行。

AT89C51单片机控制程序既可采用汇编语言编写,也可采用高级语言编写。两者的特点上面已经分析过—汇编语言可以直接访问和操作单片机中的寄存器和存储单元,高级语言的编写效率高,因此在具体设计时,开发者应根据具体情况灵活选择。一般计算和处理较为复杂的项目选用高级语言编程,而对于偏重于利用硬件控制的课题则采用汇编语言更为具体清晰。甚至可以采用高级语言和汇编语言混合编程。

2.汇编指令格式

将30H、3lH两个单元中的大数送入A中,汇编源代码

如下:

MOV A,30H

CJNE A,31H,BIG

BIG: JNC OVER;30H单元值大则结束

MOV A,31H;31H单元值大则送入累加器A中

OVER: RET从上例可以看出,AT89C51单片机汇编语言指令格式如下:

[标号:]操作码操作数[;注释]

其中,[]部分为可选项。下面结合程序对指令格式中的各部分逐一加以说明:

(1)标号是表示该指令位置的符号地址。它以英文字母开始,由1~8个字母或数字组成,其后必须跟“:”,通常在子程序或转移指令的目标地址处使用标号。标号不能使用汇编语言已有的助记符、寄存器、伪指令符号,且同一程序段中不能使用相同的标号。上例中的“BIG”、“OVER”都是标号。

(2)操作码指出了指令所要实现的操作功能。如上例中的“MOV”用来完成数据的传送,“CJNE”用于操作数的比

较等。

(3)操作数指出了参与操作的数据来源(源操作数)和操作结果存放的目的单元(目的操作数)。指令可以由一个或多个操作数组成,操作数与操作数之间用“,”分隔。操作数可以是一个数(立即数),也可以是存放了操作数的寄存器或存储单元的直接地址。操作数中的立即数可以是二进制数、八进制数、十六进制数和十进制数。在汇编程序设计中,大多数采用十六进制数。若十六进制操作数以字符A~F中的某个开头时,还要在其前面加一个前导“0”,以区别于字符A~F。

(4)注释是对一条指令或一段程序的解释和说明,目的是方便程序的阅读。程序运行时对注释不进行任何操作。由于汇编语言的可读性较差,系统开发或应用编程时,注释是非常必要的,它可以方便程序的修改和维护。注释必须以“;”开头,上例中“;”后面的内容都是注释。

3.指令系统概述

汇编语言是助记符语言,可增加程序的可读性,但汇编语言并不能被计算机所理解。因此编写好的汇编源代码,必须经过特殊的编译工具,转换为相应的机器指令,并存储在单片机的程序存储器中,这样程序才能自动被CPU执行,进行相应的控制。

根据机器码指令在存储器中占用空间的情况,可以将指令作如下分类:

(1)单字节指令。单字节指令(汇编之后的机器码)格式由8位二进制编码表示。例如:

CLRA→E4H

(2)双字节指令。双字节指令格式由两个字节组成,包含操作码和操作数。例如:

MOVA,#10H→74H10H

(3)三字节指令。三字节指令格式中,第一个字节为操作码,后两个字节为操作数。

例如:

MOV40H,#30H→75H40H30H指令的另一个重要性能就是其执行时间。计算机执行指令时间的长短并不取决于指令所占存储器的字节数,而取决于所占用的机器周期数。在111条指令中,有64条是单机器周期指令,45条是双机器周期指令,两条是四机器周期指令。

AT89C51单片机指令系统与广泛使用的MCS-51系列单片机指令系统完全兼容。知识3寻址方式

所谓寻址方式,就是找到存放操作数的地址并把操作数提取出来的方法。牢固掌握寻址方式,对学习单片机原理及程序设计有着重要的意义。

在介绍指令之前,首先将指令系统中经常用到的一些符号的意义作简要的介绍。

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

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

(3) #data8:表示8位立即数,即包含在指令中的8位常数,如#10或#01101101B。

(4) #data16:表示16位立即数,即包含在指令中的16位常数,如#2010H。

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

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

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

(8) rel:表示

温馨提示

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

评论

0/150

提交评论