‘壹’ 单片机定时器中断功能和定时器定时功能有什么区别,什么情况需要中断,什么时候不需要呢,讲好必采纳
定时器的定时,就像你设置的闹钟,中断,就像你设置的闹钟到点自动发出声音。如果只是定时,不产生中断,就需要你编写的主程序经常去查看定时的时间到了没,而且就算查看到定时时间到了,你也不知道是什么时候到的,如果有中断,则会自动跳到中断函数执行你安排好的代码(闹钟发出声音就是安排好的,也可以是震动)。
‘贰’ 怎样使用51单片机的定时器
51单片机定时器的使用
51单片机定时器/计时器的使用
步骤:
1、 打开中断允许位:
对IE寄存器进行控制,IE寄存器各位的信息如下图所示:
EA: 为0时关所有中断;为1时开所有中断
ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开
2、 选择定时器/计时器的工作方式:
定时器TMOD格式
CPU在每个机器周期内对T0/T1检测一次,但只有在前一次检测为
1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz。
方式0:定时器/计时器按13位加1计数,这13位由TH中的高8位和TL中的低5位组成,其中TL中的高3位弃之不用(与MCS-48兼容)。
13位计数器按加1计数器计数,计满为0时能自动向CPU发出溢出中断请求,但要它再次计数,CPU必须在其中断服务程序中为它重装初值。
方式1:16位加1计数器,由TH和TL组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。
1
1/3
方式2:计数器被拆成一个8位寄存器TH和一个8位计数器TL,CPU对它们初始化时必须送相同的定时初值。当计数器启动后,TL按8位加1计数,当它计满回零时,一方面向CPU发送溢出中断请求,另一方面从TH中重新获得初值并启动计数。
方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特
3、 为计数器赋值
计数器初值计算
TC=M−C
TC:计数器初值,M:计数器模值(2k),C:把计数器计满的计数值 定时器初值计算
T=(M−TC)T计数
或
TC=M−T/𝑇计数
M:模值,T计数:单片机时钟周期TCLK(ΦCLK的倒数)的12倍;TC为定时器的定时初值,T为欲定时的时间。
TC=M−T×𝛷𝐶𝐿𝐾/12
M:模值,ΦCLK:单片机时钟周期ΦCLK;TC为定时器的定时初值,T为欲定时的时间。 例如:单片机主脉冲频率ΦCLK为12MHz,最大定时时间为: 方式0时 TMAX = 213×1us = 8.192ms 方式1时 TMAX = 216×1us = 65.536ms 方式2和方式3 TMAX = 28×1us = 0.256ms
4TR0:为0时,停T0计数;为1时,启T0计数
2
2/3
TF0:为0时,无T0中断(硬件复位);为1时,有T0溢出中断 TR1:为0时,停T1计数;为1时,启T1计数 TF1:为0时,无T1中断(硬件复位);为1时,有T1溢出中断 IE1:为0时,硬件复位;为1时 IT1:为0时,INT1电平触发(软件复位);为1时,INT1负边沿触发 IE0:为0时,硬件复位;为1时 IT0:为0时,INT0电平触发(软件复位);INT0负边沿触发
5
在C51的C语言中使用interrupt x来指定中断入口地址,x为中断号,例T0中断: void Time0_Int() interrupt 1 //定时器T0的中断入口程序
‘叁’ 51单片机中断/定时器/计数器
89C51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。
1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
IE寄存器:
中断允许控制寄存器分为两层结构,第一级结构为中断允许总控制EA,只有当EA处于中断允许状态,中断源中断请求才能够得到允许;当EA处于不允许状态时,无论IE寄存器中其他位处于什么状态,中断源中断请求都不会得到允许。第二级结构为5个中断允许控制位,分别对应5个中断源的中断请求,当对应中断允许控制位为1时,中断源中断请求得到允许。
EX0:外部中断0允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。当EX0=1( SETB EX0 )时,同时单片机P3.2引脚上出现中断信号时,单片机中断主程序的执行而“飞”往中断服务子程序,执行完后通过中断返回指令RET 动返回主程序。当EX0=0( CLR EX0)时,即使单片机P3.2引脚上出现中断信程序也不会从主程序“飞” 出去执行,因为此时单片机的CPU相当于被“堵上了耳朵”,根本接收不到P3.2引脚上的中断信号,但是这并不表示这个信号不存在。如果单片机的CPU有空查一下TCON中的IE0位,若为1就说明有中断信号出现过。
ET0:T0溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。
EX1:外部中断1允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。当EX1=1( SETB EX1)时,并且外部P3.3引脚上出现中断信号时,单片机CPU会中断主程序而去执行相应的中断服务子程序;当EX1=0( CLR EX1)时使外部P3.3引脚上即使出现中断信号,单片机的CPU也不能中断主程序转而去行中断服务子程序。 [3] 因此,可以这样认为,EX0和EX1是决定CPU能否感觉到外部引脚P3.2P3.3上的中断信号的控制位。
ET1:T1溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。
ES:串行中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。
EA:中断总允许位。EA=1,CPU开放中断;EA=0,CPU禁止所有的中断请求。总允许EA好比一个总开关。EA就相当于每家水管的总闸,如果总闸不开,各个龙头即使开了也不会有水;反过来,如果总闸开了而各个分闸没开也不会有水,所当我们想让P3.2和P3.3引脚上的信号能够中断主程序则必须将EA位设置为0(CLR EA)。
TCON寄存器:
各位的标识如下:
TF1:定时器1溢出标志位。当定时器1计满溢出时,由硬件使TF1置1,并且申请中断,进入中断服务程序,有硬件自动清0 ,在查询方式下用软件清0.
TR1:定时器运行控制位,TR1置1是开启定时器1,TR1置0时关闭定时器1.
TF0:定时器0溢出标志位。当定时器0计满溢出时,由硬件使TF0置1,并且申请中断,进入中断服务程序,有硬件自动清0 ,在查询方式下用软件清0.
TR0:定时器运行控制位,TR0置1是开启定时器0,TR0置0时关闭定时器0.
IE1:外部中断1请求标志位。
IT1:外部中断1触发方式选择位。当IT1置0时,为低电平触发;当IT1置1时,为下降沿触发。
IE0:外部中断0请求标志位。
IT0:外部中断0触发方式选择位。当IT0置0时,为低电平触发;当IT0置1时,为下降沿触发。
51单片机外部中断响应条件:
1、中断源有中断请求;
2、中断源的中断允许位为1(设置IE寄存器相关位);
3、CPU开中断(设置IE寄存器开中断,即EA=1)
CPU时序的有关知识:
振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
状态周期:2个振荡周期为1个状态周期,用S表示。
机器周期:1个机器周期含6个状态周期,12个振荡周期。
指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。
定时器的其他知识点:
1、51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。
2、定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。
3、51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。
4、有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。
与定时器/计数器有关的寄存器:
1、TMOD寄存器
2、TCON寄存器
3、IE寄存器
4、THx/TL寄存器
工作方式寄存器TMOD:
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
M1M0:工作方式设置位。定时/计数器有四种工作方式。一般我们厅方式1和方式2:
控制寄存器TCON:
TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
IE中断开关寄存器:
用于开启cpu中断和对应的中断位。
THx和TL定时/计数存储寄存器:
THx存储高8位数据,TLx存储低8位数据。
定时器/计算器初值计数公式:
计数个数与计数初值的关系为:X=2^n-N
N是需要计数的值;n与设置定时器/计数器的工作方式有关(可能为8、13、16);X是需要设置在THx和TLx的初值。
使用定时器/计算器的初始化流程:
1、对TMOD赋值,以确定T0和T1的工作方式。
2、计算初值,并将其写入TH0、TL0或TH1、TL1。
3、中断方式选择,则对EA赋值,开放定时器中断。
4、使TR0或TR1置位,启动定时/计数器定时或计数。