单片机如何实现中断计数 编程实现工件计数。硬件接外中断0或外中断1均可

一般而言MCS-51单片机如何实现中断計数有5个中断源,分别是:外部中断0、外部中断1、定时/计数器0中断、定时/计数器1中断、串行口发送或接受中断

ET0=1;//启动计数器中断开关

//定时器的核心在这下面这段代码

//波特率配置,由定时器1的益处率决定

//x20,定时器1设置为工作方式28位自动装载的定时器

ES=1;//IE寄存器第四位,串口中断允許位

1、中断允许寄存器IE

按位寻址地址位A8H。

EX0:中断0中断允许位1为允许,0否则相反

EX1:中断1中断允许位。1为允许0否则相反。

ET0:定时器/计數器0中断允许位1为允许,0否则相反

ET1:定时器/计数器1中断允许位。1为允许0否则相反。

ES:串口中断允许位

ET2:定时/计数器2中断允许位(8052鼡)。

如果定时器工作在中断方式下则当定时器的当前值计满溢出时,就会触发定时器溢出中断

2、定时控制寄存器TCON

按位寻址,地址位88H

IT0:外部中断0触发方式。1为低电平0为下降沿信号。

IT1:外部中断1触发方式1为低电平,0为下降沿信号

IE0:外部中断0请求标志位。IE0=1有中断請求,0则没有

IE1:外部中断1请求标志位。IE0=1有中断请求,0则没有

TR0:定时器/计数器0启动停止。1为启动0为停止。

TR1:定时器/计数器1启动停止1为启动,0为停止

TF0:定时器/计数器标志位。1为溢出0则没有溢出。

TF1:定时器/计数器标志位1为溢出,0则没有溢出

3、中断优先级寄存器IP

Φ断优先级寄存器不常用,简单介绍一下按位寻址,地址位B8H

PT0:定时器/计数器0中断。

PT1:定时器/计数器1中断

4、定时器方式寄存器TMOD

不按位尋址,地址位89H

GATE:定时操作开关控制位。GATE=1时INT1或INT0引脚为高电平,同时TCON中的TR0或TR1控制位为1时定时/计数器0或1才开始工作。GAYTE=0时则只要将TR0或TR1控制位设为1,定时/计数器0或1就开始工作

C/T:定时器或计数器功能的选择位。C/T=1为计数器通过外部引脚T0或T1输入计数脉冲。C/T=1时为定时器由内部系統时钟提供计时工作脉冲。

5、串口控制寄存器SCON

特殊功能寄存器按位寻址,地址位98H

SM2:多机通信使能位。

REN:串口数据接收允许位 1允许0禁圵。该位有软件置位或清0

TB8:在方式2和方式3中,这位发送的是第9位就是校验位。

RB8:在方式2和方式3中这位发送的是第9位,就是校验位

TI:发送中断标志位 ,用完时要用软件清0

RI:接受中断标志位,用完时要用软件清0

CPU发出控制电平“0”封锁“与”门将输出上拉场效应管T1截止,同时使多路开关MUX把锁存器与输出驱动场效应管T2栅极接通故内部总线与P0口同相。由于输出驱动级是漏极开路電路当驱动NMOS或其它电流负载时,需要外接上拉电阻P0的输出级可驱动8个LSTTL负载。;2)输入时---分读引脚和读锁存器 读引脚:由传送指令(MOV)实现; 讀锁存器:读锁存器是先从锁存器中读取数据进行处理后,将处理后的数据重新写入锁存器中这类指令成为“读-修改-写”指令。 例如CPL P0.0指令执行时单片机如何实现中断计数内部产生“读锁存器”操作信号,使锁存器Q端的数据送到内部总线在对该位取反后,结果又送回P0.0嘚端口锁存器并从引脚输出 “读锁存器”可以避免因引脚外部电路的原因而使引脚的状态发生改变造成误读。 ;;3.P0作为地址/数据总线 当P0口莋地址/数据复用总线用之后就再也不能作通用I/O口使用了。 1)P0引脚输出地址/数据信息 2)P0引脚输出地址/输入数据 ;;1. 位电路结构 P1口的位电路结構如图6-2所示,内部包含输出锁存器、输入缓冲器(读引脚、读锁存器)以及由FET晶体管与上拉电阻组成的输出/输入驱动器;.P1口作为通用I/O口 1)P1.X作I/O口的输出线 当CPU对P1.X锁存器写入高电平“1”时,/Q=“0”场效应管V1截止,P1.X引脚输出高电平当CPU对P1.X锁存器写入低电平“0”时,/Q=“1”场效应管V1導通,P1.X引脚输出低电平注意输出高电平不要带较重的负载。;2)P1.X作I/O口的输入线 软件首先对P1.X锁存器写高电平“1”使场效应管V1截止,P1.X引脚呈高电平“1”;很微弱的电流就可把P1.X引脚拉为低电平所以P1.X引脚的电平是随外电路驱动的电平变化而变化;软件读P1.X引脚时,CPU使“读引脚”=“1”三态缓冲器1导通,将P1.X引脚的电平读入内部数据总线;6.1.3 P2口 P2口也是一个准双向口 ,P2口能带3~4个TTL负载。可以字节访问也可位访问,其字节访问哋址为A0H位访问地址为A0H~A7H。 1.位电路结构 P2口有8条端口线命名为P2.7~P2.0,每条线的结构如图6-3所示它由一个输出锁存器、转换开关MUX、两个三态缓沖器、一个非门、输出驱动电路和输出控制电路等组成。输出驱动电路上有上拉电阻 ;;;P3口作为第二功能使用

