|
发表于 2017-3-31 21:22:40
|
显示全部楼层
本帖最后由 thomascao 于 2017-3-31 21:31 编辑
1,主机
发送完1条完整查询指令后,开定时中断(在不影响主机功能前提下,再根据从机回复数据需要的时间,进行确定时间)用于判断数据回复超时
如超时再查询几次,到达查询上限次数后还无回复数据,判断节点故障。作相应提醒等处理。
2,从机
回复数据时最好有适当延迟 再回复,接收完一条有效指令开定时中断,
指令处理超时要判断,要和主机的超时判断一致或略小。
准备回复时查是否已过延迟,且没超时。没到延迟等延迟到再回复数据,超时等下条有效指令再回复。刚好过延迟且没超时 立即回复。
下面这些语句不要放中断里
crc8(inbox,amount-1)) CRC校验比较耗时
Read_KeyBoard(); 怀疑里边有消颤语句 耗时
usart_out(send,amount); 回复更加不要放接收中断里
if(inbox[amount-1]==crc8(inbox,amount-1)) //如果crc8校验正确就...
{
if(inbox[0]==address) //如果地址匹配本机就回复数据
{
send[0]=1; //发件箱地址指向主机
send[2]=Read_KeyBoard(); //获取按键的操作
send[amount-1]=crc8(send,amount-1); //产生发件箱的crc8校验码
usart_out(send,amount); //发送发件箱的数据包send[]
//请在这里备份你的收件箱信息
}
if(inbox[0]==255) //如果是广播地址就...
{
//请在这里添加你的代码
//收到广播数据请不要回复
}
|
|