电子工程师提升计划-第5章 中断技术【2.1】

5.3.2 中断程序的编写方法

中断程序的编写包括主程序的编写和中断子程序的编写。
1.编写主程序
主程序的一般编写过程如下。
        ① 设置中断源和中断触发方式。根据需要确定中断的性质,通过设置定时器/计数器控制寄存器 TCON 或串行通信口控制寄存器 SCON相应位的值来选择是外部中断,还是定时器/计数器中断等;设置中断触发方式是低电平触发,还是下降沿触发。
        ② 设置中断优先顺序。根据中断紧急程度(当有多个中断源时)确定中断源的优先顺序,以此来设置中断优先级控制寄存器IP中相应位的值。
        ③ 打开中断。通过在中断允许寄存器IE中设置相应的值,打开各个中断。
2.编写中断子程序
中断子程序的编写过程如下。
        ① 关中断。进入中断后,一般先要将中断关闭,再进行现场保护,如在前面的实例中,可在“PUSH ACC”指令前加一条“CLR EA”指令,就能将总中断关闭。
        ② 保护现场。为了防止执行中断子程序的过程中改变ACC和PSW中的数据,要用“PUSH”指令将ACC和PSW中的数据送入堆栈中保护起来。
        ③ 开启中断。现场保护好后,再开启中断,如在前面实例的“PUSH PSW”指令后加一条“SETBEA”指令,就能将总中断打开。
                ④ 执行中断服务。中断服务程序是中断子程序中的核心,前面实例中的“CPL P1.2”指令就是中断服务程序。
        ⑤ 关闭中断。中断服务程序执行后又要关闭中断,以恢复现场,如在前面的实例中,可在“CPL P1.2”指令后加一条“CLR EA”指令,就能将总中断关闭。
        ⑥ 恢复现场。恢复现场的方法是用“POP”指令将堆栈中的数据送还给ACC和PSW。
        ⑦ 退出中断子程序,返回主程序。在中断子程序的最后用“RETI”指令可以退出中断子程序,返回主程序。

第6章 定时器/计数器

6.1 概述

MCS-51系列单片机内部有T0和T1两个定时器/计数器。它们既可用作定时器,也可用作计数器,可以通过编程来设定使用方法。

6.1.1 定时器

1.定时器的用法
        定时器的功能是用来确定时间。如果要求单片机在一定的时间后产生某种控制,可将定时器/计数器设为定时器。下面以图6-1所示的示意图为例来说明单片机定时器的用法。

        从图6-1中可以看出,将定时器/计数器T0设为定时器,实际上就是将定时器/计数器与外部输入断开,而与内部信号接通,对内部信号进行计数。

        单片机的时钟振荡器可产生12MHz的时钟脉冲信号,它经12分频后得到1MHz的脉冲信号, 1MHz信号每个脉冲的持续时间为1μs,如果定时器T0对1MHz的信号进行计数,当计到65536时,将需要65536μs,也即65.536ms。65.536ms后定时器计数达到最大值,会溢出而输出一个中断请求信号去中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果将P2.1端口置“0”,发光二极管发光。
2.任意定时的方法
        在图6-1 中,定时器只有在 65.536ms 后计数达到最大值时才会溢出,如果不需要到 65.536ms定时器就产生溢出,如 1ms,可以对定时器预先进行置数。将定时器初始值置为 64536,这样定时器就会从64536开始计数,当计到65536时,定时器定时就为1ms而产生一个溢出信号。

6.1.2 计数器

1.计数器的用法
计数器的功能是用来计数。下面以图6-2所示的示意图为例来说明单片机计数器的用法。

        在图中,单片机内有一个定时器/计数器 T0,可以用编程的方法将它设为计数器。当作计数器用时,它是一个16位计数器,它的最大计数值为216=65536。T0 端(与P3.4引脚共用)用来输入脉冲信号。当脉冲信号输入时,计数器就会开始对脉冲进行计数,当计到最大值65536时,计数器溢出,会输出一个中断请求信号到中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果为将P2.1端口置“0”,发光二极管导通,有电流流过而发光。
2.任意计数的方法
        在图6-2中,只有在T0端输入65536个脉冲时,计数器计数达到最大值才会溢出,如果希望输入100个脉冲时计数器就能溢出,可以在计数前对计数器预先进行置数。将计数器初始值置为65436,这样计数器就会从65436开始计数,当输入100个脉冲时,计数器的计数值就达到65536而产生一个溢出信号。

6.2 定时器/计数器的结构与工作原理

        定时器/计数器是单片机的一个重要组成部分,了解它的结构与工作原理对于开发功能强大的单片机应用系统有很大的帮助。

