打印
[C语言]

计算两个状态之间的时间,结果有的时候不对,求助

[复制链接]
714|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
miaomiaozhuzhu|  楼主 | 2015-6-23 20:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, Green, TE, TI, tc
结果向串口发送结果时,有的对,有的不对,这种if语句只执行一次,下次再满足时好像有的清零语句没有执行,为什么

if(Det_red1==0&&Det_green2==0&&flag1)        //第一路红灯,同时第二路为绿灯 ,
        {                                                                                       
                                        time_green2 =0;                                                       
                                        TR0 = 1;                               
                                        flag3 = 1;                       
                                        flag1 = 0;
                                                                       
                                }                                                               
                                if(Det_red1==0&&Det_yellow2==0&&flag3)                   //红1亮黄2亮
                                {
                                        TR0 = 0;                                               
                                        green2_cycle[m5] = time_green2;               
                                        m5++;                                                               
                                        flag1 = 1;
                                        flag3 = 0;
                                       
                                }                                                       
                                switch(num1)
                                {
                                        case 1:        SendBYTE(green2_cycle[0]);  break;
                                        case 2:        SendBYTE(green2_cycle[1]);  break;
                                        case 3:        SendBYTE(green2_cycle[2]);  break;
                                        case 4:        SendBYTE(green2_cycle[3]);  break;
                                        case 5:        SendBYTE(green2_cycle[4]);  break;
                                        case 6:        SendBYTE(green2_cycle[5]);  break;
                                        default:break;
                                               
                                }

相关帖子

沙发
dirtwillfly| | 2015-6-23 22:14 | 只看该作者
这是中断服务程序里的代码吗?
因为每次代码的执行路径不一样,所以每次的执行时间也不同

使用特权

评论回复
板凳
miaomiaozhuzhu|  楼主 | 2015-6-24 09:18 | 只看该作者
dirtwillfly 发表于 2015-6-23 22:14
这是中断服务程序里的代码吗?
因为每次代码的执行路径不一样,所以每次的执行时间也不同 ...

这是主程序里面的while(1)里面的,好像在扫描时有时候Det_red1==0&&Det_green2==0&&flag1这个条件满足时,正好没扫描到这个语句,就跳过去了,导致没清零,晶振是11.0592M,按理说扫描是微妙级别的,这个信号至少持续500ms,不应该扫描不到啊

使用特权

评论回复
地板
miaomiaozhuzhu|  楼主 | 2015-8-4 09:32 | 只看该作者
找到原因了,是因为在定时器里加了个1s的定时,只清零了1s级别的变量,10ms的变量没清零

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

18

帖子

0

粉丝