首页 百科知识 高速计数器的使用

高速计数器的使用

时间:2022-10-16 百科知识 版权反馈
【摘要】:只有在执行高速计数器的中断程序时,状态位才有效。监视高速计数器状态的目的是响应正在进行的操作所引发的事件产生的中断。只有定义了高速计数器和它的计数模式,才能对高速计数器的动态参数进行编程。选择高速计数器及工作模式包括两方面工作:根据使用的主机型号和控制要求,一是选用高速计数器;二是选择该高速计数器的工作模式。高速计数器在投入运行之前,必须要执行一次初始化程序段或初始化子程序。

5.7.3 高速计数器的使用

1.高速计数器的状态字节

每个高速计数器都有一个状态字节,给出了当前计数方向和当前值是否大于或等于预置值(如表5-32所示)。只有在执行高速计数器的中断程序时,状态位才有效。监视高速计数器状态的目的是响应正在进行的操作所引发的事件产生的中断。

表5-32 高速计数器状态字

img235

2.高速计数器的控制字节

每个高速计数器都对应一个控制字节。用户可以根据要求来设置控制字节中各控制位的状态,如复位与启动输入信号的有效状态、计数速率、计数方向、允许更新双字值和允许执行HSC指令等,实现对高速计数器的控制。控制字节中各控制位的功能如表5-33所示。

只有定义了高速计数器和它的计数模式,才能对高速计数器的动态参数进行编程。执行HSC指令时,CPU检查控制字节和有关的当前值与预置值。

在执行HDEF指令之前必须将这些控制位设置成需要的状态,否则计数器将采用所选计数器模式的默认设置。默认设置为:复位输入和启动输入高电平有效,正交计数速率为输入时钟频率的4倍。执行HDEF指令后,就不能再改变计数器设置,除非CPU进入停止模式。

表5-33 高速计数器控制字的定义

img236

表中的前3位(0、1和2位)只有在HDEF指令执行时进行设置,在程序中其他位置不能更改。第3位和第4位可以在工作模式0、1和2下直接更改,以单独改变计数方向。后3位可以在任何模式下并在程序中更改,以单独改变计数器的当前值、预设值或对HSC禁止计数。

3.高速计数器的当前值寄存器和设定值寄存器

每个高速计数器都有1个32位的当前值寄存器和1个32位的设定值寄存器,当前值和设定值都是有符号的整数。为了向高速计数器装入新的当前值和设定值,必须先将当前值和设定值以双字的数据类型装入如表5-34所示的特殊继电器中。

表5-34 高速计数器的当前值与设定值寄存器

img237

4.使用高速计数器的步骤

选择高速计数器及工作模式包括两方面工作:根据使用的主机型号和控制要求,一是选用高速计数器;二是选择该高速计数器的工作模式。

(1)选择高速计数器

例如,要对一高速脉冲信号进行增/减计数,计数器当前值达到1200产生中断,计数方向用一个外部信号控制,所用的主机型号为CPU224。

分析:本控制要求是带外部方向控制的单相增/减计数,因此可用的高速计数器可以是HSC0、HSC1、HSC2或HSC4中的任何一个。如果确定为HSC0,由于不要求外部复位,所以应选择工作模式3。同时也确定了各个输入点:I0.0为计数脉冲的时钟输入,I0.1为外部方向控制(I0.1=0时为减计数,I0.1=1时为增计数)。

(2)设置控制字节

在选择用HSC0的工作模式3之后,对应的控制字节为SMB37。如果向SMB37写入2# l1111000,即16# F8,则对HSC0的功能设置为:复位与启动输入信号都是高电位有效、4倍计数频率、计数方向为增计数、允许更新双字值和允许执行HSC指令。

(3)执行HDEF指令

执行HDEF指令时,HSC的输入值为0,MODE的输入值为3,指令如下:

HDFF  0,3

(4)设定当前值和预设值

每个高速计数器都对应一个双字长的当前值和一个双字长的预设值寄存器。两者都是有符号整数。当前值随计数脉冲的输入而不断变化,运行时当前值可以由程序直接读取HCn得到。

本例中,选用HSC0,所以对应的当前值和预设值分别存放到SMD38和SMD42中。如果希望从0开始计数,计数值达到1200时产生中断,则可以用双字传送指令分别将0和1200装入SMD38和SMD42中。

(5)设置中断事件并全局开中断

高速计数器利用中断方式对高速事件进行精确控制。

本例中,用HSC0进行计数,要求在当前值等于预设值时产生中断。因此,中断事件是当前值等于预设值,中断事件号为12。用中断调用ATCH指令将中断事件号与中断子程序(假设中断子程序编号为INT-0)连接起来,并全局开中断。指令如下:(STL编程)

ATCH  INT-0,12

ENI

在INT-0程序中,可完成HSC0当前值等于设定值时计划要做的工作。

(6)执行HSC指令

以上设置完成并用指令实现之后,即可用HSC指令对高速计数器编程进行计数,指令如下:

HSC  0

以上6步是对高速计数器的初始化,该过程可以用主程序中的程序段来实现,也可以用子程序来实现。高速计数器在投入运行之前,必须要执行一次初始化程序段或初始化子程序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