6.2.1 定时器/计数器的结构

        MCS-51系列单片机内部定时器/计数器的结构如图6-3所示。从图中可以看出,单片机内部与定时器/计数器有关的部件主要有以下几种。
        ① 两个定时器/计数器(T0 和T1)。每个定时器/计数器都是由两个8 位计数器构成的16 位计数器。
        ② 寄存器TCON。TCON为控制寄存器,用来控制两个定时器/计数器的启动/停止。
        ③ 寄存器TMOD。TMOD为工作方式控制寄存器,用来设置定时器/计数器的工作方式。两个定时器/计数器在内部还通过总线与CPU连接,CPU可以通过总线对它们进行控制。

6.2.2 定时器/计数器的工作原理

        由于定时器/计数器是在寄存器TCON和TMOD的控制下工作的,要让定时器/计数器工作,必须先设置寄存器TCON和TMOD(可编写程序来设置)。单片机内部有两个定时器/计数器,它们的工作原理是一样的,这里以定时器/计数器T0为例进行说明。
1.定时器/计数器T0用作计数器
要将定时器/计数器T0当作计数器使用,须设置寄存器TCON和TMOD,让它们对定时器/计数器T0进行相应的控制,然后定时器/计数器T0才开始以计数器的形式工作。
(1)寄存器TCON和TMOD的设置
寄存器TCON和TMOD的设置内容主要包括以下几项。
        ① 将寄存器TMOD的C/ 位置“1”,如图6-3所示,该位发出控制信号让开关S0置“1”,定时器/计数器T0与外部输入端T0(P3.4)接通。
        ② 设置寄存器TMOD 的M0、M1 位,让它控制定时器/计数器T0 的工作方式,如让M0=1、M1=0,可以将定时器/计数器T0设为16位计数器。
        ③ 将寄存器TCON的TR0位置“1”,启动定时器/计数器T0开始工作。
(2)定时器/计数器T0的工作过程
定时器/计数器T0的工作过程有以下两步。
        ① 计数。定时器/计数器T0启动后,开始对外部T0端(P3.4)输入的脉冲进行计数。
        ② 计数溢出,发出中断请求信号。当定时器/计数器T0计数达到最大值65536时,会溢出产生一个信号,该信号将寄存器TCON的TF0位置“1”,寄存器TCON立刻向CPU发出中断请求信号, CPU便执行中断子程序。
2.定时器/计数器T0用作定时器
要将定时器/计数器T0当作定时器使用,同样也要设置寄存器TCON和TMOD,然后定时器/计数器T0才开始以定时器形式工作。
(1)寄存器TCON和TMOD的设置
寄存器TCON和TMOD的设置内容主要包括以下几项。
        ① 将寄存器TMOD的C/ 位置“0”,如图6-3所示,该位发出控制信号让开关S0置“2”,定时器/计数器T0与内部振荡器接通。
        ② 设置寄存器TMOD 的M0、M1 位,让它控制定时器/计数器T0 的工作方式,如让M0=0、M1=0,可以将定时器/计数器T0设为13位计数器。
        ③ 将寄存器TCON的TR0位置“1”,启动定时器/计数器T0开始工作。
(2)定时器/计数器T0的工作过程
定时器/计数器T0的工作过程有以下两步。

        ① 计数。定时器/计数器 T0 启动后,开始对内部振荡器产生的信号(要经 12 分频)输入的脉冲进行计数。
        ② 计数溢出,发出中断请求信号。定时器/计数器 T0 对内部脉冲进行计数,由 0 计到最大值8192(213)时需要8.192ms的时间,8.192ms后定时器/计数器T0会溢出而产生一个信号,该信号将寄存器TCON的TF0位置“1”,寄存器TCON马上向CPU发出中断请求信号,CPU便执行中断子程序。

6.3 定时器/计数器的控制

        定时器/计数器是在寄存器TCON和TMOD的控制下工作的,设置这两个寄存器相应位的值,可以对定时器/计数器进行各种控制。

6.3.1 定时器/计数器控制寄存器TCON

        定时器/计数器控制寄存器 TCON 的功能主要是接收各种中断源送来的中断请求信号,同时也对定时器/计数器进行启动/停止控制。寄存器TCON的字节地址是88H,它有8位,每位均可进行位寻址,各位的地址和名称如下:

        定时器/计数器控制寄存器TCON中各位的功能在前面已介绍过,这里只对寄存器TCON中与定时器/计数器有关的位进行说明。
        TF0和TF1:它们分别是定时器/计数器0和定时器/计数器1的中断请求标志位。当定时器/计数器工作产生溢出时,会将TF0或TF1位置“1”,表示定时器/计数器有中断请求。
        TR0和TR1:它们分别是定时器/计数器0和定时器/计数器1的启动/停止位。在编写程序时,若将TR0或TR1设置为“1”,那么相应的定时器/计数器就开始工作;若设置为“0”,相应的定时器/计数器则会停止工作。

