51单片机中断定时器1用法

一.中断概念

中断为使单片机具有对内部或外部随机发生的事件实时处理而设置的。

二.中断作用

中断技术不仅解决了快速主机与I/O设备的数据传送问题,而且还有具有如下的优点:

1. 分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率。
2. 实时操作:CPU能够及时处理应用系统的随机事件,系统的实时性大大增强。
3. 可靠性高:CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性更高。
 

三.中断源及相关寄存器

中断优先级

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

TF0、 TF1: 是定时器中断标志(定时器0溢出标志位、定时器1溢出标志位)
TR0 、TR1: 打开相应的定时器(定时器0运行控制位,=1时启动定时器0、定时器1运行控制位,=1时启动定时器1)
由软件清0关闭定时器0/1。当GATE=1,且INIT为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器0/1。
IT0、IT1: 是外部中断的触发方式。 =0时 低电平触发,=1时负跳变触发。
IE0、IE1: 是外部中断的标志位


中断允许寄存器 IE

 EA: 总中断允许。 EA=0;CPU屏蔽所有中断的请求 EA=1;开放所有中断。
ES:串行口中断允许位。ES=0; 禁止串行中断。ES=1; 允许串口中断。
ET0、ET1: 定时器/计数器0 和 定时器/计数器 1 中断允许位。 =0时 禁止相应的定时器中断。 =1 允许相应的定时器中断。
EX0、EX1: 外部中断0 和 外部中断 1 中断允许位。=0时 禁止相应的外部中断。 =1时 允许相应的外部中断。
——:无效位
 

 中断优先寄存器 IP

PS: 串行口中断优先级 PS = 1;(高) 。PS = 0; (低)。
PT0:定时器0中断优先级 PT0 = 1;(高) PT0 = 0;(低)。
PT1:定时器1中断优先级 PT1 = 1;(高) PT1 = 0;(低)。

PX0:外部中断0中断优先级 PX0 = 1;(高) PX0 = 0;(低)。
PX1:外部中断1中断优先级 PX1 = 1;(高) PX1 = 0;(低)。
——:无效位

IP寄存器不做设置,上电复位后为00H,默认是为低优先级。
不设置默认优先级是(由高到低):
外部中断0→定时器0→外部中断1→定时器1→串口

如果我们把IP寄存器设置为:(IP = 0X10)
PS = 1;
PT1 = 0;
PX1 = 0;
PT0 = 0;
PX0 = 0;
如下表:

 那么优先级从高到低是:
串工作方式寄存器TMOD口→外部中断0→定时器0→外部中断1→定时器1

工作方式寄存器TMOD

 GATE:门控制
=0:仅有运行控制位TRx来控制定时/计数器的开启。
=1:由TRx和外部中断脉冲计数。(用于计算外部中断 负跳变 的次数)
C/T:计数器模式和定时器模式选择
=0:选择定时器模式
=1:选择计数器模式
M1、M0:选择定时/计数器的工作方式

方式0
方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

 方式1
方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成了16位加1计数器 。

方式2
方式2为自动重装初值的8位计数方式。

 方式3
方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。

定时器初值寄存器THx 和 TLx
首先先了解一下CPU时序有关知识:
振荡周期: 为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。
机器周期:1个机器周期含6个状态周期,12个振荡周期。
指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

例如:外接晶振为12MHz时,51单片机相关周期的具体值为:
振荡周期=1/12us;
状态周期=1/6us;
机器周期=1us;
指令周期=1~4us;

计数器初值的计算:
机器周期就是CPU完成一个基本操作所需要得时间。
机器周期 = 1 /单片机的时钟频率
51单片机内部时钟频率是外部时钟的12分频,也就是当外部晶振的频率输入到单片机里面
的时候要进行12分频。

比如:你用的是12MHZ的晶振,当你使用12MHZ的外部晶振的时候,
机器周期 = 1 / 1M = 1us。(选择定时器工作方式1 16位)
我们2的16次方等于65536,也就是最大值为65536(溢出)
如果定时1ms
初值就为:1ms / 1us = 1000。也就是要计数1000个数, 初值 = 65535-1000+1 = 64536,65536才会溢出。 所以初值即FC18H(十进制为64536)

如果定时50ms
50ms/1us=50000;
初值 = 65535-50000+1=15536;
定时为50ms 初值为15536 即3CB0(十六进制)

