单片机:定时器0和1中断(内含硬件内容详解+软件编程)(ps:此处硬件执行结构间的理解是重中之重)

简介: 单片机:定时器0和1中断(内含硬件内容详解+软件编程)(ps:此处硬件执行结构间的理解是重中之重)

b2a02c3a42a34007b9081fde585b385f.png

fd51eb649e00496b8dfec19fc18e5707.png

T=1/f,若f=12MHz,

则振荡周期T=1/12us,

状态周期T=2*(1/6)us;

机器周期T=12*(1/12)=1us

指令周期T=1~4us

精确的延时函数,用定时器完成


f15ca7a5c2464b2cb0bb11b17ebf3fb3.png


默认介绍T0-T1, T2不做介绍,内容基本相同


实质是+1计算。有16位=高8位+低8位


每次有脉冲时,自动+1,当全部+1时,溢出,此时完成定时/计数功能


定时时间/计数次数计算=溢出计数值-初值(如65536-10)


T0引脚连接P3.4管脚


T1引脚连接P3.5管脚


TMOD寄存器工作方式寄存器;控制选择是定时器功能还是计数器功能


TCON寄存器低4位用于控制外部中断相关位,高4位控制定时器控制位,包括启动,停止,溢出


b4941937dc794c0ba129444e7ed364a9.png


7-4位,高4位,管理T1:


GATE:门控位,为0时,软件控制TR0=1,TR1=1(常用)


为1时,软件控制TR0=1,TR1=1并且INTO=1,INT1=1


C/T:选择位,C为计数,T为定时,T=0时,低电平有效,为定时模式,T=1时,为计数模式


M0,M1为工作方式的设置:00 01 10 11多使用01和10(01是定时寄存器工作,10是串口通信波特率的生成)


3-0位,低4位,管理T0:


df957d49955c4646944aadfe103a0fb7.png


TF1/TF0:查询定时器是否溢出(也可通过软件置1或清0)

TR1:为1时,定时器开始工作;为0时,定时器停止工作,通过软件配置


14b36a8235f14812b88983ad36bad5cb.png

TMOD的0X00方式0的00,13位,若5位均为11111,则向前8位置1,若前8位也满,则溢出给TF0,


TFO为溢出标志位,溢出,发送信号给计数器


图右侧:


GATE=0时,经过非门为1,(与INTO引脚的)或门为1,当TRO为1时,经过与门,进入中断开关,使之置为1。


GATE=1时,经过非门为0,(与INTO引脚的)或门为1(INT0为1时),当TRO为1时,经过与门,进入中断开关,使之置为1。


GATE=1时,经过非门为0,(与INTO引脚的)或门为0(INT0为0时),进入中断开关,使之置为0。


C/T:工作模式选择


当T=0时,计数模式,中断开关连接1,TO引脚连接外部引脚P3.4管脚,并传输外部脉冲


当T=1时,计数模式,中断开关连接0,机器周期,一次就是1us..达到技术目的


计数初值与计数个数:2的13次方-N


(用于定时计算器)


b55548e0a6d54bc5bf81a25e47b945e4.png


TM0D的0X01方式1的01,16位,低八位计数满了,向高八位溢出,高八位计数满了则溢出给TF0,给CPU中断...

计数初值与计数个数:2的16次方-N

(用于波特率)


4917e22329ce4b14aea66de85db115bd.png


TMOD的0X02方式2的10,TLO全为11111111时,溢出给THO,THO再次归还给TLO,自动重置

适用于精确脉冲信号发生器,如串口通信uart

计数初值与计数个数:2的8次方-N


d7062b7bde9447dabede471fb2a57240.png


TMOD的0X03方式3的11,仅适用于T0


89bdb4f5f3fd4e6fa620cfa0744d1a33.png


计算初值1ms


如默认为f=12MHz时,机器的T=1/f=1us


则1ms/1us=1000,65536-1000=64536,并将其写入TL0,TH0或TH1,TH1中,FC18


TL0=0xFC TL1=0x18


若计算值过大时,则可以用工具里面的定时器计算工具


理解此图需要与上图尤其是方式1.2紧密结合着理解,较简单,不再赘述。


b009adbd77984c49a20b8a54ab926b85.png

TMOD=0x01,0x0代表选择T0,1代表0001,0001的0代表GATA=0,C/T=0,M1=0,M0=1.此时完成对T0/T1的确定


TH0=0XFC;TL0=0X18是赋初值,将1ms=FC18,FC18给TH0和TL0


打开ET0或ET1,(定时器0中断允许位或定时器1中断允许位)+EA(总中断)


打开定时器1或定时器2


若T0换为T1时,需要TMOD|=0X10;TH1=0XFC;TL1=0X18L;ET1=1;EA=1;TR1=1......


注:用单片机板子显示出来时,需要用D1=P2.0


994ec10d01cf40a181dc20f519ae22bd.png


#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LED1=P2^0;
void time0_init(void)//定时器中断0
{
    TMOD|=0X01;//选择为定时器0模式,工作方式1
    TH0=0XFC;//给定时器赋初值,定时1ms
    TL0=0X18;
    ET0=1;//打开定时器0中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器
}
void time1_init(void)
{
    TMOD|=0X10;//选择为定时器0模式,工作方式1
    TH1=0XFC;    //给定时器赋初值,定时1ms
    TL1=0X18;    
    ET1=1;//打开定时器1中断允许
    EA=1;//打开总中断
    TR1=1;//打开定时器        
}
void main(void)
{
    time0_init();//定时器0中断配置
    time1_init();//定时器1中断配置
    while(1)
    {
    }
}
void time0() interrupt 1 //定时器0中断函数
{
    static u16 i;//定义静态变量i
    TH0=0XFC;    //给定时器赋初值,定时1ms
    TL0=0X18;
    i++;
    if(i==1000)
    {
        i=0;
        LED1=!LED1;    
    }                        
}
void time1() interrupt 3 //定时器1中断函数
{
    static u16 i;//定义静态变量i
    TH1=0XFC;    //给定时器赋初值,定时1ms
    TL1=0X18;
    i++;
    if(i==1000)
    {
        i=0;
        LED1=!LED1;    
    }                        
}

a9a6eefb51bb4227a8ce9183a69262ee.png



相关文章
|
4天前
|
开发框架 .NET 网络性能优化
MCS-51单片机的基本结构
MCS-51单片机的基本结构
29 1
|
8月前
第二章:单片机硬件结构
第二章:单片机硬件结构
77 0
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P6】(第六章:10题速过定时计数器的结构和工作方式例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P6】(第六章:10题速过定时计数器的结构和工作方式例题)经典例题盘点(带图解析)
|
5天前
|
存储 监控 芯片
单片机的扩展结构
单片机的扩展结构
16 2
【51单片机】一文带你利用【Keil软件的模板功能】【自定义模板】简化操作(带图详解)
【51单片机】一文带你利用【Keil软件的模板功能】【自定义模板】简化操作(带图详解)
|
5天前
|
IDE 开发工具 C++
【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
|
5天前
|
C++ 内存技术
【期末不挂科-单片机考前速过系列P8】(第八章:21题速过AT89S51单片机的内部硬件结构)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P8】(第八章:21题速过AT89S51单片机的内部硬件结构)经典例题盘点(带图解析)
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
5天前
|
传感器
单片机定时器中断
单片机定时器中断