异步串行通信文档(2)

2019-03-27 18:49

1.2定时器/计数器

1.2.1定时器/计数器简介

定时器/计数器(Timer/Counter,以下简称T/C)是单片机中最基本的接口之一,它的用途非常广泛,常用于计数、延时、测量周期、频率、脉宽、提供定时脉冲信号等。在实际应用中,对于转速、位移、速度、流量等物理量的测量,通常也是由传感器转换成脉冲电信号,使用T/C来测量其周期或频率,再经过计算处理获得。

8051系列单片机至少有两个16位内部定时器/计数器(T/C,Timer/Counter),提供了3个定时器,其中两个基本定时器/计数器分别是定时器/计数器0(T/C0)和定时器/计数器1(T/C1),另外一个是定时器/计数器2(T/C2)。它们既可以编程为定时器使用,也可以编程为计数器使用。若是计数内部晶振驱动时钟,则它是定时器;若是计数输入引脚的脉冲信号,则它是计数器。 1.2.2定时器/计数器寄存器 1) 定时器的定义与配置 ? 计数寄存器TH和TL

T/C是16位的,计数寄存器由TH高8位和TL低8位构成。在特殊功能寄存器(SFR)中,对应T/C0为TH0和TL0;对应T/C1为TH1和TL1。定时器/计数器的初始值通过TH1/TH0和TL1/TL0设置。

? 定时器/计数器控制寄存器TCON

表1-1 TCON控制位 D7 TF1 D6 TR1 D5 TF0 D4 TR0 D3 IE1 D2 IT1 D1 IE0 D0 IT0 TR0、TR1:T/C0、T/C1启动控制位 TR0、TR1=1:启动计数 TR0、TR1=0:停止计数 ? T/C的方式控制寄存器TMOD

表1-2 TMOD控制位

D7 GATE D6 C/T T/C1 C/T:计数器或定时器选择位 C/T=1:设置为计数器 C/T=0:设置为定时器 GATE:门控信号

GATE=1:T/C的启动受到双重控制,即要求TR0/TR1和INT0/INT1同时为高 `

3

D5 M1 D4 M0 D3 GATE D2 C/T T/C0 D1 M1 D0 M0

GATE=0:T/C的启动仅受TR0或者TR1控制 M1 和 M0:工作方式选择位

表1-3 工作方式选择位 M1 0 0 1 1 M0 0 1 0 1 功能 13 位定时器/计数器,TL 存低 5 位,TH 存高 8 位 16 位定时器/计数器 常数自动装入的 8 位定时器/计数器 仅适用于 T/C0,两个 8 位定时器/计数器 2) 定时器/计数器的初始化

在使用8051系列单片机的T/C前,首先要对TMOD和TCON寄存器进行初始化,同时还必须计算定时的时间(重点)。

(1) 确定T/C的工作方式:配置TMOD寄存器。 (2) 计算T/C的计数初值,并赋值给TH和TL。

(3) 若T/C以中断方式工作时,必须配置IE寄存器内ET0与ET1的值。 (4) 启动T/C。 1.2.3定时器/计数器工作方式

定时器/计数器0和定时器/计数器1都可以在方式0、方式1、方式2工作,而方式3只有前者才能工作。 1) 方式 0

当TMOD中M1、M0都为0时,T/C工作在方式0。

方式0为13位的T/C,由TH提供高8位,TL提供低5位,注意TL的高3位是无效的,计数溢出值为2的13次方=8192,启动该计数器需要设置好计数初值。

当C/T该位为0时,T/C为定时器,振荡源12分频的信号作为计数脉冲;当C/T该位为1时,T/C为计数器,对外部脉冲输入端的T0或T1引脚进行脉冲计数。

计数脉冲能否加到计数器上,受启动信号的控制。当GATE=0时,只要TR=1,则T/C启动;当GATE=1时,启动信号受到TR与INT的双重控制。

T/C启动后立即加1计数,当13位计数满时,TH向高位进位。此进位将中断溢出标志TF置位即TF=1,产生中断请求,表示定时时间或计数次数到达。若T/C开中断(ET=1)且CPU开中断(EA=1),则当CPU自动转向中断服务函数时,TF自动清零,不需要人工软件清零。 2) 方式 1

当TMOD中M1、M0为0、1时,T/C工作在方式1。

方式1与方式0基本相同,唯一不同的是方式0是13位计数方式,方式1是16位计数方式,TH和TL都同时提供8位(方式0时TL只提供低5位,高3位无效),计数溢出值为2的16次方=65536。 `

4

3) 方式 2

当TMOD中M1、M0为1、0时,T/C工作在方式2。

方式2是8位的可自动重装载的T/C,满计数值为2的8次方=256。在方式0和方式1中,当计数满后,若要进行下一次定时/计数,必须通过软件向TH和TL重新装载预置计数值。方式2中TH和TL被当作两个8位计数器。技术过程中,TH寄存8位初值并保持不变,由TL进行8位计数。计数溢出时,除产生溢出中断请求外,还自动将TH中初值重装到TL,即重装载。除此之外,方式2也同方式0。 4) 方式 3

方式3只适合于T/C0。当T/C0工作在方式3时,TH0和TL0成为两个独立的计数器。这时,TL0可作定时器/计数器,占用T/C0在TCON和TMOD寄存器中的控制位和标志位;而TH0只能作定时器使用,占用T/C1的资源TR1和TF1。在这种情况下,T/C1仍可用于方式0/1/2,但不能够使用中断方式。