定时器/计数器中断
需要了解的知识
51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。

定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。

51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。

有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。

工作原理
实质上是加1计数器,随着输入脉冲,计数器自动加1,
溢出的时候会回0.,且计数器的溢出使相应的中断标志位 置1.
向CPU发出中断请求。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

定时器结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

操作步骤(T0 T1)
1.选择工作方式。设置M1、M0 (TMOD寄存器)
2.选择控制方式。设置GATE(TMOD寄存器)
3.选择定时器还是计数器模式。设置C/T(TMOD寄存器)
4.给定时/计数器赋初值。设置THx 和 TLx(定时器初值寄存器)
5.开启总中断。设置EA(IE寄存器)
6.打开相应定时器中断允许。 设置ET0或ET1(IE寄存器)
7.启动定时器。设置TR1或TR0(TCON寄存器)

如何配置定时器
这里就选择定时器0吧 选择方式1(16位)进行定时示例吧
1.选择工作方式1(16位)M1=0;M0=1;
2.控制方式 :仅有运行控制位TRx来控制定时/计数器的开启。GATE=0;
3.选择定时器模式 C/T=0;

TMOD=0x01;
1
4.赋初值 这里选择定时为50ms 我的板子晶振是11.0592 具体怎么算我不会,推荐跟我一样不会的用软件mcuelf计算出以下结果

 

 5.打开总中断(总开关)

6.打开T0中断开关 

 7.启动定时器0

程序示例

这里就写一个用定时器来做一个简单的时钟显示在LCD1602上
LCD1602我昨天发布了一个LCD1602的使用和显示hello word。这里就是详细讲LCD1602具体的操作了。

引脚定义

 lcd1602.h

 lcd1602.c

 main.c

 

 最终项目展示

四.定时器0的工作方式1:16位定时器

在写单片机的定时程序时,需要对定时器中及中断寄存器做初始化设置,通常定时器初始化过程如下:

1.对TMOD赋值,以确定T0和T1的工作方式。

2.计算初值,并将初值写入TH0、TL0(定时器0)或TH1、TL1(定时器1)。

你用的是12MHZ的晶振,当你使用12MHZ的外部晶振的时候,
机器周期 Tcy=12*( 1 / 12M) = 1us。

计数的个数N=t/ Tcy

(选择定时器工作方式1 16位)
我们2的16次方等于65536,也就是最大值为65536(溢出),溢出一次共需65536us
如果定时50ms = 50000,也就是要计数50000个数, 初值 = 65536-50000= 15536,65536才会溢出。 

把15536对256求模:64536/256=60装入TH0中,把15536对256求余:15536%256=176装入TL0中。

中断服务程序的写法:

中断函数格式如下:

   void 函数名 () interrupt 中断号 using 工作组    /*中断函数不能返回任何值,所以最前面用void,后面紧跟函数名,名字可以随便起,中断函数不带任何参数,所以函数名后面的括号为空;中断号是单片机中几个中断源的序号*/

      {

      中断服务程序内容

      }

例如:

   void T1_time () interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

3.中断方式时,则对中断允许寄存器IE赋值,开放中断。

中断允许寄存器 IE

 EA: 总中断允许。 EA=0;CPU屏蔽所有中断的请求 EA=1;开放所有中断。
ES:串行口中断允许位。ES=0; 禁止串行中断。ES=1; 允许串口中断。
ET0、ET1: 定时器/计数器0 和 定时器/计数器 1 中断允许位。 =0时 禁止相应的定时器中断。 =1 允许相应的定时器中断。
EX0、EX1: 外部中断0 和 外部中断 1 中断允许位。=0时 禁止相应的外部中断。 =1时 允许相应的外部中断。
——:无效位

(EA=1;开放所有中断。

ET0=1 允许相应的定时器中断。)

4.使TR0置位,启动定时器/计数器定时或计数。

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

TF0、 TF1: 是定时器中断标志(定时器0溢出标志位、定时器1溢出标志位)
TR0 、TR1: 打开相应的定时器(定时器0运行控制位,=1时启动定时器0、定时器1运行控制位,=1时启动定时器1)
由软件清0关闭定时器0/1。当GATE=1,且INIT为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器0/1。
IT0、IT1: 是外部中断的触发方式。 =0时 低电平触发,=1时负跳变触发。
IE0、IE1: 是外部中断的标志位

(TRO=1  启动定时器0)

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值