通信实验课程设计报告 - 图文 联系客服

发布时间 : 星期三 文章通信实验课程设计报告 - 图文更新完毕开始阅读3e659f8cd0d233d4b14e69f0

拨号成功后的图:

实验三 脉冲计数实验

一、 实验目的

脉冲计数实验用来考察查自己对脉冲识别原理的掌握情况。

二、 实验原理及设计

拨号盘所发出的拨号脉冲有规定的参数。我国规定的号盘脉冲的参数有:脉冲速度:即每秒钟送出的脉冲个数,规定的脉冲速度为每秒钟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