浅谈51单片机(c语言)中断以及定时器(计数器)的使用


      中断和定时器是51最为重要的部分,下面就来详细的讲一下中断以及定时器(计数器)的使用。

 首先我们先来说一下中断,很多人都会把中断和定时器混淆,这里要强调的是,中断可以采用定时器(计数器)溢出的方式进行中断,这只是中断的一种方式,我们以89C52为例,可供选取的中断源一共有五个

浅谈51单片机(c语言)中断以及定时器(计数器)的使用_第1张图片

INT0为外部中断,中断序号为0

T0为定时器(计时器)0中断,中断序号为1

INT1为外部中断,中断序号为2

T1为定时器(计时器)1中断,中断序号为3

TI /RI为串行口中断,中断序号为4

T2为定时器(计时器)2中断,中断序号为5

下面以外部中断0为例,介绍一下中断(一定要结合上图)

    EA=0;

    EX0=1;

    IT0=1;

其中EA为全局中断,控制各个中断的响应

EX0为外部中断申请

IT0为外部中断0触发方式选择位,若IT0=0,表示低电平触发;IT0=1,表示跳变沿触发

图中IE0由硬件自动置1或清0,不需人为操作

以上就是外部中断的设置



继续介绍采用定时器(计数器)中断,它的实质是一个16位加1寄存器,由高8位和低8位两个寄存器组成,它们的结构框图如下


浅谈51单片机(c语言)中断以及定时器(计数器)的使用_第2张图片


 


我们还是以继续介继续介绍采用定时器(计数器)中断,它的实质是一个16位加1寄存器,由高8位和低8位两个寄存器组成,它们的结构框图如下


我们还是以定时(计数)器0为例,TH0为高8位, TL0为低8位,具体工作方式为先累计第八位(一直到0xff),低8位清0,向高8位进1,直到高8位和低8位全记满(均为0xff),此时若再检测到一个有效脉冲,计数器就将清0,形成中断。
定时器和计数器有两个寄存器(如上图),分别为TCON(控制寄存器)和TMOD(方式选择寄存器),具体含义和操作请看结构图(这里以方式1为例)

首先图右侧为TMOD,主要选择计数的方式,高4位控制定时器1,低4位控制定时器0.
GATE为门控位
C/T为模式选择位,C/T=0为定时器模式,C/T=1为计数器模式
M1M0为工作方式选择位,每个定时器(计数器)都有4种工作方式

下面就介绍中断的申请,在此之前,还要确定定时器初值计算方法
设机器周期为T,定时器产生一次中断的时间为t,需要计数的个数N=t/T,装入TH0和TL0中的数为:TH0=(65536-N)/256 TL0=(65536-10000)%256,其中要说明的是计算机器周期需要知道单片机晶振频率。
具体代码如下
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;表示GATE为0,C/T为0,工作方式为方式1(01),具体工作流程:
GATE=0,取反变为1,经过或门电路(无论INT0为何值),最后都输出1,再经过或门电路,则需要TR0为1才能使电路导通,当定时器记满溢出则产生中断。
绍采用定时器(计数器)中断,它的实质是一个16位加1寄存器,由高8位和低8位两个寄存器组成,它们的结构框图如下


我们还是以定时(计数)器0为例,TH0为高8位, TL0为低8位,具体工作方式为先累计第八位(一直到0xff),低8位清0,向高8位进1,直到高8位和低8位全记满(均为0xff),此时若再检测到一个有效脉冲,计数器就将清0,形成中断。
定时器和计数器有两个寄存器(如上图),分别为TCON(控制寄存器)和TMOD(方式选择寄存器),具体含义和操作请看结构图(这里以方式1为例)

首先图右侧为TMOD,主要选择计数的方式,高4位控制定时器1,低4位控制定时器0.
GATE为门控位
C/T为模式选择位,C/T=0为定时器模式,C/T=1为计数器模式
M1M0为工作方式选择位,每个定时器(计数器)都有4种工作方式

下面就介绍中断的申请,在此之前,还要确定定时器初值计算方法
设机器周期为T,定时器产生一次中断的时间为t,需要计数的个数N=t/T,装入TH0和TL0中的数为:TH0=(65536-N)/256 TL0=(65536-10000)%256,其中要说明的是计算机器周期需要知道单片机晶振频率。
具体代码如下
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;表示GATE为0,C/T为0,工作方式为方式1(01),具体工作流程:
GATE=0,取反变为1,经过或门电路(无论INT0为何值),最后都输出1,再经过或门电路,则需要TR0为1才能使电路导通,当定时器记满溢出则产生中断。
定时(计数)器0为例,TH0为高8位,     TL0为低8位,具体工作方式为先累计第八位(一直到0xff),低8位清0,向高8位进1,直到高8位和低8位全记满(均为0xff),此时若再检测到一个有效脉冲,计数器就将清0,形成中断。


定时器和计数器有两个寄存器(如上图),分别为TCON(控制寄存器)和TMOD(方式选择寄存器),具体含义和操作请看结构图(这里以方式1为例)


浅谈51单片机(c语言)中断以及定时器(计数器)的使用_第3张图片


首先图右侧为TMOD,主要选择计数的方式,高4位控制定时器1,低4位控制定时器0.


GATE为门控位


C/T为模式选择位,C/T=0为定时器模式,C/T=1为计数器模式


M1M0为工作方式选择位,每个定时器(计数器)都有4种工作方式


浅谈51单片机(c语言)中断以及定时器(计数器)的使用_第4张图片


下面就介绍中断的申请,在此之前,还要确定定时器初值计算方法


设机器周期为T,定时器产生一次中断的时间为t,需要计数的个数N=t/T,装入TH0TL0中的数为:TH0=(65536-N)/256   TL0=(65536-10000)%256,其中要说明的是计算机器周期需要知道单片机晶振频率。


具体代码如下


       TMOD=0x01


       TH0=(65536-45872)/256;


       TL0=(65536-45872)%256;


EA=1;


ET0=1;


TR0=1;


TMOD=0x01;表示GATE0C/T0,工作方式为方式101),具体工作流程:


GATE=0,取反变为1,经过或门电路(无论INT0为何值),最后都输出1,再经过或门电路,则需要TR01才能使电路导通,当定时器记满溢出则产生中断。




 



你可能感兴趣的:(51单片机)