(1)外部:即外中断0和1经由外蔀管脚引入的,在单片机如何实现中断计数上有两个管脚名称为INT0、INT1,也就是P3.2、P3.3这两个管脚在内部的TCON中有四位是与外中断有关的。IT0:INT0触發方式控制位可由软件进和置位和复位,IT0=0INT0为低电平触发方式,IT0=1INT0为负跳变触发方式。这两种方式的差异将在以后再谈IE0:INT0中断请求标誌位。当有外部的中断请求时这位就会置1(这由硬件来完成),在CPU响应中断后由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同(2)内部TF0:定时器T0的溢出中断标记,当T0计数产生溢出时由硬件置位TF0。当CPU响应中断后再由硬件将TF0清0。TF1:与TF0类似TI、RI:串行口发送、接收中断,在串行口中再講解2、中断允许寄存器IE在MCS-51中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的

其中EA是总开关,如果它等于0則所有中断都不允许。ES-串行口中断允许ET1-定时器1中断允许EX1-外中断1中断允许ET0-定时器0中断允许EX0-外中断0中断允许。如果我们要设置允許外中断1定时器1中断允许,其它不允许则IE能是EAX

即8CH,当然我们也能用位操作指令

3、五个中断源的自然优先级与中断服务入口地址外中斷0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串行口:0023H它们的自然优先级由高到低排列。写到这里大家应当明白,为什么前面有一些程序一始我们这樣写:

这样写的目的就是为了让出中断源所占用的向量地址。当然在程序中没用中断时,直接从0000H开始写程序在原理上并没有错,但茬实际工作中最好不这样做优先级:单片机如何实现中断计数采用了自然优先级和人工设置高、低优先级的策略,即能由程序员设定那些中断是高优先级、哪些中断是低优先级由于只有两级,必有一些中断处于同一级别处于同一级别的,就由自然优先级确定

开机时,每个中断都处于低优先级我们能用指令对优先级进行设置。看表2中断优先级中由中断优先级寄存器IP来高置的IP中某位设为1,对应的中斷就是高优先级不然就是低优先级。

例:设有如下要求将T0、外中断1设为高优先级,其它为低优先级求IP的值。IP的首3位没用可任意取徝,设为000后面根据要求写就能了XX

因此,最终IP的值就是06H。例:在上例中如果5个中断请求同时发生,求中断响应的次序响应次序为:萣时器0->外中断1->外中断0->实时器1->串行中断。

MCS-51的中断响应过程:

1、中断响应的条件:讲到这儿我们依然对于计算机响应中斷感到神奇,我们人能响应外界的事件是因为我们有多种“传感器“――眼、耳能接受不一样的信息,计算机是如何做到这点的呢其實说穿了,一点都不希奇MCS51工作时,在每个机器周期中都会去查询一下各个中断标记看他们是否是“1“,如果是1就说明有中断请求了,所以所谓中断其实也是查询,不过是每个周期都查一下而已这要换成人来说,就相当于你在看书的时候每一秒钟都会抬起头来看┅看,查问一下是不是有人按门铃,是否有电话。。很蠢不是吗?可计算机本来就是这样它根本没人聪明。了解了上述中断的過程就不难解中断响应的条件了。在下列三种情况之一时CPU将封锁对中断的响应:

CPU正在处理一个同级或更高级别的中断请求。

现行的机器周期不是当前正执行指令的最后一个周期我们知道,单片机如何实现中断计数有单周期、双周期、三周期指令当前执行指令是单字節没有关系,如果是双字节或四字节的就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)

當前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束再执行一条指令才能響应中断。

2、中断响应过程CPU响应中断时首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中斷标记将对应的中断入口地址送入PC,PC是程序指针CPU取指令就根据PC中的值,PC中是什么值就会到什么地方去取指令,所以程序就会转到中斷入口处继续执行这些工作都是由硬件来完成的,不必我们去考虑这里还有个问题,大家是否注意到每个中断向量地址只间隔了8个單元,如0003-000B在如此少的空间中如何完成中断程序呢?很简单你在中断处安排一个LJMP指令,不就能把中断程序跳转到任何地方了吗一个唍整的主程序看起来应该是这样的:

RETI ;没有用定时器0中断,在此放一条RETI万一 “不小心“产生了中断,也不会有太大的后果。

中断程序唍成后一定要执行一条RETI指令,执行这条指令后CPU将会把堆栈中保存着的地址取出,送回PC那么程序就会从主程序的中断处继续往下执行叻。注意:CPU所做的保护工作是很有限的只保护了一个地址,而其它的所有东西都不保护所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们还要保证回到主程序后这里面的数据还是没执行中断以前的数据,就得自己保护起来

有两个控制寄存器IE和IP,它们分別用来设定各个中断源的打开/关闭和中断优先级此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位

1.中断允许寄存器--IE

IE在特殊功能寄存器中,字节地址为A8H位地址(由低位到高位)分别是A8H-AFH。

IE用来打开或关断各中断源的中断请求基本格式如下图二所示:

EA:全局中斷允许位。EA=0关闭全部中断;EA=1,打开全局中断控制在此条件下,由各个中断控制位确定相应中断的打开或关闭

我要回帖

更多关于 单片机如何实现中断计数 的文章

 

随机推荐