6.3.2 工作方式控制寄存器TMOD

        工作方式控制寄存器TMOD的功能是控制定时器/计数器T0、T1的工作方式和操作模式。工作方式控制寄存器TMOD的字节地址是89H,不可以对它进行位操作。在上电(给电路加电源)和复位时,工作方式控制寄存器TMOD中的数据为00H。工作方式控制寄存器TMOD各位的名称如下:


        在工作方式控制寄存器TMOD中,高4位用来控制定时器/计数器T1,低4位用来控制定时器/计数器T0,它们对定时器/计数器T1、T0的控制功能一样,下面以高4位控制定时器/计数器T1为例来说明各位的具体功能。
        GATE:门控位,用来控制定时器/计数器的启动模式。当GATE=0时,只要定时器/计数器控制寄存器TCON的TR1位置“1”,就可启动T1开始工作;当GATE=1时,除了需要将定时器/计数
器控制寄存器TCON的TR1位置“1”外,还要使 引脚为高电平,才能启动T1工作。
        C/ :定时、计数功能设置位。
        当C/ =0时,将定时器/计数器设置为定时器工作方式;当C/ =1时,将定时器/计数器设置为计数器工作方式。
        M1、M0 位:定时器/计数器工作方式设置位。M1、M0 位取不同值的组合,可以将定时器/计数器设置为不同的工作方式。工作方式控制寄存器 TMOD 高 4 位中的 M1、M0 用来控制定时器/计数器T1的工作方式,而低4位中的M1、M0用来控制定时器/计数器T0的工作方式。M1、M0位不同取值与定时器/计数器工作方式的关系见表6-1。表6-1 TMOD的M1、M0位不同取值与定时器/计数器工作方式的关系

6.3.3 定时器/计数器的工作方式

        在寄存器TMOD的M1、M0位的控制下,定时器/计数器可以工作在4种不同的方式下,不同的工作方式适用于不同的场合。
1.方式0
        当M1=0、M0=0时,定时器/计数器工作在方式0,它为13位计数器。
(1)定时器/计数器工作在方式0的原理
        在方式0时,定时器/计数器由TH、TL两个8位计数器组成,用作13位计数器,使用TH的8位和TL的低5位。下面以定时器/计数器T0为例来说明方式0的工作原理(要让定时器/计数器T0工作在方式0,须将TMOD的低4位中的M1、M0位均置“0”),该方式的定时器/计数器T0电路结构如图6-4所示。
        从图6-4中可以看出,当工作在方式0时,定时器/计数器T0是一个13位计数器(TH0的8位+TL0的低5位)。C/ 位通过控制开关S1来选择计数器的计数脉冲来源。当C/ =0时,计数脉冲来自单片机内部振荡器(经12分频);当C/ =1时,计数脉冲经单片机T0引脚输入。
 

(2)定时器/计数器初值的计算
        若定时器/计数器工作在方式0,当其与外部输入端连接时,可以用作13位计数器;当与内部振荡器连接时,可以用作定时器。
        ① 计数初值的计算。当定时器/计数器用作13位计数器时,它的最大计数值为8192(213),当外部引脚输入8192个脉冲时,计数器就会产生溢出而发出中断请求信号。如果希望不需要输入8192个脉冲,计数器就能产生溢出,可以给计数器预先设置数值,这个预先设置的数值称为计数初值。在方式0时,定时器/计数器的计数初值可用下式计算:


例如希望输入 1000 个脉冲,计数器就能产生溢出,计数器的计数初值应设置为 7192 (8192-1000)。
        ② 定时初值的计算。当定时器/计数器用作定时器时,它对内部振荡器产生的脉冲(经12分频)进行计数,该脉冲的频率为fosc/12,脉冲周期为12/fosc,定时器的最大定时时间为213·12/fosc,若振荡器的频率fosc为12MHz,定时器的最大定时时间为8192μs。如果不希望定时这么长,定时器就能产生溢出,可以给定时器预先设置数值,这个预先设置的数值称为定时初值。在方式0时,定时器/计数器的定时初值可用下式计算:


        例如单片机时钟振荡器的频率为12MHz(即12×106Hz),现要求定时1000μs(即1000×10-6s)定时器就能产生溢出,定时器的定时初值应为


2.方式1
        当M1=0、M0=1时,定时器/计数器工作在方式1,它为16位计数器。除了计数位数不同外,定时器/计数器在方式1的工作原理与方式0完全相同。定时器/计数器T0工作在方式1时的电路结构如图6-5所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值