|
程序与上位机通讯能够实现,我用串口调试助手发送 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[]也不成功。
本人知识有限,对这疑难杂陈无计可施。。。
附件包含源程序和现象视频
|
|