单片机延时出问题了

2020-01-17 19:12发布

本帖最后由 liude2006 于 2016-4-12 16:38 编辑

uint zheyang_time = 15;   //2.5分钟
uint Flag_zheyang = 0;
void control_right_left()
{
        if(Flag_zheyang_time >= zheyang_time && zheyang_zheng == 1)
        {
                Flag_zheyang_time = 0;
                zheyang_zheng = 0;
                RELAY_P2_0 = RELAY_OFF;                    
                RELAY_P2_2 = RELAY_OFF;
        }
        if(Flag_zheyang_time >= zheyang_time && zheyang_fan == 1)
        {
                Flag_zheyang_time = 0;
                zheyang_fan = 0;
                RELAY_P2_1 = RELAY_OFF;                    
                RELAY_P2_3 = RELAY_OFF;
        }
}

void main(void)
{
         Relay_Init();              //继电器初始化
             Serial_Init();       //串口初始化

         Delay(1000);

         Receive_Flag = 0;
         Flag_Rece_Uartbuf = 0;
         F_Packet_Clear(&sPacket_Receive);

         while(1)
         {
                if(Flag_Rece_Uartbuf == 1)          //数据包接收完全正确   执行相应动作
                {
                case 0x30: RELAY_P2_0 = RELAY_ON;         //P2_1 P2_3 电机正转开始
                        RELAY_P2_2 = RELAY_ON;        
                        zheyang_zheng = 1;
                        Flag_zheyang_time = 0;
                        Flag_zheyang = 0;                                                                                                             
                break;
                case 0x31: RELAY_P2_0 = RELAY_OFF;        //P2_1 P2_3 正转停止
                        RELAY_P2_2 = RELAY_OFF;                          
                break;       
                case 0x40: RELAY_P2_1 = RELAY_ON;         //P2_2 P2_4 电机反转开始
                        RELAY_P2_3 = RELAY_ON;
                        zheyang_fan = 1;
                        Flag_zheyang_time = 0;
                        Flag_zheyang = 0;                                                          
                break;
                case 0x41: RELAY_P2_1 = RELAY_OFF;                //P2_2  P2_4反转停止
                        RELAY_P2_3 = RELAY_OFF;
                break;       
                default: break;
                }
        }       

        control_right_left();
}
//串口接收中断函数
void ver()interrupt 4
{
        RI = 0;
        Receive_Value = SBUF;

        ParseData();//判断接收到的数据
}
void timer0() interrupt 1
{
        TH0 = (65535-5000)/256;                                        //定时5ms
        TL0 = (65535-5000)%256;

        Flag_zheyang++;
        if(Flag_zheyang == 2000)  // Flag_zheyang == 2000 定时10S,
        {   
                Flag_zheyang = 0;
                Flag_zheyang_time++;
        }
}

此程序是控制电机正反转的,现在的问题是明明定时的是2.5分钟,,结果电机只动作了二十几秒就停止了,请高手看看问题出在哪里了?急急急   用的是52单片机,11.0592的晶振

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
jzkn
1楼-- · 2020-01-17 20:19
看一下定时器里面的Flag_zheyang变量是不是申明为char了。你这个代码风格有点乱啊。
jbpan852
2楼-- · 2020-01-17 21:04
没看到Flag_zheyang数据类型,是不是溢出了
liude2006
3楼-- · 2020-01-17 23:17
 精彩回答 2  元偷偷看……
liude2006
4楼-- · 2020-01-18 01:58
jbpan852 发表于 2016-4-12 16:29
没看到Flag_zheyang数据类型,是不是溢出了

Flag_zheyang是uint型的
jzkn
5楼-- · 2020-01-18 01:58
用串口先调试一下你的定时器吧。这么看看不出来个啥。
klxx68
6楼-- · 2020-01-18 06:51
定时器初始化在哪里?