只有将T/C1用作串行口的波特率方式器时,T/C0才工作在方式3,以便增加一个定时器。

1.3单片机中断

1.3.1中断源

8051系列单片机支持的5个中断源分别为外部中断0、定时器/计数器0中断、外部中断1、定时器/计数器1中断和串口中断,8052单片机,比8051系列单片机增加了定时器/计数器2中断,基于标准Intel 8052的STC89C52RC单片机同样支持定时器/计数器2中断,更增加了外部中断2和外部中断3的支持,如下表6-5-1,虽然STC89C52RC单片机增加了2个外部中断源,但是对于PDIP-40封装STC89C52RC单片机没有引出引脚,如果条件允许的话当然最好使用PLCC-44、LQFP-44、PQFP-44封装的多出了P4口,其中两个引脚含有第二功能即提供外部中断2、外部中断3的支持。

表1-4 中断源与中断号

中断源 外部中断 0 定时器/计数器 0 中断 外部中断 1 定时器/计数器 1 中断 串口中断 定时器/计数器 2 中断(仅 8052) 外部中断 2(STC89C52RC 单片机) 外部中断 3(STC89C52RC 单片机) `

5

中断号 0 1 2 3 4 5 6 7

平时写中断服务函数的中断源与中断号一定要一一对应起来,否则不能正确地进入中断服务函数,例如:

void Timer0IRQ(void) interrupt 1

在8051系列单片机的中断系统有多个中断请求触发器,并实现显示当前中断请求,显示的方式是用标志位来显示,并锁存在特殊功能寄存器TCON和SCON。当某一个中断被触发时,同时为了了解哪一个中断源产生了中断请求,我们可以通过查询特殊功能寄存器TCON和SCON的相应的位锁存。 1) 定时器控制寄存器 TCON D7 TF1 D6 TR1 D5 TF0 D4 TR0 D3 IE1 D2 IT1 D1 IE0 D0 IT0 从定时器控制寄存器可以知道,关于外部中断相关的内容也放到定时器控制寄存器当中,有点像“大杂烩”,不过从资源控制的角度来讲,这是没有办法的事情。TCON的D7~D4位是与定时器/计数器相关联的,总共占用率了4个bit(位),那么剩余4个bit(位)不加以利用就会做成浪费,那么用来摆放外部中断相关的内容也是合情合理的。

? TF0、TF1:定时器/计数器0、1溢出中断标志位。当定时器/计数器0、1计数

溢出时,有硬件置位,即TF0/TF1=1;当CPU相应中断时,由硬件清除,即TF0/TF1=0;。

? IE0、IE1:外部中断0、1请求标志位。

当外部中断0、1依据触发方式满足条件产生中断请求时,由硬件置位,即IE0/IE1=1;当CPU响应中断时,由硬件清除IE0/IE1=0; ? IT0/IT1:外部中断触发方式选择位,由软件设置。

IT0/IT1=1:下降沿的触发方式; IT0/IT1=0:低电平的触发方式; 2) 串行口控制寄存器 SCON

表1-5 SCON控制位

D7 SM0 D6 SM1 D5 SM2 D4 REN D3 TB8 D2 RB8 D1 TI D0 RI ? RI:串行口接收中断请求标志位

当串行口接收完一个字节的数据后请求中断,由硬件置位,即 RI=1 注意:RI 必须软件清除,即 RI=0 ? TI:串行口发送中断请求标志位

当串行口发送完一个字节的数据后请求中断,由硬件置位,即 TI=1。 注意:TI 必须软件清除,即 TI=0。 `

6

1.3.2中断控制

中断的控制主要实现中断的开关管理和中断优先级的管理。这个管理主要通过对特殊功能寄存器IE和IP的编程实现。 1) 中断允许控制寄存器( IE)

表1-6 IE控制位

D7 EA D6 -- D5 ET2 D4 ES D3 ET1 D2 EX1 D1 ET0 D0 EX0 ? CPU 开/关全局中断控制位

EA=1:CPU 开全局中断 EA=0:CPU 关全局中断

? ET0、ET1、ET2:定时器/计数器中断允许位

ET0/ET1/ET2=1:T/C0、1、2 中断允许 ET0/ET1/ET2=0:T/C0、1、2 中断禁止 ? ES:串行口中断允许位

ES=1:串行口中断允许 ES=0:串行口中断禁止

? EX0、EX1:外部中断 0、1 的中断允许位

EX0、EX1=1:外部中断 0、1 中断允许 EX0、EX1=0:外部中断 0、1 中断禁止 1.3.3中断服务函数

中断服务函数:当有中断请求时,程序运行转移到标记有“interrupt”关键字的函数内进行相关中断的处理。

Keil开发环境中,中断请求的处理过程是以函数的方式来实现的,即中断服务函数,它的格式如下:

void 函数名(void) interrupt 中断号 using 工作组 {

中断服务函数内容; } 例如:

void Timer0IRQ(void) interrupt 1 using 0//中断服务函数 {

TH0=(65536-50000)/256; //计数寄存器高

TL0=(65536-50000)%6; P2=1<

`

8

位重新载入

//计数寄存器低 8 位重新载入

//进入位移操作,熄灭相对应位的 LED

7


异步串行通信文档(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国保时捷汽车行业发展研究报告 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: