|
程序與上位機通訊能夠實現,我用串口調試助手發送 01 05 00 00 00 00 CD CA(站號01,功能碼05(寫單個位狀態),地址:0000,狀態0,校驗碼),單片機從機回復01 05 00 00 00 00 CD CA,經測試,通訊沒問題!
再發送 01 01 01 00 00 00 08 3D C6(站號01,功能碼01(讀位狀態),起始地址:0000,寄存器個數:8,校驗碼)
單片機回復 01 01 01 00 51 88 由此可見位寄存器0----8為0000 0000,并沒有被改變。。。
以下為我的單片機定時器T0中斷服務程序:
- /*T0中斷服務程序*/
- void comm_stop() interrupt 1
- {
- u8 i;
- TH0=(65536-11111)/256; //重裝T0
- TL0=(65536-11111)%256; //T0低位
- if(Reciver_bit&&comm_END!=0) //確認等待3.5個字節時間8ms && 接收位為1
- comm_END--;
- if(comm_END==0)
- {
- Reciver_bit=0; //幀接收,對標志位清零
- if(rece_index>=8) //確認接收數據長度大于等于8
-
- AnalyzeRecieve();
- send_comm();
- led0=Bit[0];
- led1=Bit[1];
- led2=Bit[2];
- led3=Bit[3];
- led4=Bit[4];
- led5=Bit[5];
- led6=Bit[6];
- led7=Bit[7];
-
-
-
- rece_index=0; //數據長度標識位清0
- comm_END=8; //重新賦延時初值
- for(i=0;i<16;i++) //清空接收數組
- receBuf[i]=0;
- receiveData=0; //接收中間變量賦初值[/i]
- }
- }
復制代碼
經過測試發現,程序運行到 AnalyzeRecieve();時,對Bit[0]=1的操作成功,運行下一步時,就好像操作被撤銷了一樣。
我在開發板上定義了LED0~LED7分別對應Bit[0]~Bit[7]來監控位狀態
神奇的是,運行一次T0中斷程序,所有LED就都閃一下,修改Bit[]也不成功。
本人知識有限,對這疑難雜陳無計可施。。。
附件包含源程序和現象視頻
|
|