微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 各位大神,麻烦帮我看看,这段程序有什么问题?

各位大神,麻烦帮我看看,这段程序有什么问题?

时间:10-02 整理:3721RD 点击:

各位大神,麻烦帮我看看,这段程序有什么问题?用的是STC单片机的定时器2
主要实现开始关箱时蜂鸣器需要响2声,每声500ms,现在经常出现2个按键按下时蜂鸣器响声不正常并且,串口只返回“TEST”,却不返回“READY”,中间只延时了3S而已,不知到为什么,大家能不能帮忙看看。
//定时50ms
        T2MOD = 0;                //初始化模式寄存器
        T2CON = 0;                //初始化控制寄存器
        TL2 = 0x00;                //设置定时初值
        TH2 = 0x4C;                //设置定时初值
        RCAP2L = 0x00;                //设置定时重载值
        RCAP2H = 0x4C;                //设置定时重载值
        TR2 = 0;                //定时器2开始计时
        ET2=0;
void Timer2()        interrupt 5
{
        TF2=0;
        if(count--==0)
        {
                count=10;
                j++;
                if(j<3)       
                        BUZZER=~BUZZER;                //500ms翻转一次
                else
                {        j=0;        BUZZER=1;        TR2=0;        ET2=0;}
        }
}

void keyscan()//按键扫描
{       
        if(INC==0)                                                //先按下关箱按键
        {
                delay_ms(100);
                if((INC==0)&&(INO==0))
                {        boxclose();                while(INO==0);        while(INC==0);}
        }
       
        if(INO==0)                                                //先按下开箱按钮
        {
                delay_ms(100);
                while((INO==0)&&(INC==1));
                if(INC==1)                                //开箱按钮松开,则开箱
                        boxopen();
                else if(INC==0)                //开箱按钮松开前按下关箱按钮,则关箱
                {        boxclose();                while(INO==0);        while(INC==0);}                       
        }
}

void boxclose()//关箱
{
        BUZZER=0;//蜂鸣器响
        ET2=1;
        TR2=1;//开始定时
        Send_test();//返回TEST
        delay_ms(3000);
        Send_ready();//返回READY
}

       if(INO==0)                                                //先按下开箱按钮
        {
                delay_ms(100);
                while((INO==0)&&(INC==1));
                if(INC==1)                                //开箱按钮松开,则开箱
                        boxopen();
                else if(INC==0)                //开箱按钮松开前按下关箱按钮,则关箱
                {        boxclose();                while(INO==0);        while(INC==0);}                       
        }
}
这一段有问题把,应该全速跑的话怎么也跑不到这一句判断里else if(INC==0)                //开箱按钮松开前按下关箱按钮,则关箱
     

当我按下开箱按钮后,执行到这一句 while((INO==0)&&(INC==1));  然后按关箱按钮(INC=0),不就到了          else if(INC==0)                //开箱按钮松开前按下关箱按钮,则关箱    这句了吗

你最好一个功能一个功能的先调试好了,再往一起组合。

我如果屏蔽掉定时器2就可以正常工作了,每次都能运行到 Send_ready();//返回READY,是定时器2 哪里有问题了吗?

谢谢各位的建议,已经找到原因了,是硬件问题!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top