这个164测试小程序里的怪现象

2019-03-24 17:18发布

       这是一个一块164接在串口进行测试的小程序,程序中原本没有delay语句,在keil上仿真正常,但是搭建了电路后出现了怪现象,在164输出端应该只有一个led亮,结果所有的led都亮,只不过亮度稍低一些(见图片1)。如果加上delay语句,就会出现想要的结果(见图片2)。经过试验发现,当延时小于10ms时就开始出现以上现象,延时时间越小越明显,也就是说延时时间越小,其他不该亮的亮度越高。我自己分析,没有delar语句,当p10==0,164输出永远是0xfe ,就相当于延时了,为什么非得有延时语句?在实际使用中我打算在164的每一个输出端接一个光电隔离,再接2803驱动负载,如果不要延时语句,将会出现什么问题?请有经验的朋友指教指教,谢谢!!

void main()
{
        while(1)
        {
                if(p10==0)
                {
                        SerialPortOnly164(0xfe);  
                        delay_1ms(10);
                }
                else
                {
                        SerialPortOnly164(0xff);          
                        delay_1ms(10);
                }
        }
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
wh8010jky
2019-03-25 13:12
先谢谢各楼朋友的指点!我是自学单片机的,也没开发过什么产品,就是喜欢瞎捣鼓。最近想搞一个小东西,由于io不够用,想到了164,于是遇到了问题,自己有想不通,就求教于大家了。现将部分相关电路图贴上,上面标明了一些市场数据,2803后面的负载没画上,有Led指示灯、直流小电机、蜂鸣器。现在不明白的是:1、有延时和无延时各相关点电位为什么不一样,而且相差很大?   2、在我的原贴里已提过,if(p10==0),如果p10变化不是非常快,不就相当于延时吗,为什么表现的和无延时的一样?  3、后面的负载运行肯定不是1秒2秒时间,它们有时同时运行,有时不同时运行,还要随时查询控制信号,所以不能大量地、长时间地在这里使用延时程序,根据我这次的两个贴图,有没有什么办法(在程序或者在硬件上)采取措施改善?  4、关于改用595,想弄明白164再考虑。 希望各位朋友继续帮助,再次谢谢!

一周热门 更多>