想编一个程序,需求是这样的(我用的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;
- }
|