老外的计时程序 什么是单片机的中断处理?单片机的定时器中断
时间:2017-04-07 08:33 来源:未知 作者:admin 点击:次
老外一般是不用定时器的,如遇到计时,他们是这么写的,先建立个100MS脉冲,程序如下: A "m_pulse_100ms" //If flag set from last cycle R "m_pulse_100ms" // -> reset flag L "mw_100ms_pulse" //Load stored time value L #OB1_PREV_CYCLE //and add last cycle time +I T "mw_100ms_pulse" L 100 <I //Value smaller than 100ms? JC l040 //yes -> go ahead -I //no -> store difference to 100ms T "mw_100ms_pulse" //as new initial value SET S "m_pulse_100ms" 比如要计时3S,先用传送指令 L 30 T MW100,然后每100MS减1,当MW100=0时,计时时间到。 什么是单片机的中断处理?单片机的定时器中断 什么是单片机的中断处理?总的来说中断是单片机具有处理内外随机发生事件的能力,具体来说的话就是单片机在处理某一任务时,可以暂停这一任务的处理,转而去处理更重要的任务,等这一任务处理完后再接着之前的任务,可以说是单片机最重要的特征。举个例子,小明在家里做作业,这个时候有人敲门,此时小明停止写作业起身去开门。这个例子中“有人敲门”就是外部的一个激励事件,小明停止写作业就是对这一外部激励事件的响应,小明开门迎接朋友之后继续做作业,那么这就是一个完整的中断了。 中断的优先级 继续以小明这个例子,同样的小明在做作业,而且边上有热水壶在烧开水,这个时候有人在敲门,此时小明起身去开门;当小明快走到门口的时候,热水壶的水烧开了发出提醒的蜂鸣声,这个时候小明有两个选择,一是不管热水壶的蜂鸣声,继续去开门;而是先关掉热水壶的电源再去开门。这里就涉及到热水烧开和有人敲门两个事件中哪件更重要,越重要的优先级越高。这就看有人敲门和热水烧开在小明心中的重要性了。回到单片机,我们就可以设置中断激励事件的优先级。本系列采用的是AT89C52单片机,该单片机有6个中断源,这里我们做一个表格。大家先有这么一个概念,这一节只会用到定时器0的中断实现LED等闪烁,其他的如外部中断在用到的时候再去了解。
小明的例子中大家应该认识了什么是单片机的中断以及中断有优先级这一属性,还有一点提醒下,就是我们要用到某一中断源时,除了开启该中断源,还必须得设置全局中断允许位EA。说白了就是小明在做作业的时候首先得允许其他事件的发生,否则的话小明就会一直在做作业直到完成而不管外界发生的任何事情,这一点是很好理解的。 中断允许寄存器IE用来设定各个中断源的开启和关闭,该寄存器可以位寻址,即对该寄存器的某一位进行单独操作,单片机复位时IE全部清零,也就是关闭中断。
EA是全局中断允许位,ET2是定时器2中断允许位,ES是串行口中断允许位,ET1是定时器1中断允许位,EX1是外部中断1允许位,ET0是定时器0中断允许位,EX0是外部中断0允许位,都是置1时开启,清0时关闭。 单片机的定时器中断 单片机的定时器本质上是加1计数器,由高8位和低8位两个寄存器组成。TMOD寄存器是定时器的工作方式寄存器,确定工作方式和功能;TCON寄存器是控制寄存器,控制T0和T1的启动、停止及溢出标志。工作于定时器模式时,加1操作是对内部机器周期计数(1个机器周期等于12个时钟周期,1个时钟周期等于晶振的倒数)。当定时器中断允许时,高8位和低8位构成的寄存器加满至全1时,再来一个加1操作就清空,此时TCON寄存器中的TF0或TF1溢出标志位置1,单片机产生定时器中断激励。
TMOD用来设置定时器的工作方式,不能位寻址,单片机复位时TMOD全部被清零。 其中GATE位是门控制位: GATE = 0,定时器启动与停止仅受TCON寄存器中TRX(X=0或1)来控制; GATE = 1,定时器启动与停止由TCON寄存器中TRX(X=0或1)和外部中断引脚INT0或INT1上的电平状态(电平状态为高电平时有效)来共同控制。 C/T位是定时器/计数器模式选择位: C/T = 1时为计数器模式;C/T = 0时为定时器模式。 M1和M0是工作方式选择位,每个定时器有4种工作方式,由M1和M0组合设定,如下表所示。
定时器控制寄存器TCON可以位寻址,用来设置定时器中断的启动、停止和溢出等,单片机复位时清零。
TF1:定时器1溢出标志位。 当定时器1计满溢出时由硬件置1,并且申请进入中断,进入中断服务程序后由硬件自动清0,也就是说用定时器中断时该位完全不用人为操作,我们的任务就是写好中断服务程序。 TR1:定时器1运行控制位,置1时有效。 TF0和TR0则对应定时器0,含义和操作同TF1和TR1。 (责任编辑:admin) |