写到是写出来了很久,只是想优化下.
谢谢各位前辈的指导! 小弟我把程序贴出来.希望各位指出错误和改进方法! 谢谢了. /*协议如下 采用相同的波特率,双方约定,发送时,先发送一个呼叫信号(0x06) 以询问接受机是否可以接受数据,接受机收到呼叫信号后,若同意接受数据则回 发0x00作为答应信号,表示可以接受数据,否则回发0x05,表示暂不能接受数据 发送机只有在接收到接收机发回的答应信号0x00后才能将数据统一发送到接收机, 否则不断想接收机发送呼叫信号,直到接收到接收机发回的0x00的应答信号. 若接受正确,向发送机回发0x0f信号,表示正确,否则发送0xf0,表示接受到的数据出现了错误 */ 发送程序如下: /**********************************************************************************/ void tx_add(void) { uchar total_t=0x00;//累加和计数器 while(1) { while(1) { ACC=0x06;//发送呼叫信号06 SBUF=ACC; while(1) //等待发送完信号. { if(TI) { TI=0; break; } } while(1) //等待回答信号. { if(RI) { RI=0; break; } } ACC=SBUF; if(ACC==0x00) break; else ; } ACC=0x06; SBUF=ACC; while(1) //等待发完 { if(TI) { TI=0; break; } } i=1; while(1) //开始发送数据 { switch(i) { case 0x01:temp_f=t1; break; case 0x02:temp_f=t2; break; case 0x03:temp_f=t3; break; case 0x04:temp_f=t4; break; case 0x05:temp_f=t5; break; case 0x06:temp_f=t6; break; } ACC=temp_f; SBUF=ACC; while(1) //等待发送完信号. { if(TI) { TI=0; break; } } total_t=(ACC+total_t); //求累加和 i++; if(i==7) break; } ACC=total_t; SBUF=ACC;//发送累加和 while(1) { if(TI) { TI=0; break; } } while(1) //等待回答 { if(RI) { RI=0; break; } TI=0; } ACC=SBUF; if(ACC==0x0f)//发送正确 RI=0; else ; break;
}
} 下面是接受程序:想问下若改成中断接受则需要怎么改下啊? /*****************************************************************/ void jieshou(void) { uchar total_t; while(1) { while(1) //等待信号! { while(1) { if(RI) { RI=0; break; } } ACC=SBUF; if(ACC==0x06) //允许接受表示不忙 break; else { ACC==0x05; SBUF=ACC; TI=0;//不允许接受 } } ACC=0x00; SBUF=ACC; TI=0; while(1) { if(RI) { RI=0; break; } } total_t=SBUF; //累加和计数器 j=1; while(1) //开始接受数据 { while(1) //等待接受完信号. { if(RI) { RI=0; break; } } ACC=SBUF; SBUF1=ACC; switch(j) { case 0x01: temp8=SBUF1; break; case 0x02: temp7=SBUF1; break; case 0x03: temp6=SBUF1; break; case 0x04: temp5=SBUF1; break; case 0x05: temp4=SBUF1; break; case 0x06: temp3=SBUF1; break; } total_t=(total_t+SBUF1);//求累加和 j++; if(j==7) break; } while(1) //等待接受校正 { if(RI) { RI=0; break; } } ACC=SBUF; if(ACC==total_t) { ACC=0x0f; //发送正确 SBUF=ACC; while(1) { if(TI) { TI=0; break; } } } else //发送错误 { ACC=0xf0; SBUF=ACC; while(1) { if(TI) { TI=0; break; } } } break;
} } |
|