在计算机控制系统中,经常需要进行定时控制和延时,对外部事件进行计数和检测,通常采用一下三种方法来实现定时和计数:
1) 硬件法。通过搭建硬件电路完成,优点是不占用CPU时间,但要求改变定时时间时,只能通过改变电路中的元件参数来实现,缺点时很不灵活。
2) 软件法。软件定时是执行一段循环程序来进行时间延时,优点时无额外的硬件开销。缺点是牺牲了CPU的时间,且不容易得到比较精确的时间。
3) 可编程定时器/计数器。最大特点是可以通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。定时器达到定时时间或者计数满时,置位溢出标志。
89C52单片机系列有三个16位可编程定时器/计数器:0/1/2。每个定时器/计数器都可以对系统时钟进行计数,也可以对外部信号进行计数。定时器/计数器由特殊寄存器TH0/TL0、TH1/TL1、TH2/TL2组成。
注意:检测一个由1到0的跳变需要两个机器周期,故外部信号的最高计数频率为时钟频率的1/24,如果晶振频率为12Mhz,则最高计数频率为0.5Mhz.
1. 寄存器
1) 方式寄存器TMOD:用于设定T0/T1的工作模式(此寄存器不可位寻址)
GATE(门控位):=0时软件启动定时器,=1时软硬件共同启动定时器(TR寄存器=1且,INT引脚输入高电平才启动)
C/T‘(定时或计数选择位):=0时是定时方式(计数脉冲为内部脉冲),=1时是计数方式(计数脉冲由外部输入引脚提供)
M1/M0(工作模式选择位):T1不能工作在模式3,如果设置模式3就会停止工作
M1 |
M0 |
工作模式 |
功能介绍 |
0 |
0 |
模式0 |
13位 |
0 |
1 |
模式1 |
16位 |
1 |
0 |
模式2 |
8位自动重置 |
1 |
1 |
模式3 |
定时器0:TL0为8位定时器或计数器。TH0为8位定时器 定时器1: 16位 |
方式寄存器T2MOD:用于设定T2的工作模式,不可位寻址
T2OE(T2输出启动位):=1时(工作在可编程时钟输出方式),允许时钟输出至T2(P1.0)引脚。
DCEN(允许向上/下计数位):置位该位,当=0时,允许T2自动向上递增计数,=1时允许T2向下计数
2) 控制寄存器TCON:具有中断控制和定时控制两个功能 (见【STC51单片机】——[中断系统])
控制寄存器T2CON:设置T2工作模式
TF2(T2溢出标志位):必须由软件复位
EXF2(T2外部触发标志位):EXEN2=1时,如果T2EX引脚出现负跳变引起捕获或者重装,EXF2=1,向主机发出中断请求。该位必须由软件复位。
RCLK/TCLK(串行口接受/发送时钟控制位):两个不全为0时,T2为波特率发生器,T2溢出也不会将TF2置位
EXEN2(T2外部触发控制位):=0时 T2EX引脚电平变化对T2不起作用,=1时如果T2不是波特率发生器方式,则T2EX引脚产生负跳变时,将触发“捕获”或“重装”操作
TR2(启动控制位):
C/T2’(定时或计数选择位):=0时是定时方式(计数脉冲为内部脉冲),=1时是计数方式(计数脉冲由外部输入引脚提供)
CP/RL2’(捕获和重装载方式选择控制位):=1时,捕获;=0时,重装。
T2工作方式设置
RCLK、TCLK |
CP/PL2’ |
C/T2’ |
T2OE |
工作方式 |
0 |
0 |
0或1 |
0 |
16位自动重装 |
0 |
1 |
0或1 |
0 |
捕获 |
不全为0 |
x |
x |
0 |
波特率发生器 |
0 |
x |
0 |
1 |
时钟输出 |
3) 数据寄存器TH/TL:
16位的数据寄存器,是由高8位寄存器TH与低8位寄存器所组成。只能字节寻址。
2. 定时器应用
1) 定时器初始化
初始化步骤:
① 根据系统需求,设置TMOD,选择合适的工作模式(计数还是定时)启动定时器。
② 设置定时器/计数器的初值,将初值写入TH/TL数据寄存器,以及陷阱寄存器RCAP2H和RCAP2L中(T2)。
③ 如果需要中断,设置中断允许寄存器IE,对相应位进行设置。
④ 设置TCON/T2CON,启动定时器。
定时器初值的计算:根据单片机精灵等工具测算TH/TL初值(也可自己根据公式通过计算器计算)
【串口】数据通信基础知识
基本通信方法:并行;串行。异步;同步。
异步:起始位、数据位、奇偶检验位、停止位。
起始位:用来通知接受设备一个待接收的数据开始到达。线路不传输数据时应保持为1,接收端不断检测线路的状态,若在连续收到1以后,又收到一个0,就知道发来一个新数据,开始接收。
数据位:一般为8位(D0~D7),奇偶检验位(D8)只占用一位,也可以规定不用奇偶检验位。或者把D8用作地址数据帧标志(多机通信中),来确定这一帧中的数据所代表信息的性质。
停止位:用来表示一个传送字符的结束,一定是高电平,停止位可以是1位、1.5位或2位,接收端接受到停止位,就知道这一字符传送完毕。同时,也为接收下一字符做准备,只要再次接收到0,就是新的数据的起始位。存在空闲位是异步通信的特征之一。
同步:每一数据块发送开始时,先发送一个或两个同步字符,是发送与接收取得同步,然后再顺序发送数据。数据块之间取消起始位和停止位。
同步传输可以提高传输速率,但对硬件要求比较高。
波特率:串行通信中,对数据传输速度有一定要求。在一帧信息中,每一位的传送时间(位宽)是固定的,用位传送时间Td表示。Td的倒数称为波特率。
波特率表示每秒传送的位数,单位为b/s(记作波特)。
通信方向:
单工:一对传输线只允许单方向传送数据;
半双工:不允许同时在两个方向传输数据,如对讲机;
双工:允许同时传送与接收数据,如手机。
串行通信接口种类:
根据串行通信格式及约定(如同步方式、通信速率、数据块格式等)不同,形成了许多接口标准:UART、USB、I^2C、SPI、485、CAN等。