1、第2章 AT89S51单片机原理与基本应用系统,本章主要内容,关于51和52两个子系列,ROM RAM MCS-51系列单片机 C/T 中断源 51子系列- 8031 8051 8751 HMOS 4KB 128B 2 5 (基本型) 80C31 80C51 87C51 CHMOS 52子系列- 8032 8052 8752 HMOS 8KB 256B 3 6 (增强型) 80C32 80C52 87C52 CHMOS无ROM 掩膜ROM EPROMAT89C51、 AT89C52-极限工作频率是24M AT89S51、 AT89S52-最高工作频率为33MHz , ISP在线编程功能 ,内部
2、集成看门狗计时器 、双数据指示器DPTR 、全新的加密算法 、向下完全兼容51全部字系列产品 、烧写寿命更长 AT89C2051 flash ROM-89SXX CHMOS-工艺较先进,综合了HMOS的高速度和CMOS的低功耗特点,MCS-51系列可分为51和52两个子系列,并以芯片型号的最末位数字作为标志。其中51子系列是基本型而52子系列则是增强型。 52子系列功能增强的具体表现为: 片内ROM从4KB增加到8KB 片内RAM从128字节增加到256字节 定时器/计数器从2个增加到3个 中断源从5个增加到6个除了这些增强之外,52子系列与51子系列在其它方面是相同的。(包括结构和指令)一般
3、只针对51子系列的内容进行讲授。,不同型号MCS-51单片机的CPU处理能力和指令系统完全兼容,只是存储器和I/O接口的配置有所不同。,目前常用: AT89C51、 AT89C52、 AT89S51、 AT89S52、 AT89C2051 -flash ROM,一、AT89S51单片机内部结构,(1)一个8位的CPU; (2)一个片内振荡器及时钟电路; (3)4KB的Flash ROM; (4)128B的内部RAM (5)可扩展64KB外部ROM和外部 RAM的控制电路; (6)两个十六位的定时/计数器; (7)26个特殊功能寄存器(双数据 指针); (8)4个8位的并行口; (9)一个全双工
4、的串行口; (10)5个中断源,两个外部中断, 三个内部中断; (11)内部硬件看门狗电路; (12)一个SPI串行接口,用于芯片 的在线系统编程(ISP)。,1、电源VCC(P40)芯片电源,接+5V。VSS(P20) 接电源地。,二、AT89S51单片机引脚功能,2、时钟 XTAL1(P19)晶体振荡电路的反相器 输入端 XTAL2(P18)晶体振荡电路的反相器 输出端。,a. 使用内部振荡电路时,X1、X2引脚外接石英晶体和补偿电容。 b. 使用外部振荡输入时,HMOS型DPJ, 从X2输入,X1接地;CHMOS型DPJ, 从X1输入,X2悬空。,3、控制控制引脚有4个,先学习其中的两个
5、。(1)RST/VPD复位/备用电源RST复位功能是单片机正常工作必不可少的,因为复位可以使单片机从程序的开头运行,使单片机按照人们设计的程序运行,在单片机系统上电开始工作,或单片机系统由于外界干扰偏离正常运行,都需要复位。AT89S51单片机是高电平复位,只要在该引脚上保持一段时间(两个机器周期以上)的高电平,单片机就复位。在正常运行程序时该引脚为低电平。VPD功能是在VCC掉电情况下,该引脚接备用电源,向片内的RAM供电,使RAM中的数据不丢失。,3、控制 (2)EA/VPP内外ROM选择/EPROM编程电源 在通常的应用中EA功能是作为内部和外部ROM的选择端。当EA=1,CPU从芯片内
6、部的ROM中取指令运行,但超过4KB范围的程序,也从外部扩展的ROM中取得。反之当EA=0时,只从芯片外部扩展的ROM中取指令运行。在绝大多数的应用中,4KB空间范围足够存放程序,一般都选择内部ROM,将EA接高电平。VPP功能是在我们要把程序下载到内部ROM中才用到的功能,只有设计制造编程器时考虑,一般情况用不到。,4、I/O口AT89S51单片机有4个8位的并行口,分别称为P0口、P1口、P2口和P3口,共32个引脚 。单片机就是通过这些口线对外部电路进行控制和检测。它们的详细结构原理和功能在本章第三节中介绍。,控制信号引脚,RST/VPD RST 复位信号输入端(当出现两个机器周期高电平
7、时,单片机复位)VPD 内部备用电源的输入端(片内RAM) ALE/ PROGALE 低8位地址锁存使能/允许输出端PROG 8751内部EPROM编程时的编程脉冲输入端 PSEN 外部程序存储器ROM读选通信号的输出端 EA/VPPEA 访问外部程序存储器ROM的控制信号。VPP 875l EPROM的2l V编程电源输入端。,并行I/O口P0P3端口引脚,P0 ( P 0.7 -P0. 0) 8位漏极开路的双向I/O通道 P1(P1.7 P1.0) 带有内部上拉电阻的8位准双向I/O通道 P2 ( P2.7 P2.0 ) 同上 P3 ( P3.7 P3.0 ) 同上,三、AT89S51单片
8、机存储空间配置,AT89S51单片机存储器结构采用的是哈佛型结构,程序存储器(ROM)和数据存储器(RAM)是分开的,有各自的寻址系统和控制信号,分别用不同的指令操作。ROM用来存放我们编写的程序和常数表格。数据存储器用来存放程序运行的数据和结果。ROM和RAM都分为内部和外部。,51存储器的特点,1.程序和数据存储器各自独立 普林斯顿结构:程序和数据共用一个存储器逻辑空间,统一编址。 哈佛结构:程序与数据分为两个独立存储器逻辑空间,分开编址。,内部 ROM (4KB)EA=1,外部 ROM (4KB)EA=0,外部 ROM (60KB),内部 RAM 128B,SFR (26个),外部 RA
9、M (64KB),0000H,0000H,0000H,0FFFH,0FFFH,1000H,FFFFH,FFFFH,FFH,00H,7FH,80H,MOVC指令操作,MOV指令操作,MOVX指令操作,ROM地址空间,RAM地址空间,2.物理空间与逻辑空间,物理上4个存储器地址空间:片内/片外程序存储器空间片内/片外数据存储器空间 逻辑上3个存储器地址空间:(从用户使用的角度)64KB 程序存储器(0000FFFFH) 256B 片内数据存储器(00FFH)64KB 片外数据存储器(0000FFFFH),51单片机存储空间,物理上分为:4个空间,即片内ROM、片外ROM片内RAM、片外RAM 逻辑
10、上分为: 3个空间,即 程序存储器(片内、外)统一编址 MOVC 片内数据存储器 MOV 片外数据存储器 MOVX,程序存储器用来存放编制好的、始终保留的固定程序和表格常数。程序存储器以程序计数器PC作地址指针,通过16位地址总线,可寻址的地址空间为64K字节。在80C51内部有4K字节的程序存储器ROM,也可在此基础上外接EPROM,使程序存储器的容量扩展到64K字节。51单片机中,64K字节程序存储器的地址空间是统一的。对于有内部ROM的单片机,在正常运行时,应把EA引脚接高电平,使程序从内部ROM开始执行。当PC值超出1000H-FFFFH时,会自动转向外部程序存储器空间。,ROM的用途
11、与配置,1、程序存储器(ROM) CPU是根据PC(程序计数器)值从ROM中取指令来执行的。CPU每从ROM中读取一个字节,自动执行(PC)+ 1PC,即PC指向下一个地址空间,一般情况下CPU是按ROM地址空间顺序从小到大依次执行。只有执行的指令是转移类指令,才根据转移类指令所指示的新地址,调整PC值,然后根据新的PC值从对应的地址空间中取指令来执行。当调用子程序或中断发生时,PC值也会改变。,寻址范围:0000H FFFFH 容量64KB, 即地址指针:PC 长度:16位,,寻址内部ROM;,,寻址外部ROM。,当PC值超过片内ROM容量时会自动转向外部存储器空间。,8031单片机,接低电
12、平,作 用: 存放程序及程序运行时所需的常数。-ROM,程序存储器,程序存放空间,复位后,PC的内容为0000H,因此系统从0000H单元开始取指并执行程序,它是系统执行程序的起始地址。通常在该单元中存放一条跳转指令,令CPU跳过0003H-002FH,转至主程序(它的首址可由用户指定,真正的用户程序从跳转地址开始存放)。 51单片机规定0003H-002FH为中断源处理程序入口。,七个具有特殊含义的单元是:,0000H 系统复位,PC指向此处;0003H 外部中断0入口000BH T0溢出中断入口 0013H 外中断1入口001BH T1溢出中断入口0023H 串口中断入口002BH T2溢
13、出中断入口 不管是内部的还是外部的ROM,开头的0003H-002FH空间地址是中断源的入口地址区,是专用单元,一般情况下用户不能用来存放其它程序。,1. 寻址范围(容量):64KB-216受地址线的根数限制 2. 编址范围:0000H-0FFFFH 3. 地址指针:PC16位,具有自动加1的功能,指示程序顺序执行; 上电或复位时,PC=0000H 4. EA管脚:EA0,从片外0000H 开始执行程序(将片外第一地址视作0000H)如80C31构成的系统;EA1,从片内0000H 开始执行程序,执行到0FFFH后, 程序自动跳到片外1000H继续执行,如由AT89S518751构成的系统。
14、5. 访问指令:MOVC PSEN管脚,数据存储器,用途: 存放程序运算的中间结果、状态标志位等 数据存储器: 由RAM构成,掉电时数据消失. RAM分为: 片内RAM-256B, 00-FFH MOV 片外RAM64KB, 0000H-FFFFH MOVX 片外数据存储器可对外扩展64KB空间,地址指针DPTR为16位 内、外地址的重叠 (00H-FFH) 通过不同指令来区分. 片内RAM是最活跃、最灵活的存储空间,51指令系统寻址方式及应用程序大部分是面向内部RAM的。,51系列单片机内部有256B的RAM。其中 低128B(00H一7FH)为用户RAM区域,用来暂存数据及数据处理的中间结
15、果; 高128B (80H-FFH)为特殊功能寄存器区域(SFR),21个特殊功能寄存器散布其中,其余空间用户无法使用.,片内数据存储器,2、内部数据存储器(内RAM) AT89S51单片机内部低128B字节RAM划分为三部分:工作寄存器区、位寻址区和数据缓冲区。,0区,1区,2区,3区,位寻址 区,数据 缓冲 区,工作寄存器区 8位整体操作,位寻址区 8位整体操作、位操作,堆栈与数据缓冲区 8位整体操作,0007H,080FH,1017H,181FH,202FH,位地址,D7,D0,PSW,D7,D0,20H(字节地址),(R0R7),307FH,1. 片内RAM 工作寄存器区: 字节地址:
16、00H1FH 位寻址区: 字节地址:20H2FH 位地址为:00H7FH 数据缓冲区/堆栈区: 字节地址:00H7FH 一般使用30H7FH,工作寄存器 51有32个工作寄存器,分为四个区(或组),每个区为8个寄存器R0、R1、R2、R3、R4、R5、R6、R7,每一时刻只有一个区工作。由PSW寄存器中的RS1、RS0的值来决定当前的工作区: 当 RS1 RS000时,0区为工作区,RS1 RS001时,1区为工作区RS1 RS010时,2区为工作区RS1 RS011时,3区为工作区,(1)工作寄存器区从00H1FH共32个单元为工作寄存器区,每8个一组,分为4个区,依次为:0区(00H07H
17、)1区(08H0FH)2区(10H17H)3区(18H1FH)在任一时刻只有一个区作为当前的工作寄存器区,相应的空间单元作为工作寄存器使用。工作寄存器区的选择可通过程序状态字PSW中的D4、D3位实现。不是当前工作寄存器区的可以作为一般的RAM空间使用。操作方式:8位整体操作。,这32个工作寄存器不但有它们的名称和区号,而且还有地址。00H-1FH共32个单元。00H07H为0区,分别对应R0R708H0FH为1区,分别对应R0R710H17H为2区,分别对应R0R718H1FH为3区,分别对应R0R7,这32个单元为内部数据存储器(即片内RAM)的00H1FH存贮空间,这与普通微机中的通用寄
18、存器基本相同,所不同的是,普通微机的通用寄存器只有名称,不占有RAM空间,因此只有名字,没有对应的地址;而51单片机的工作寄存器R0R7既可以用名字也可以用它的地址来表示。其中R0、R1寄存器除做工作寄存器外还常做间址寻址的地址指针。,(2)位寻址区20H2FH共计16个单元为位寻址区,每个单元的8位又有位操作,如位的置1、清0、取反以及判断等操作,各位有自己的位地址 。位地址的范围:007FH。(要注意和内RAM空间单元地址的区别)位寻址区空间单元操作的有两种方法,即可以象其它RAM空间一样进行8位整体操作,也可以通过位地址对这些空间单元的某一位操作。,位寻址区的位地址映象表,位寻址区的位地
19、址形式有两种:位地址和位编号,位地址,D7,D0,20H(字节地址),如20H单元的8个位 位地址为:00H07H 位编号为:20H.020H.7它们的含义是一致的,都表示20H单元的位地址,在应用中可以互换,位编号更便于记忆。,(3)堆栈与数据缓冲区30H7FH为数据缓冲区,用于存放数据和中间结果,起到数据缓冲的作用,这些空间数据的操作是8位的整体操作 。,3、特殊功能寄存器(SFR) 51系列单片机的状态字、并行口、串行口、定时器和中断系统的寄存器等,是一些有专门用途的寄存器, 称为特殊功能寄存器SFR,离散地分布在80HFFH地址范围内。SFR操作同内部RAM的操作,其中字节地址能被8整
20、除的特殊功能器,它们的每一位也有自己的位地址,也可以进行位操作。字节地址不能被8整除的特殊功能寄存器,只能8位的整体操作。8位整体操作既可以对它们的字节地址操作,也可以对它们的符号(名称)操作。,几个常用的特殊功能寄存器: (1)累加器ACC 累加器ACC是51系列单片机最常用的寄存器,许多指令都用到累加器,特别是算术运算都需要用到,在指令中ACC简写为A。(2)寄存器B 乘除法指令都要用到寄存器B,B也可以作为一般的寄存器使用。,(3)程序状态字寄存器PSW , PSW反映的程序运行的状态,其结构和含义如下表所示。,Cy进位标志。累加器A在执行加减法运算中,如果最高位有进位或借位,Cy置1,
21、否则清0,用于无符号数运算。另Cy还是位操作累加器,在指令中简写为C。,OV 溢出标志。 累加器A在执行加减法运算中,如果最高位和次高位只有一个进位或借位,OV置1,否则清0,用于有符号数的运算。 AC 辅助进位标志。累加器执行加法运算时,低4位向高4位进位时置1,否则清0。BCD码加法运算调整标志。 P 奇偶标志。表示累加器A中“1”的个数的奇偶性。如果A中“1”的个数为奇数,则P置1,否则清0 。,F0、F1 用户标志。与位寻址区的位地址功能相同。 RS1、RS0 工作寄存器区选择位。工作寄存器区有4个,每次只有一个区当作工作寄存器用,通过RS1、RS0可以选择它们中的一个。RS1、RS0
22、=000区(00H07H)RS1、RS0=011区(08H0FH)RS1、RS0=102区(10H17H)RS1、RS0=113区(18H1FH),例2-1 设A中有下面的加法运算,分析PSW中有关位的值,及其表示的含义。0 1 1 0 0 1 1 1+ 0 0 1 0 1 0 0 11 0 0 1 0 0 0 0最高位没有向更高位进位,因此Cy=0,表明如果我们把这两个数看作无符号数,它们的和没有超过256。次高位向最高位进位,最高位没有进位,因此OV=1,表明如果我们把这两个数看作有符号数,它们的和超出了范围,显然两个正数相加,不可能得到负数。,低4位向高4位进位,AC=1,表明如果把这两
23、个数看作是BCD码表示的数,需要在低4位加6调整才能得到结果仍是BCD码的正确结果。显然看作BCD码,两个分别是67和29,相加后得到96,低4位加6可得96的BCD码。加法运算的结果是放在A中的,8位中共有2个“1”,因此P=0,表明此时累加器中的数据满足偶校验。,(4)数据指针DPTR0、DPTR1。AT89S51单片机内部有两个数据指针(都是16位),但在某一时刻只能使用其中一个作为数据指针DPTR,由辅助寄存器1 (AUXR1)的DPS位控制,DPS=0,选择DPTR0的两个8位的寄存器构成数据指针,DPS=1,选择DPTR1的两个8位的寄存器构成数据指针。统一用DPH表示DPTR的高
24、8 位,DPL表示低8位。可以十六位整体操作,也可以分开按8位操作。在实际的应用中DPTR一般用来存放ROM空间或外部RAM空间的地址。,21个特殊功能寄存器SFR,运算 A、 B 、PSW(CY、AC、OV、P、RS1、RS0 ) 指针 SP、DPTR(=DPH+DPL) 并行口 P0P3 串行口 SCON、SBUF 定时器/计数器 TMOD、TCON、T0=TH0+TL0 T1=TH1+TL1 中断 IE、IP 电源 PCON 各字节地址能被8整的SFR的各位,均可位寻址。 AUXR1(DPS)、 DPTR1=DPH1+DPL1、 WDTRST、 AUXR,PSW程序状态字,PSW(CY、
25、AC、OV、P、RS1、RS0 ) CY 进/借位标志 加减法产生进/借位时,CY=1 AC 半进/借位标志 P 奇偶标志 A中1的个数为奇数时,P=1 RS1、RS0工作寄存器组选择位 OV溢出标志有符号数运算 超出-128+127时,OV = 1 表示运算出错无符号数乘除运算时 255时,OV=1 ,商为0时,OV=1,B寄存器是一8位寄存器,主要用于乘法和除法运算。乘法运算时,B中先存放乘数,乘法操作后,乘积的高8位又存于B中;除法运算时,B中先存放除数,除法操作后,B又存放余数。在其他指令中,B寄存器可作为一般寄存器使用,用于暂存数据。 AB B A A B :商A;余数B,一、汇编语
26、言指令的基本格式,1、51系列单片机汇编语言指令格式由4部分构成: 标号: 操作码 目的操作数,源操作数 ;注释。 (1)标号:为该指令的符号地址,根据需要设置。标号以字母开头,由字母、数字和下画线组成的字符串,字符串的最后必须有“:” ,系统的保留字不能作为标号 ,一般不大于8个字符。标号是该指令的符号地址,它的实质是反映该指令在ROM中的地址(存放位置),因此在同一个程序中标号不可重复。 标号在程序中主要是作为其它转移类指令的目的地址,或子程序的名称。,指令举例: LOP1:MOV A,20H;将20H单;元内容送;累加器A,(2)操作码操作码是每条汇编语言指令都必须有的,它是51系列单片
27、机指令系统规定的助记符,规定某条指令的操作功能。 (3)操作数操作数是参与操作的数据或地址。不同功能的指令,操作数的个数是不同的,在0-3个之间。在书写时操作数和操作码之间要留有空格,当有多个操作数时,操作数之间要用“,”隔开,前面的操作数称为目的操作数,后面的称为源操作数。,(4)注释: 是对该条指令的说明,便于阅读和理解程序功能。必须以“;”开始。,二、51系列单片机汇编语言指令中常用符号 即操作数的符号。 (1)Rn:当前工作寄存器区的8个工作寄存器R0R7,n=07。 (2)Ri:当前工作寄存器R0和R1,i=0,1。,(3)direct:8位的直接地址,代表内部RAM 00H7FH单
28、元,以及特殊功能寄存器的字节地址或名称。 (4)Ri:8位的间接地址,也代表内部RAM 00H7FH的某一单元,此时工作寄存器Ri的内容是多少,就代表相应的单元。用间址寻址的优点之一是循环方便。 (5)#data:8位的立即数,所谓立即数就是指令中直接参与操作的数据。 (6)#data16:16位的立即数。,(7)bit:位地址。代表内部RAM 位寻址区 (20H2FH)中可寻址位以及SFR中的可寻址位。具体的形式可以是位地址、位编号以及位定义。 (8)addr16:十六位的目的地址。 (9)addr11:11位的目的地址。 (10)rel:带符号的8位偏移地址。范围是+127 128。 X:
29、某寄存器或某单元(X):某寄存器或某单元中的内容。:指令执行后数据传送的方向。,操作数在具体程序中是数字形式或标号,direct、data、bit可以用二进制数、十进制数或十六进制数书写,用十六进制数时,如果高位是A、B、C、D、E、F时,必须在数的前面加0,以便和标号区别开来。addr16、addr11、rel在程序中的形式就是编程者所起的标号名称。,三、内部RAM的操作指令 1、内RAM间的数据传送指令 MOV 目的操作数,源操作数“MOV”是操作码,英语MOVE的简写,功能就是把源操作数传送到目的操作数,源操作数保持不变,操作数就是我们前面讲的A、Rn、direct、Ri、data。,(
30、1)以累加器A为目的地址传送指令1) MOV A,Rn ;ARn,Rn里的内容送;到累加器A 2) MOV A,direct;A(direct),direct;单元里的内容送A 3) MOV A,Ri ;A(Ri),内部RAM;某一单元里(以Ri里的;内容为地址的单元);的内容送到累加器A 4) MOV A,#data ;Adata 8位的立即;数送到累加器A,例3-1:已知(7) =77H,(70H)= 88H,(0) =70H,试写出以下指令的执行结果、指令代码及源操作数的寻址方式。,指令 执行结果 指令代码 寻址方式,MOV A,7 MOV A,70H MOV A,0 MOV A,#80
31、H,(A)=77H EFH 寄存器寻址 (A)=88H E5H 70H 直接寻址 (A)=88H E6H 寄间接寻址 (A)=80H 74H 80H 立即寻址,返回,;书放在甲抽屉中 ;甲抽屉的钥匙放在乙抽屉中 ;取书,,A中,20H,MOV 30H,#20H,MOV R0,#30H,MOV A,R0,此例中,20H就当成是那本书;30H就当成是甲抽屉;R0就当成是乙抽屉,执行的结果就是将20H这个立即数装入A中。期间也经历了两次寻址,即间接寻址。,寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用“”表示前缀。 例如: “一本书放在甲抽屉中,上了锁;其开锁的钥匙
32、放在乙抽屉中,乙抽屉也上了锁。问如何才能取到哪本书?”这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书。而寄存器间接寻址也是同样。 例如:,(2)以工作寄存器Rn 为目的地址传送指令1) MOV Rn,A ;RnA2) MOV Rn,direct ;Rn(direct)3) MOV Rn,#data ;Rndata注意:工作寄存器相互间、Rn与Ri之间、R0与R1之间没有传送指令。,例3-2:已知(A)=55H, (70H)=88H, 试写出以下指令的执行结果、指令代码及源操作数的寻址方式。指令 执行结果 指令代码 寻址方式,返回,MOV R3,A; MOV R7,70H; MOV R5
33、,#0FA;,(R3)=55H FBH 寄存器寻址 (R7)=88H AFH 70H 直接寻址 (R5)=0FAH 7DH FAH 立即寻址,(3)以direct为目的地址传送指令 1)MOV direct,A ;(direct)A2)MOV direct,Rn ;(direct)Rn3)MOV direct1,direct2;(d1) (d2)4)MOV direct,Ri ;(direct)(Ri)5)MOV direct,#data ;(direct)data,例3-3:已知(A)=55H, (70H)=88H, (0 ) =70H,(R3 )=33H,试写出以下指令的执行结果、指令代码
34、及源操作数的寻址方式。指令 指令结果 指令代码 寻址方式,返回,MOV P1 , A; MOV 78H,3; MOV 30H,0; MOV 7EH,70H; MOV 10H,#50H; ;,(P1)=55H F5H 90H 寄存器寻址 (78H)= 33H 8BH 78H 寄存器寻址 (30H)= 88H 86H 30H 寄间寻址 (7EH)= 88H 85H 70H 7EH 直接寻址 (10H)= 50H 75H 10H 50H 立即寻址,传送指令应用练习,例1 A5BH,R110H,R220H,R330H,(30H4FH,执行指令:MOV R1,A ;A送R1MOV R2,30H ;(30
35、H)送R2MOV R3,83H ;83H送R3执行后,R15BH,R24FH,R383H,(4)以Ri为目的地址传送指令 1)MOV Ri,A ;(Ri)A 2)MOV Ri,direct ;(Ri)(direct) 3)MOV Ri,#data ;(Ri)data,间址实例,例:MOV R1 , 76H执行结果: (R1) (76H) 。若(76H)=0FH, (R1)=23H, 则:,(23H)=0FH,例3-4:已知(A)=55H, (70H)=88H, (0) =70H, (R1 )=33H,试写出以下指令的执行结果、指令代码及源操作数的寻址方式。指令 执行结果 指令代码 寻址方式,返
36、回,MOV 0 , A; MOV 1 , 70H; MOV 1 , #78H;,(70H)= 55H F6H 寄存器寻址 (33H) = 88H A7H 70H 直接寻址 (33H) = 78H 77H 78H 立即寻址,例2-2 分析下面程序运行的结果MOV A,#30H ;A30H,即A=30HMOV R0,A ;R0A,即R0=30HMOV 70H,R0 ;(70H)R0,;即(70H)=30HMOV R0, #55H ;(R0)55H,;即(30H)=55HMOV R1,30H ;R1(30H),;即R1=(30H)=55HMOV 55H,#0AAH ;(55H)AAH,;即(55H)
37、=AAHMOV 40H,R1 ;(40H)(R1),;即(40H)=(55H)=AAH,返回,MOV指令数据传送示意图,例:判断下列指令正误,错者,作简要说明:,1. MOV A,2040H; 2. MOV A,R4; 3. MOV A,DPTR 4. MOV R1, R7 5. MOV R3,R0 6. MOV R1,R0 7. MOV R1,45H 8. MOV 60H,R0 9. MOV 20H,40H 10. DEC DPTR,2、累加器A的清零与取反指令 CLR A ;A0,将累加器A的内容;清为0CPL A ;将累加器A的内容按位取反3 16位数据传送指令MOV DPTR,#dat
38、a16 ;data16DPTR,指令 操作 MOV DPTR , #data16 (DPTR) data16 指令代码 90 H 立即数高8位 立即数低8位这条指令的功能:是把一个16位的立即数送入DPTR,16位的数据指针DPTR由DPH和DPL组成,这条指令把立即数的高8位送DPH,低8位送DPL.例如: MOV DPTR,#2000H结果:(DPTR)= 2000H 即(DPH)=20H,(DPL)=00H,返回,16位数据传送指令,功能:实现片外数据存储器(或扩展I/O)与累加器A之间的数据传送,寻址方式只能用间接寻址。指令有:指令 操作 指令代码MOVX A , DPTR ; (A)
39、 (DPTR) E0MOVX A , Ri ; (A) (Ri) 1110001iMOVX DPTR , A ; (DPTR) (A) F0MOVX Ri , A ; (Ri) (A) 1111001i,NEXT,指令格式: MOVX , ,片外RAMA之间的传送指令 MOVX,例: 若要把片外数据存储器2010H单元的内容传送到累加器A,则可采用以下指令: MOV P2 , #20H ; (P2) 20H ,得到页地址MOV R0 , #10H ; (R0) 10H ,得到页内地址MOVX A , R0 ; (A) (2010H) MOV DPTR,#2010HMOVX A, DPTR,4、
40、位操作指令 1)位置1指令SETB bit ;bit1SETB C ;C1 2)位清0指令CLR bit ;bit0CLR C ;C0 3)位取反指令CPL bit ;bitbitCPL C ;CC,4)位传送指令MOV bit,C ;bitCMOV C,bit ;Cbit位操作指令中bit的形式可以是位地址、位编号和位定义,例如:,CLR 0D4H SETB 0D3H,CLR PWS.4 SETB PWS.3,CLR RS1 SETB RS0,三组指令的功能是一致的,都是选择工作寄存器1区作为当前工作寄存器。,注意:以字母为开头的地址前要加零,以和整个程序中转移的标号相区别。,例: 片外数据
41、存储器2040H中的内容为一负数,试求其补码,并将它2041H单元。,BM: MOV DPTR, #2040HMOVX A, DPTRCPL AINC ASETB ACC.7MOV DPTR, #2041HMOVX DPTR , A,一、P0口,作为I/O使用时:CPU有关指令执行产生的时序信号使这时的“控制”为0,电子开关接通B端,“地址/数据”信号与后面的电路联系被切断,同时使与门输出0,V1截止,使输出级为开漏输出电路。,单片机I/O端口结构及工作原理,1、作为输出口 此时输出级是开漏状态,所以要外接上拉电阻。1)输出0“0”在写锁存器信号作用下,输出到Q,Q输出 “1”,使V2导通,在
42、引脚上输出0(低电平)。2)输出1“1”在写锁存器信号作用下,输出到Q,Q输出 “0”,使V2截至,在引脚上输出1(高电平)。,2、作为输入口 作为输入口使用时,V2必须截至,外信号才能加到引脚上。当向锁存器写入“1”时,V2截止,在做输入操作之前先向锁存器写入“1”,引脚上的信号在“读引脚”信号作用下读入单片机内部。 3、读修改写 “读修改写”操作是对I/O的逻辑运算操作,该类指令操作时,CPU时序使“读锁存器”信号有效,将锁存器的状态读入单片机内部,与指令中的操作数进行逻辑运算,再将运算结果写入锁存器,在引脚上输出。P0口的负载能力:8个LSTTL门电路。,二、P1口,作为I/O使用时:和
43、P0口有类似的功能。与P0口的区别:1、P1口内部有上拉电阻,在作为输出口使用时不需接上拉电阻。2、P1口的驱动能力是4个LSTTL门电路。,三、P2口,1、作为地址使用时:CPU有关指令执行产生的时序信号使这时的“控制”为1,电子开关接通A端,“地址”信号与后面的电路接通。 2、作为I/O口使用时:P2口性能与P1口相同。,四、P3口,1、作为I/O口使用时,P3口的性能与P1口相同。2、P3口的第二功能。1)第二功能输出需向该位的锁存器写入“1”,使与非门的输出只受“第二功能输出”控制,第二功能输出信号通过与非门和输出级电路到该位的引脚上; 2)P3口的某位作为第二功能输入使用时,该位的锁
44、存器和“第二功能输出”端会自行置“1”,V截止,该位引脚上的信号通过缓冲器送入“第二功能输入”,P3口的第二功能:P3.0RXD:串行口输入端;P3.1TXD:串行口输出端;P3.2INT0:外部中断0中断请求信号输入端;P3.3INT1:外部中断1中断请求信号输入端;P3.4T0:定时/计数器0外部信号输入端;P3.5T1:定时/计数器1外部信号输入端;P3.6WR:外RAM写选通信号输出端;P3.7RD:外RAM读选通信号输出端;,五、I/O口的操作,I/O口的操作指令 :内部RAM操作指令。 操作的方式有两种:8位整体操作和位操作。以P1口为例 输出操作: MOV P1,#55H ;将5
45、5H立即数从P1口输出 MOV P1,A ;将累加器A中的内容从P1口输出 SETB P1.0 ;在P1.0引脚输出高电平 CLR P1.1 ;在P1.1引脚输出低电平,输入操作:MOV P1,#0FFH ;向P1口的8位锁存器都写入“1” MOV A,P1;将P1口8个引脚上的信号送入累加器AMOV P1,#0FFH ;向P1口的8位锁存器都写入“1” MOV R0,P1 ;将P1口8个引脚上的信号送入R0中SETB P1.0 ;向P1.0的锁存器写入“1” MOV C,P1.0 ;将P1.0引脚的信号读到Cy中,I/O口小结: 1、作为输出口使用,P0口需外接上拉电阻,其余口不需外接上拉电
46、阻。 2、作为输入口使用时,都需先向对应的锁存器写入“1”。 3、每一位可任意地作为输入口或输出口使用,一般用低电平驱动外部电路。 4、P0口每位的负载能力是8个LSTTL门电路,P1、P2、P3口每位负载能力为4个LSTTL门电路。 5、I/O口的输入/输出指令同内RAM操作指令。,小结: 1、P0口:地址低8位与数据线分时使用端口, 2、P1口:按位可编址的输入输出端口, 3、P2口:地址高8位输出口 4、P3口:双功能口。若不用第二功能,也可作通用I / O 口。 5、按三总线划分:,地址线:P0低八位地址,P2高八位地址; 数据线:P0输入输出8位数据; 控制线:P3口的8位加上/PS
47、EN、ALE共同完成控制。,时钟的基本概念 启动单片机后,指令执行顺序:,CPU时序,ALE,每个状态周期含两个振荡周期,即相位P1、P2。 振荡周期:由振荡时钟产生。振荡周期Tosc = 1/fosc一个机器周期 = 12个振荡周期 = 121/fosc 。例如,若fosc = 12MHz,则一个机器周期 = 1s。,状态周期:一个机器周期分6个状态周期Si,教材P24:分析下列程序的运行结果,MOV 20H,#0FH ;(20H) = 0FH = 00001111B CLR C ;C=0 MOV 00H, C ;(20H) = 00001110B CPL 01H ;(20H) = 00001100B CLR 02H ;(20H) = 00001000B SETB 07H ;(20H) = 10001000B 程序段运行结果: (20H) = 88H,