php接收rs485的数据如何处理,为什么485不能连续接收?
謝謝各位的回復!
我的STC11F04XE單片機程序如下,中斷接收數據,主程序中判斷收到4個字節數據就轉發。
PC串口轉485通過MAX485與單片機UART連接。調試助手發送單個字節,發送4次,能正確收到轉發回來的數據。一次發送4個字節,則必須發送兩次,才能收到轉發回來的4個字節數據,不過該數據是兩次發送的前2個字節。
用示波器觀察MAX485的數據接收端RI,波形很好。無論發送單字節還是4字節,波形都正確!問題應該在程序。請各位幫助我分析一下程序,我可能陷入某個誤區。
void? ? ? ? Serial0_ISR()? ? ? ? interrupt 4
{
unsigned char temp;
EA=0; //disable interrupt
if (RI)
{
RI=0;
temp=SBUF;? ? ? ? ? ? ? ? //讀取串口接收字節
RxData[RxCounter]=temp;? ? ? ? //接收數據,4字節
RxCounter++;
}
}
//-------------------------------------------------------------------
void SendChar(unsigned char temp)
{
SBUF=temp;
while(TI==0);
TI=0;
}
/********************************************************************/
void main (void)
{
unsigned char i;
ini8051();
delayxms(200); //延時一段時間
//? ?? ???CLRWDT();? ? ? ? ? ? ? ? //start watchdog
RxCounter =0;? ? ? ? //串行口接收數據計數器
RS485T1R0=0;? ? ? ? //485接收
start3:
RS485T1R0=0;? ? ? ? //485接收
ES=1; //enable UART interrupt
EA=1; //enable interrupt
if (RxCounter <4) goto noRevDa;//一幀數據,4字節
//命令協議解析處理
ES=0; //disable UART interrupt
RxCounter=0;
//轉發485收到的數據
RS485T1R0=1;? ? ? ? //485發送
_nop_(); _nop_(); _nop_(); _nop_();
//? ? ? ? ? ? ? ? for (i=5;i>0;--i) delayxms(200); //delay 1 seconds
for (i=0;i<4;i++)
{
SendChar(RxData);
}
ES=1;? ? ? ? //enable UART interrupt
RS485T1R0=0;? ? ? ? //485接收
for (i=0;i<3;i++) //LED閃爍3次,調試觀察
{
LED1=0; delayxms(200);
LED1=1; delayxms(200);
}
noRevDa:
//? ? ? ? ? ? ? ? ES=1; //enable UART interrupt
EA=1; //enable interrupt
//? ? ? ? ? ? ? ? RS485T1R0=1;? ? ? ? //485發送
LED1=0;??//LED亮滅,調試觀察
for (i=10;i>0;--i) delayxms(200); //delay 1 seconds
LED1=1;
for (i=10;i>0;--i) delayxms(200); //delay 1 seconds
_nop_();
goto start3;
}? ? ? ? // end of main
//僅僅重排版,使程序讀起來更容易。
總結
以上是生活随笔為你收集整理的php接收rs485的数据如何处理,为什么485不能连续接收?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ms17-010 php版本,那年MS1
- 下一篇: matlab传递函数参数辨识,基于mat