了问题,主要表现在计数值不稳定,实际进出一次车却出现了进出几次的记录等等。经过仔细分析发现可能是由于拨码开关存在抖动现象,而CPU的运行频率很高,因此微机实际捕捉到的开关状态跳转不止一次,这就导致了计数值的不稳定和记录的多次显示。为此改用脉冲信号代替拨码开关进行光电信号的模拟(脉冲信号进行了消抖处理),动态运行程序后发现实验现象正常,各个功能均按要求得以实现。每产生一次脉冲信号,空位数都会相应的减一或加一,同时PC机上显示相应的记录。当按住脉冲开关不放时,对应的栅栏控制灯始终为暗(表示打开),同时计数值保持不变,PC机上不显示记录,这就表明车正在进入(或驶出)中,直至其完全进入(或离开)才进行相关操作,符合设计者的意图。硬件实物图:Pc显示:五.分析与总结该系统已经能够基本完成所有的需求功能,且运行稳定,因此具有一定的价值。当然,程序中仍然有待改进的地方。主要如下:原来的基本要求是需要2s和3s的精确延迟。预先的设计也是如此。原本是想通过8253定时器产生精确地1s定时,具体的实现办法是通过双通道计数器的级联对1MHz的输入信号进行1000*1000分频,得到1Hz的信号,如此便可得到1s的精确定时。定时的结束不是通过中断处理,而是在计数过程中不断地对通道1的计数值进行检测,当其减小到0时表明一个周期结束。但在实际运行过程中却出现问题,PC机警告程序中有无效的指令。在和辅导老师讨论了之后觉得可能是由于通道1计数值处于0的时间太短(实际差不多应为1ms,按理应该足够了),于是又将其out1端接至通道2计数器的时钟端,这样只要通道2的计数减一(可以再每次计数前对其赋值为1,则只需判断其是否为0即可),就表明一个周期结束,且由于通道2计数的保持时间有1s,CPU有足够的时间进行判断。但是在实际运行中PC机仍然是警告有无效指令。无奈之下只能利用指令的延迟来进行模拟(loop指令)。