单片机延时出问题了
本帖最后由 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_2P2_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的晶振
看一下定时器里面的Flag_zheyang变量是不是申明为char了。你这个代码风格有点乱啊。 没看到Flag_zheyang数据类型,是不是溢出了 jzkn 发表于 2016-4-12 16:27
看一下定时器里面的Flag_zheyang变量是不是申明为char了。你这个代码风格有点乱啊。 ...
Flag_zheyang是uint型的 jbpan852 发表于 2016-4-12 16:29
没看到Flag_zheyang数据类型,是不是溢出了
Flag_zheyang是uint型的 用串口先调试一下你的定时器吧。这么看看不出来个啥。 定时器初始化在哪里? INT 溢出了。 饭桶 发表于 2016-4-12 17:29
INT 溢出了。
具体是指。。。。。 这程序怎么编译过的。。。 看不出来有定时关闭电机的动作 主程序中没定时器初始化吧,还有中断开启了吗 也是,没看到定时器初始化和中断使能控制。 比较乱,没看懂。 首先control_right_left();这个函数在while(1)之外
再有 你的case 怎么能通过编译器的请你告诉我一下,很厉害呀,swtich呢? 这个风格真心没看明白呀 先写正转,调试成功再反转 可能楼主的程序代码发上了的时候做了删减 多用点() 历害,这也被发现了!
页:
[1]