1.CPU时序
振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。比如开发板的时钟电路上的12MHZ晶振,它就提供了单片机的振荡周期。周期T=1/12M,单位为秒。
状态周期:
两个振荡周期为1个状态周期,用S表示。振荡周期又称为S周期或时钟周期。
机器周期:6个状态周期,即12个振荡周期。以12MHZ晶振为例,机器周期=12*(1/12M)=1/M=1us.
指令周期:完成一条指令所占用的全部时间,以机器周期为单位。以12MHZ为例,指令周期为1~4us.
2.定时器绪论
51单片机有2组定时器/计数器,既可以定时又可以计数。
定时器/计数器和单片机的CPU是相互独立的,定时器/计数器工作时不需要CPU参与。
51单片机的定时器/计数器是根据机器内部的时钟或外部脉冲信号,对寄存器中的数据加1.
意义:减轻CPU的负担(提高单片机效率),也实现精确定时
3.定时器/计数器的工作原理
实际上是一个加1计数器,
随着计数器的输入脉冲自加1,每来一个脉冲数,计数器就自动加1,加到计数器为全1的时候,在输入一个脉冲就会使计数器归0,这个计数器的溢出会使相应的中断标志位置1,向CPU发出中断请求(前提是设置了定时/计数器的中断允许位。
计数器的溢出值-计数器初值=计数值
4.定时器的硬件结构
定时/计数器的实质是加1计数器(16位:2字节)
由高8位THx和低8位TLx两个寄存器组成
51有2个定时/计数器
所以,
定时器0对应TH0和TL0
定时器1对应TH1和TL1
通过配置TMOD来配置定时/计数器的工作方式–定时还是计数
通过配置TCON控制寄存器,控制T0和T1的启动、停止、溢出标志
5.累加 的过程
比如,对于计数器0,先累加低8位TL0,加到0xFF后,
开始累加TH0
当TH0也累加满了,
则溢出,
TF0则会置1
.。。。。。。。。
6.TMOD是一个8位的寄存器(1个字节)
用于设置工作方式
低4位用于控制T0
高4位用于T1
第7位:GATE门控位
GATE=0,软件使TR0或TR1为1,就可以启动定时/计数器
GATE=1,TR0或TR1为1,外部中断引脚INT0/1也为高电平,可启动定时/计数
第6位:C/T,
为0,定时模式
为1,计数模式
M1和M0
控制定时/计数器的4种工作方式
00 方式0 13位定时/计数器–-对T0而言,只是用了TL0的低5位和TH0的8位,TL0低5位溢出时,向TH0进位,TH0溢出时,将TCON中的TF0置1,向CPU发出中断申请,初值=2的13次幂-计数个数
01 方式1 16位定时/计数器—初值=2的16次幂-计数个数
10 方式2 8位自动重装定时/计数器—计算频率,串口通信–只要低8位装载满,就自动清0,重新计数,初值=2的8次幂-计数个数,用作精确的计算
11 方式3 T0分成2个独立的8位定时/计数器;T1停止计数—
方式0和方式3很少使用
7.TCON
通过配置TCON控制寄存器,控制T0和T1的启动、停止、溢出标志
高4位控制定时器/计数器的启动和中断申请
TF1:T1溢出中断请求标志位,计数器1:T1溢出,硬件自动将TF1置1,CPU响应中断后,TF1由硬件清0.
所以TF1可以作为标志位,查看查看有没有溢出
而且TF1也可以用软件置1/0
TR1是T1的运行控制位
TR1置1,则T1工作
置0,T1停止工作
TR1由软件置1或置0
所以用软件可控制T1的运行或停止
TF0是T0溢出中断请求标志位
TR0是T0运行控制位
8.如何使用定时器
(1)对TMOD赋值,确定T0 T1工作方式:定时器模式/计数模式
(2)计算初值,将其写进THx和TLx
(3)对EA赋值,开放定时器中断
(4)使TR1或TR0置位,启动定时器(一般这样配置GATE=0,软件使TR0或TR1为1)
如图
打开定时器0,配置TMOD低4位
D3:GATE
D2:C/T
D1:M1
D0:M0
GATE=0
则TR0=1
配置为定时模式,则C/T=0
选择M1M0=01的16位定时器模式
即TMOD=0x01
再设置初值,溢出后硬件会配置TF0
还要记得配置中断
EA=1
ET0=1
TMOD|=0X01;//使用TMOD的低4位:定时器0模式; C/T=0定时模式 GATE=0软件使TR0为1就行了 M0M1=01:工作方式1,初值计算为2的16次幂减计数个数,仅用TR0打开启动。
TH0=0XFC;//装载初值
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
定时器控制led的代码
```c
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit led=P2^0; //定义P20口是led
void Timer0Init()
{
TMOD|=0X01;//使用TMOD的低4位:定时器0模式; C/T=0定时模式 GATE=0软件使TR0为1就行了 M0M1=01:工作方式1,初值计算为2的16次幂减计数个数,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms 65536-1000=64536,即FC18H,TH0=0XFC,
TL0=0X18; //TL0=0X18
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main()
{
Timer0Init(); //定时器0初始化
while(1);
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
i++;
if(i==1000)//小灯间隔1s闪烁,1s=1000ms,即定时器的寄存器溢出1000次
{
i=0;
led=~led;
}
}
这里在中断服务函数中重新装载初值,是因为方式一只计数、定时
不会向方式2那样自动重装
不要忘了打开定时器的中断允许位ET0或ET1,以及总中断
上一篇:单片机之晶振篇
下一篇:51单片机串口通信--SCON方式1
推荐阅读最新更新时间:2024-11-12 20:08
设计资源 培训 开发板 精华推荐
- AM2DM-0512DH60-NZ ±12 Vout、2W 双路输出 DC-DC 转换器的典型应用
- 使用 Analog Devices 的 LT3468ES5 的参考设计
- LTC3440 的典型应用 - 微功率同步降压-升压型 DC/DC 转换器
- 光敏传感器(原理图+程序+芯片资料)
- VM800B35A-PL,基于支持3.3/5V MCU转接板的FT800基本开发模块,3.5英寸TFT LCD显示屏和珍珠边框外壳
- 使用 NXP Semiconductors 的 ISP1505 的参考设计
- AT89s51 测试电容容量
- 【训练营】机械狗学习项目
- OP495GPZ单电源仪表放大器的典型应用
- NCP715SQT2GEVB:LDO 稳压器,超低静态电流,SC−70 封装,评估板