拨号成功后的图:
实验三 脉冲计数实验
一、 实验目的
脉冲计数实验用来考察查自己对脉冲识别原理的掌握情况。
二、 实验原理及设计
拨号盘所发出的拨号脉冲有规定的参数。我国规定的号盘脉冲的参数有:脉冲速度:即每秒钟送出的脉冲个数,规定的脉冲速度为每秒钟8-16个脉冲; 脉冲断续比:即脉冲宽度(断)和间隔宽度(续)之比,规定的脉冲断续比为1:1-3:1。 1)脉冲识别程序扫描周期的确定:
为确定脉冲识别扫描的周期,需要计算出最短的变化间隔(脉冲或间隔宽度),这样才能保证每个脉冲都能够识别而不至于丢失脉冲。由于号盘每秒发出的最快脉冲个数为16个,脉冲周期T=1000/16=62.5ms,在这种情况下断续时间比为3:1时续的时间最短,为1/4*T,所以最短变化周期为1/4*(1000/16)=15.625ms,脉冲识别扫描程序的周期<15.625ms。 2)拨号脉冲识别原理:
在下图中,采用了10ms的扫描周期,其中的变化识别标志了状态的变化。对于一个脉冲来说,是前沿和后沿各识别一次,我们可以任取一个来识别脉冲,下图中采用了前沿识别。从逻辑上讲,也就是说(这⊕前)∧前=!这∧前相当于前面所说的挂机识别,同样(这⊕前)∧!前=这∧!前相当于摘机识别。在这里采用比较麻烦的逻辑运算的原因是需要“变化识别”这个结果。这在位间隔识别中要用到,下面是脉冲识别原理原理示意图:
在我们设计的实验中,用一个数组保留各线路10ms前的状
态,用另一个数组保留各线路当前的状态,并且提供了保存“变化识别”的数组(以供后面的位间隔识别使用),另外提供给学生使用的是保存已检测的脉冲值的数组,学生编程检测到一个脉冲以后,就将该线路对应的脉冲值加一。
三、 实验过程
1、实验主要数据结构:
函数功能:识别出一个脉冲,然后把该线路对应的脉冲数加一。 函数原型:void scanpulse(int linestate[LINEMAX],int linestate10[LINEMAX],int change [LINEMAX],int
fchange[LINEMAX],int pulsenum[LINEMAX]) 其中LINEMAX为最大线路数,linestate为当前线路状态,linestate10为10ms前的线路状态,change为状态改变,fchange为首次变化,pulsenum为脉冲计数数组。
四、 实验结果
1、
源程序
#include \ int nor_op(int a,int b); int or_op(int a,int b); extern
\
_declspec(dllexport)
void
scanpulse(int
linestate[LINEMAX],int linestate10[LINEMAX],int
change[LINEMAX],int fchange[LINEMAX],int pulsenum[LINEMAX]) { int i=0;
for (;i { //读这次和前次扫描结果并生成当前变化识别和首次变化识别 change[i]=nor_op(linestate[i],linestate10[i]);// 当前变化识别 fchange[i]=or_op(fchange[i],change[i]); //首次变化识别 if (change[i]&linestate[i]) //判断变化识别与前次状态是否为1 pulsenum[i]=pulsenum[i]+1; //脉冲计数器加1 linestate10[i]=linestate[i];//保存当前的扫描结果到10ms前扫描结果 } return; } //int nor_op(int a,int b);int or_op(int a,int b);分别用于异或操作和或操作。 int nor_op(int a,int b) { if(a==b) return 0; else
相关推荐: