2.2 MCS-51存贮器组织
2.2.1 MCS-51存储器的配置
64K程序存储器空间:0000H~0FFFFH
128/256字节内部RAM空间:00H~0FFH
8051系列:00H~07FH (128字节)
8052系列:00H~0FFH (256字节)
128字节内部特殊功能寄存器空间:80H~0FFH
64K外部数据存储器空间:0000H~0FFFFH
位寻址空间:00H~0FFH。
00H~7FH位于内部 RAM 20H~2FH中
80H~0FFH位于内部特殊功能寄存器空间80H~0FFH中
图2.2.1-1为8051(8052)存储器分配示意图。
图2.2.1-1 8051(8052)存储器分配示意图
2.2.2 程序存储器
从图2.2.1可以看出引脚EA=1时执行单片机内部的程序存储器;引脚EA=0时执行单片机外接的程序存储器。此时程序地址指针为PC(16位),首先由P0口提供PC低8位(PCL),ALE提供PC低8位(PCL)锁存信号(供外接锁存器锁存PCL)。P2口提供PC高8位(PCH)。PSEN提供读信号,8位程序代码由P0口读入单片机。操作流程如图2.2.2-1所示。
图2.2.2-1 操作流程如
2.2.3 外部数据存储器空间
外部数据指针为DPTR,首先由P0口提供DPTR低8位(DPL),ALE提供PC低8位(DPL)锁存信号(供外接锁存器锁存DPL)。P2口提供DPTR高8位(DPH)。 提供读信号, 提供读信号,8位数据由P0口读入单片机。操作流程如图2.2.3-1所示
图2.2.3-1 操作流程图
2.2.4 8051单片机外接程序、数据存储器的典型应用
图2.2.4-1是一个8051单片机外接16K程序存储器及32K数据存储器的原理框图。其中程序存储器采用27128,数据存储器采用62256。由于只有一片程序存储器和一片数据存储器,故未考虑片选问题。如果有多片程序或数据存储器时,就需要利用高8位地址进行译码产生片选信号,用于选择多片程序或数据存储器中的一个芯片,如果没有片选信号会造成数据总线上的混乱。
图2.2.4-1 8051单片机外接16K程序存储器及32K数据存储器的原理框图
2.2.5 内部数据存储器空间
8051单片机内部RAM的地址从00H~7FH,8052单片机内部RAM的地址从00H~FFH。从图2.2.1-1可以看出内部RAM与内部特殊功能寄存器SFR都有80H~FFH相同的地址。内部RAM的访问(读写)与内部特殊功能寄存器SFR的访问(读写)是通过不同的寻址方式来实现的。直接寻址为内部RAM,间接寻址为内部特殊功能寄存器SFR。以直接寻址和间接寻址方式访问00H~7FH都是访问内部RAM。如图2.2.5-1所示
图2.2.5-1 内部RAM的访问方式
内部RAM可以分为00H~1FH、20H~2FH、30H~7FH(8052为0FFH)三个功能各异的数据存储器空间。单片机的内部RAM空间为256个8位存储单元,但内部RAM的实际大小与单片机的型号及生产厂家和型号有关。首先还是通过下表看一下这三个数据存储器空间的基本功能。
表2.2.5-1
地址范围 数量 功能 备注
00H~1FH 32个单元 四个工作区(R0,R1,R2,R3,R4,R5,R6,R7)
20H~2FH 16个单元 每一个单元的8位均可以位寻址及操作,即对16×8共128位中的任何一位均可以单独置1或清0
30H~7FH 80个单元 一般的存储单元。可以做数据存储或堆栈区 8052为30H~0FFH
00H~1FH(四个工作区)
这32个存储单元以8个存储单元为一组分成4个工作区。每个区有8个寄存器R0、R1、R2、R3、R4、R5、R6、R7与8个存储单元一一对应。寄存器与RAM地址的对应关系如下表所示
表2.2.5-2
工作区 0 工作区 1 工作区 2 工作区 3
地址 寄存器 地址 寄存器 地址 寄存器 地址 寄存器
00H R0 08H R0 10H R0 18H R0
01H R1 09H R1 11H R1 19H R1
02H R2 0AH R2 12H R2 1AH R2
03H R3 0BH R3 13H R3 1BH R3
04H R4 0CH R4 14H R4 1CH R4
05H R5 0DH R5 15H R5 1DH R5
06H R6 0EH R6 16H R6 1EH R6
07H R7 0FH R7 17H R7 1FH R7
从上表中可以看出,对于1个R0有00H、08H、10H、18H四个存储单元与之相对应;同样对于1个R5有05H、0DH、15H、1DH四个存储单元与之相对应,那么以R0为例,它在什么时候对应00H,什么时候又分别对于08H、10H、18H呢?或者说什么时候选择工作区0,什么时候又选择工作区1、工作区2、工作区3呢?CPU当前选择使用的工作区是由程序状态字PSW中的第三位RS0和第四位RS1确定的,RS1、RS0可通过程序置1或清0,以达到选择不同工作区的目的具体的对应关系如图2.2.5-2所示。
图2.2.5-2 工作寄存器的选择
工作区中的每一个内部RAM都有一个字节地址,为什么还要R0、R1、R2、R3、R4、R5、R6、R7来表示呢?这主要量为了进一步提高MCS-51系列单片机现场保护和现场恢复的速度,这对于提高单片机CPU的工作效率和响应中断的速度的非常有用的。如果在实际应用中不需要四个工作区,没有用到的工作区仍然可以作为一般的数据存储器使用。8051这个特点等学习了指令系统和中断系统后就会进一步理解工作区的作用。
20H~2FH(可以位寻址)
内部RAM20H~2FH这16个单元字节是可以位寻址和位操作的。16个字节共128位(16×8)每一位有一个位地址,这128位占用位地址空间00H~7FH(0~127),内部RAM位寻址区20H~2FH的字节地址与位地址的对应关系如表2.2.5-3所示,对内部RAM20H~2FH这16个字节,既可以与一般的存储器一样按字节操作,也可以对16个单元中8位中的某一位进行位操作,这样极大地方便了面向控制的开关量处理。
表2.2.5-3
字节
地址 位地址
D7 D6 D5 D4 D3 D2 D1 D0
20H 07H 06H 05H 04H 03H 02H 01H 00H
21H 0FH 0EH 0DH 0CH 0BH 0AH 09H 08H
22H 17H 16H 15H 14H 13H 12H 11H 10H
23H 1FH 1EH 1DH 1CH 1BH 1AH 11H 18H
24H 27H 26H 25H 24H 23H 22H 21H 20H
25H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H
26H 37H 36H 35H 34H 33H 32H 31H 30H
27H 3FH 3EH 3DH 3CH 3BH 3AH 39H 38H
28H 47H 46H 45H 44H 43H 42H 41H 40H
29H 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H
2AH 57H 56H 55H 54H 53H 52H 51H 50H
2BH 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H
2CH 67H 66H 65H 64H 63H 62H 61H 60H
2DH 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H
2EH 77H 76H 75H 74H 73H 72H 71H 70H
2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H
30H~7FH(一般存储器)
30H~7FH为一般的数据存储单元。MCS-51单片机的堆栈区一般设在这个范围内,堆栈的作用是子程序调用或保护中断现场的特殊数据存储区。它存放数据的原则是先进后出(后进先出),存放数据的位置由一个称为堆栈指针的SP寄存器来确定。MCS-51单片机在每进行一次压栈操作后SP自动加1,每进行一次弹栈操作后SP自动减1,因此MCS-51单片机的堆栈是一个顶部固定向下延伸的数据区。通常情况下将堆栈区设在30H~7FH范围内。复位后SP的初值为07H,可在初始化程序时设定SP来具体确定堆栈区的范围。有关堆栈的操作可详见指令系统和中断系统的相关内容。
2.3 MCS-51单片机特殊功能寄存器
2.3.1 特殊功能寄存器空间
8051 把 CPU 中的专用寄存器、并行端口锁存器、串行口与定时器/计数器内的控制寄存器集中安排到一个区域,离散地分布在地址从 80H 到 FFH 范围内,这个区域称为特殊功能寄存器(SFR)区。特殊功能寄存器区的SFR只能通过直接寻址的方式进行访问,特殊功能寄存器字节地址分配情况如表2.2.5-4所示。
表2.2.5-4
符号 地址 名称 符号 地址 名称
P0 80H P0口锁存器 SBUF 99H 串行口锁存器
SP 81H 堆栈指针 P2 A0H P2口锁存器
DPL 82H 数据地址指针(低8位) IE A8H 中断允许控制寄存器
DPH 83H 数据地址指针(高8位) P3 B0H P3口锁存器
PCON 87H 电源控制寄存器 IP B8H 中断优先级控制寄存器
TCON 88H 定时器/计数器控制寄存器 T2CON* C8H 定时器2状态控制寄存器
TMOD 89A 定时器/计数器方式控制寄存器 RCAP2L* CAH 定时器/计数器2低8位缓冲器
TL0 8AH 定时器/计数器0(低8位) RCAP2H* CBH 定时器/计数器2高8位缓冲器
TL1 8BH 定时器/计数器0(高8位) TL2* CCH 定时器/计数器2(低8位)
TH0 8CH 定时器/计数器1(低8位) TH2* CDH 定时器/计数器2(高8位)
TH1 8DH 定时器/计数器1(高8位) PSW D0H 程序状态字
P1 90H P1口锁存器 ACC E0H 累加器
SCON 98H 串行口控制寄存器 B F0H B寄存器
注:表中*为8052所增加的特殊功能寄存器
2.3.2 常用有特殊功能寄存器
ACC
累加器。通常用A表示。它是一个实现各种寻址及运算的寄存器,而不是一个仅做加法的寄存器,在MCS-51指令系统中所有算术运算、逻辑运算几乎都要使用它。而对程序存储器和外部数据存储器的访问只能通过它进行。
PSW
程序状态存储器。亦称程序状态字,它是用来表示程序运行的状态。如当前ACC累加器中数据的奇偶性(P)、做加减法时的进位与借位(CY)、四个工作区的选择(RS1、RS0)以及辅助进位(AC)和溢出标志位(OV)等。它是编程时特殊需要关注的一个寄存器。
B
通用寄存器。由于做乘除运算时要使用它,它亦是一个有一点特殊功能的寄存器。
DPTR(DPL和DPH)
数据指针。DPH为DPTR的高8位,DPL为DPTR的低8位。访问外部数据存储器和程序存储器时,必须以DPTR为数据指针通过ACC进行访问。
SP
堆栈指针。进栈时SP加1,出栈时SP减1。
P0、P1、P2、P3
端口锁存器。前面已经介绍了MCS-51单片机有四个双向IO口P0、P1、P2、P3。如果需要从指定端口输出一个数据,只需将数据写入指定端口锁存器即可;如果需要从指定端口输入一个数据,只需先将数据0FFH(全部为1)写入指定端口锁存器,然后再读指定端口即可。如果不先写入0FFH(全部为1),读入的数据有可能不正确。
2.3.3 特殊功能寄存器的位寻址
同时某些SFR寄存器还可以位寻址,即对这些SFR寄存器8位中的任何一位进行单独的位操作。这一点与20H~2FH中的位操作是完全相同的。特殊功能寄存器中地址为8的倍数的特殊功能寄存器可以位寻址,特殊功能寄存器最低位的位地址与特殊功能寄存器的字节地址相同,次低位的位地址等于特殊功能寄存器的字节地址加1,依此类推,最高位的位地址等于特殊功能寄存器的字节地址加7。特殊功能寄存器位地址分配情况如表2.2.5-5所示。
表2.2.5-5
2.4 MCS-51单片机定时/计数器
2.4.1 定时/计数器的结构
定时/计数器是单片机极为重要的一个部件。那么什么是定时器?什么又是计数器呢?它们的区别是什么?还是首先解释一下这两个名词。
定时器:是对已知脉冲宽度的脉冲进行计数,根据计数的数量可以确定从计数开始经过的时间。计数器的长度决定了定时时间的长短 。
计数器:是对未知脉冲宽度的脉冲进行计数,根据计数的数量不能确定从计数开始经过的时间。计数器的长度决定了可以计数的多少 。
根据上面的定义已经知道了定时器和计数器的作用。在实际应用中经常是定时器和计数器同时用。这样既可以定时,如延时或对两个脉冲的间隔进行测量;也可以在设定的时间内对脉冲进行计数,如测量频率测量等。因此几乎所有的单片机中都有定时器/计数器。不同的单片机定时器/计数器的数量也不同,如8051有2个定时器/计数器,8052有3个定时器/计数器,而定时器/计数器的结构也不一定相同。图2.4.1-1为8051单片机定时器/计数器的总体结构图。
图2.4.1-1 8051单片机定时器/计数器的总体结构图
2.4.2 定时/计数器的基本模型
从图2.4.2-1可以看出,8051单片机的定时/计数器有这样几个大的部分组成。
对计数脉冲可以选择来自单片机内部振荡器或是由单片机引脚来的外部脉冲。
计数器的主体是一个加1计数器(其计数长度由程序设定。但不能超过16位)。
计数器是否计数由控制信号确定。
计数器溢出时(进位),置一个溢出标志TFx并触发中断系统产生中断。TFx可以由程序或是中断服务程序复位(清0)。
图2.4.2-1 8051单片机的定时/计数器组成
Tx:T0的引脚(P3.4)或T1的引脚(P3.5)输入。
定时:计数脉冲内部振荡器12分频后提供。
计数:对由T0的引脚(P3.4)或T1的引脚(P3.5)输入的外部脉冲进行计数。计数的最高频率为内部振荡器的1/24。
8051:具有T0、T1两个16位定时/计数器。
8052:具有T0、T1、T2三个16位定时/计数器。••
2.4.3 与定时/计数器有关的特殊功能寄存器
在MCS-51单片机中与两个16位定时/计数器有关的特殊功能寄存器有TH0、TL0、TH1、TL1、TMOD、TCON。下面分别简单加以介绍:
TH0、TL0:为定时/计数器0(T0)16位计数器的高8位和低8位。
TH1、TL1:为定时/计数器1(T1)16位计数器的高8位和低8位。
TMOD:为定时/计数器0/1的运行方式控制寄存器。
TCON:为定时/计数器0/1的的状态和运行控制寄存器。
在实际应用时如果要使用定时/计数器,应按下列步骤进行编程:
①设定定时/计数器的工作方式(TMOD)。
②给计数器设定所需的初值(TH0、TL0、TH1、TL1)
③启动计数器开始计数(TCON)
④开放定时/计数器中断(如果需要的话)
下面详细介绍一下器运行方式控制寄存器TMOD和定时/计数器控制寄存器TCON。
定时/计数器方式寄存器TMOD
定时/计数器方式寄存器TMOD 的地址为89H,其各位的意义如图2.4.3-1:
图2.4.3-1 定时/计数器方式寄存器
M1和M0为工作方式选择。
M1 M0 工作方式
0 0 方式0 13位计数器;
0 1 方式1 16位计数器;
0 0 方式2 可自动重新装入初值的8位计数器;
0 1 方式3 将定时器0分为两个8位计数器。关闭定时器1,定时器做串行口时钟。
C/ :定时/计数选择。1为定时,计数脉冲由内部振荡器12分频后提供。0为计数,对由T0的引脚(P3.4)或T1的引脚(P3.5)输入的外部脉冲进行计数。计数的最高频率为内部振荡器的1/24。
GATE:门控位。确定控制信号由TRx位还是由 引脚控制。
定时器0有0、1、2、3共四4种工作方式,定时器1只有0、1、2共三种工作方式。
定时控制寄存器TCON
定时/计数器控制寄存器TCON的地址为88H(可位寻址),其各位的意义如图2.4.3-2:
图2.4.3-2 定时/计数器控制寄存器
TF1/TF0:定时器1/0溢出中断标志位。由硬件置位,当转向中断服务程序时由硬件清0,也可以由软件清0。
TR1/TR0:定时器1/0运行控制位。1为计数,0为停止。
IE1/IE0: 外部中断1/0请求标志位。中断时由硬件置位,当转向中断服务程序时由硬件清0,也可以由软件清0。(具体用法详见中断系统)
IT1/IT0:外部中断触发方式控制位。IT1/IT0=1时为下降沿触发中断;IT1/IT0=0时为低电平沿触发中断。(具体用法详见中断系统)
2.4.4 定时/计数器的工作方式
通过上面对定时/计数器方式控制寄存器TMOD的介绍,已经知道定时/计数器T0有0、1、2、3共四种工作方式,定时器/计数器1只有0、1、2共三种工作方式。下面以T0为例对定时/计数器的四种工作方式定时/计数器结构及控制详细进行说明。
1、 方式 0
当M1M0为00时定时/计数器工作于方式0。13位计数器。定时/计数器方式0的结构框图(以T0为例)如图2.4.4-1所示:
图2.4.4-1 定时/计数器方式0的结构框图
从上图可看出,计数器的长度为13位二进制加法计数器,而且是由TL0的低5位与TH0的高8位组成,进位信号由TL0的第5位向TH0的最低位进位。计数脉冲由C/ 位确定。当C/ =0时对振荡器12分频后的脉冲进行计数,此时为定时方式;当C/ =1时对来处P3.4引脚的脉冲进行计数,此时为计数方式。计数的控制由一个简单的逻辑电路来完成,可以由软件或是硬件来控制。当X点为1时计数器的运行由TR0来控制,此时要求GATE必须为0,才可以保证X点恒为1,GATE的设置在初始化TMOD时完成。如果需要由引脚P3.2来控制计数器的运行,必须先设定GTAE=1及TR0=1,此时Y=P3.2,计数器的运行完全由P3.2来控制。下面通过一个简单的例子说明如何初始化定时/计数器。
例:若单片机的振荡器振荡频率fosc=12MHz,需要用定时/计数器T0工作在方式0定时500μs,如何初始化T0相关的特殊功能寄存器?
解:
设计数频率为fc
则fc=fosc/12MHz=1MHz
设计数脉冲的周期为Tc,
则Tc=1/fc=1μs
设定时/计数器的初值为N,
则有500μs =(213-N)Tc
故 N=213-500μs/ Tc=8192-500=7692
将N=7692转换成二进制数
N=(1111000001100)2=(11110000,01100)2
TL0=N的低5位=01100B(二进制)=0CH(十六进制)
TH0=N的高8位=11110000B(二进制)=0F0H(十六进制)
计算定时/计数器的初值N及TH0、TL0后可按下列步骤编程:
图2.4.4-2 T0初始化程序流程
2、 方式 1
当M1M0为01时定时/计数器工作于方式0。16位计数器。定时/计数器方式0的结构框图(以T0为例)如图2.4.4-3所示。除了为16位计数器外其它与方式0完全一致,但可定时计数的范围更大。一般编程时都采用方式1,这主要是其预置初值容易计算。可直接10进制数转换成四位十六进制数即可。
图2.4.4-3 定时/计数器方式0的结构框图
3、 方式 2
当M1M0为10时定时/计数器工作于方式2。定时/计数器方式2的结构框图(以T0为例)如图2.4.4-4所示。方式2是可以当计数器溢出时自动重新赋初值的8位定时/计数器,从下图可以看出将TL0作为计数器,而将TH0作为存放初值的寄存器,这样当计数器溢出使TF0置1时,由硬件将保存在TH0中的初值自动赋给TL0,这样大大减少了让程序查询计数器的溢出所等待的时间。其控制信号及计数脉冲的选择与方式0、方式1完全相同。不过就是计数器只有8位,而不是十六位。如果在实际应用中需要更长的定时,解决办法有两个:1、采用方式2的8位自动重新装入初值加上软件计数发;2、选用8052单片机,因为它的定时/计数器2有16位自动重新装入初值的工作方式。方式2常用于定时控制。例如希望每隔500μs产生一个定时控制脉冲,若采用6MHz的振荡器,使TL0=06H,TH0=06H,C/ =0就能实现,方式2还经常用作串行口波特率发生器。所以当单片机用于控制和通信时,常将T1设定为方式2作串行口波特率发生器,而T0工作在其它方式,用于定时或计数。
图2.4.4-4 定时/计数器方式2的结构框图
4、 方式 3
当M1M0为11时定时/计数器工作于方式3。仅定时/计数器0有此工作方式,当T0工作在方式3时,TH0和TL0成为两个独立的8位计数器。使8051具有三个定时器/计数器(增加了一个附加的8位定时器/计数器),定时/计数器方式3的结构框图如图2.4.4-5所示。可以看出T0使用TL0作为8位计数器,使用了T0本身的控制信号、T0的溢出标志TF0及T0自己的中断请。TH0作为另一个8位计数器,其计数脉冲只能是振荡器的12分频脉冲,控制信号为T1的控制位TR1,而溢出标志及中断请求用的是T1的。通常,当T1用作串行口波特率发生器时,T0才定义为方式3,以增加一个8位计数器。
如果将定时/计数器1设定为方式3,定时/计数器1将停止计数。当T0设定为方式3时,T1可工作在方式0、1、2,同时计数脉冲也可由C/T来选择,只是其运行控制由方式来控制,而不是TR1,因为TR1被TH0占用。即T1设定工作方式0、1、2后自动开始运行,其溢出也不会置位TF1,同样TF1也被TH0占用,其溢出只能作为串行口波特率发生器。
图2.4.4-5 定时/计数器方式3的结构框图
2.4.5 定时/计数器2
8052等单片机增加了一个16位定时/计数器T2,T2和T0、T1的作用相同,可以用于定时和对外部事件计数。且计数器的主体都是加1计数器(有些单片机如80C51FA/FB等即可以加1,也可以减1)。其T0、T1的工作原理和使用方法与8051完全一致。下面只介绍一下8052的定时/计数器T2的工作原理和使用方法。
T2的特殊功能寄存器
8052单片机与T2有关的特殊功能寄存器有以下5个:TH2、TL2、RCAP2H、RCAP2L及T2CON。T2有三种工作方式:捕捉方式、常数自动再装入方式和串行口波特率发生器方式。TH2、TL2组成16位计数器,RCAP2H、RCAP2L组成16位缓冲寄存器。在捕捉方式时,当外部输入T2EX(P1.1)发生负跳变(下降沿)时,将TH2、TL2的当前计数值锁存到RCAP2H、RCAP2L中。在常数自动再装入方式时,RCAP2H、RCAP2L作为TH2、TL2(16位计数器)的时间初值存放的缓冲寄存器,当计数器溢出时,将RCAP2H、RCAP2L作为初值自动装入TH2、TL2(16位计数器)。
T2CON为T2的状态控制寄存器,其格式如下:
定时/计数器T2的工作方式、运行及计数脉冲选择由T2CON来控制,
定时器2工作方式选择如表2.4.5-1所示。
表2.4.5-1
RCLK+TCLK CP/
TR2 模式
0 0 1 16 位自动重装载
0 1 1 16 位捕获
1 X 1 波特率发生器
X X 0 关闭
TF2: T2CON.7
定时器2溢出标志。T2工作于捕捉方式及常数自动再装入方式,T2溢出时置位TF2,必须由软件清0,当RCLK或TCLK 1即T2作为串行口波特率发生器时,TF2 将不会置1。
EXF2: T2CON.6
定时器2外部中断标志。当EXEN2=1时,当T2EX(P1.1)发生的负跳变时置1。CPU响应中断转向T2中断入口(002B)时,并不清0EXF2,必须用软件0。
RCLK: T2CON.5
串行口的接收时钟选择标志。
RCLK =1时:定时器2 的溢出脉冲作为串行口模式1和模式3的接收时钟;
RCLK=0时:将定时器1的溢出脉冲作为串行口模式1和模式3的接收时钟。
TCLK: T2CON.4
串行口的发送时钟选择标志。
TCLK =1时:定时器2 的溢出脉冲作为串行口模式1和模式3的发送时钟;
TCLK=0时:将定时器1的溢出脉冲作为串行口模式1和模式3的发送时钟。
EXEN2: T2CON.3
定时器2 外部使能标志,当其置位且定时器2 未作为串行口波特率发生器时,允许T2EX(P1.1)的负跳变产生捕捉,将TH2、TL2的当前计数值锁存到RCAP2H、RCAP2L中,或者是重新自动装入,将RCAP2H、RCAP2L作为初值自动装入TH2、TL2(16位计数器)。EXEN2=0时T2EX(P1.1)的跳变对定时器2无效
TR2: T2CON.2
T2的计数控制位。TR2=1时,允许计数;TR2=1时,停止计数。
C/ : T2CON.1
定时器/计数器选择位
0: 对内部振荡器fosc/12脉冲进行计数
1: 来自引脚P1.0(T2)的脉冲进行计数
CP/ :T2CON.0
捕捉/重新自动装入选择位。
1:工作于捕捉方式
0:工作于重新自动装入方式
当RCLK或TCLK为1时,该位无效且T2总量工作于常数自动再装入方式
常数自动再装入方式
T2的16位常数自动再装入方式的工作原理图如图2.4.5-1所示,这种方式的计数脉冲可以由C/ 位来选择对是振荡器12分频后的脉冲进行计数,还是对来自外部引脚T2(P1.0)的脉冲进行计数(负跳变时T2加1)。
图2.4.5-1 T2的16位常数自动再装入方式的工作原理图
TR2置1后T2从初值开始计数,计数器溢出时,将RCAP2H、RCAP2L作为初值自动装入TH2、TL2,使T2从该初值开始重新加1,同时置位TF2,向CPU申请中断。若T2中断开放,则转入中断服务程序。不开T2中断时也可以由软件来查询TF2,确定T2是否溢出。
当EXEN2为1时从原理图中可以看出,当T2EX(P1.1)有负跳变时,一方面将RCAP2H、RCAP2L作为初值自动装入TH2、TL2,同时置位EXF2向CPU申请中断,EXF2和TF2都使用T2的中断,至于是TF2中断还是EXF2中断需由软件来判断。
T2的16位常数自动再装入方式是一种精度非常高的定时/计数工作方式。计数器由程序初始化后其时间常数初值存入RCAP2H、RCAP2L,每当计数器溢出时自动重新装入初值,而不需人工干预。减轻了由程序软件查询的额外负担。
16捕捉方式
T2的16位捕捉方式工作原理图如图2.4.5-2所示,其在计数脉冲的选择上与16位常数自动再装入方式相同,由C/ 位来选择对是振荡器12分频后的脉冲进行计数,还是对来自外部引脚T2(P1.0) 的脉冲进行计数(负跳变时T2加1)。TR2置1后T2从初值开始计数,当计数器溢出时置位TF2。
图2.4.5-2 T2的16位捕捉方式工作原理图
当EXEN2=1且T2EXT2EX(P1.1)有负跳变时,将当时TH2、TL2中的计数值锁存到RCAP2H、RCAP2L中,同时置位EXF2,向CPU申请中断。
这种工作方式主要用于测量外部事件发生的时间。如两个脉冲的时间间隔、信号的周期等。如果没有捕捉工作方式,也可以用软件先检测端口上信号是否发生变化,如变化再查询当前的时间,软件工作量之大是不能想像的。
串行口波特率发生器方式
当RCLK或TCLK为1时,T2为串行口波特率发生器。由RCLK、TCLK位确定是接收时钟或发送时钟。TR2控制波特率发生器的运行。T2为串行口波特率发生器时工作于常数自动再装入方式,即RCAP2H、RCAP2L作为时间常数缓冲器。详细应用见有关串行口部分。
2.4.6 定时/计数器的应用
定时/计数器的核心是加1计数器。其工作特点有以下几个:
根据工作方式的不同长度有8位、13位及16位。
有些工作方式当计数溢出时可自动重新赋时间初值。
其计数脉冲是可以选择内部振荡器或外部引脚。
计数器的长度为N,其计数的最大值为2N。
计数器的长度为N,时间初值为a,其定时的最长时间为:(12÷fosc)×(2N-a)
在实际应用中可以根据需要将某个定时/计数器设为定时方式;某个定时/计数器设为计数方式;如有通信需要还可以将某个定时/计数器设为串行口波特率发生器。例如在测量频率时,可将T0设为1ms的定时器,将T1设为对被测脉冲的计数器,测量1ms内在T1中的计数值。并按:被测频率=T1中的计数值×1000÷1ms 进行计算。
总之,在理解其工作原理的基础上,定时/计数器在单片机设计和编程中的应用是非常方便和有效。
- 作者:ziqintian | 发布:2013年10月26日
- 分类:IT类别
- 标签:单片机,存储空间详尽解析,可惜,找不到图片
- 转载文章请注明:单片机的存储空间详尽解析(可惜找不到图片) | 太极博弈原理官方站|紫欽天|融通百科为我所用|生活全智慧|生活智慧之书
文章是怎么写出来的?
好吧,我承认我想多了
大师受教了,缘来如此。。。
...也许网络安全产业以后会是
此法确实可靠吗?
hello!,I like y
I was suggested
Thanks , I've j