想编一个程序,需求是这样的(我用的msp430f448)
上电后485每隔10S问询一次设备,设备正常回复后每隔1s问询一次设备,如果485询问设备,设备不回复,再询问3次,如果设备不回复则,继续每隔10s询问一次。
我写的代码如下:(因为逻辑就在这两个中断内,我就贴了这两个中断其他的无关痛痒,寄存器配置也没问题)现在这一段代码能实现,每隔10s询问,设备正常回复后每隔1s询问一次, 但是后面的“ 每隔1s询问后 若设备不回复,再询问3次,如果设备不回复则,继续每隔10s询问一次。”这个功能始终实现不了,我知道是因为 我的flag_Receive这个总置一 我现在有点想不出 另一个方法了,被自己绕里边了 ,希望各位高手拔刀相助!#pragma vector=BASICTIMER_VECTOR
__interrupt void BT_ISR(void)
{
if(flag_Receive==1)
{
timer1s=1;
//un_receive++;
if(timer1s==1)
{
timer1s=0;
Ask485_1s(Data_tools,Data_length);
}
}
if(flag_Receive==0)
{
timer10s++;
if(timer10s==10)
{
timer10s=0;
Ask485_10s(Data_tools,Data_length);
}
}
}
#pragma vector=USART1RX_VECTOR
__interrupt void uart1_rx (void)
{
uint8 i;
temp=U1RXBUF;
for(i=0;i<=7;i++) //以队列的方式将接受的数据传入数组 先进先出 后进后出
{
Data_flowmeter[i]= Data_flowmeter[i+1];
}
Data_flowmeter[8]=temp;
if((Data_flowmeter[0]==0xff)&&(Data_flowmeter[1]==0x03)&&(Data_flowmeter[2]==0x04))
{
Receive_from_flowmeter(Data_flowmeter);
flag_Receive=1;
}
|