基于MDB/ICP协议的自动售卖系统的主控制器实现
uchar data check,i,j,err;
本文链接地址:http://www.oyaya.net/fanwen/view/161161.html
uchar data mode;
for(j=0;j<5;j++){ //最多重复发送命令5次
check=0;
err=0;
TransmitByte(add,1); //发送地址字节
Check +=add; //计算CHK
For(i=0;i<count,i++){ //发送数据字节
TransmitByte(dat[i],0);
check +=dat[i];
}
TransmitByte(check,0); //发送CHK
for (i=0,check=0,mode=0;
!mode && i<MAX_BLOCK_SIZE && !err;
i++)
{//反复接收字节直到方式位为1或出错
//接收到的数据存在全局数组recBuff[]里
if(!ReceiveByte(recBuff+i,&mode))
//超时。外设可用超时表示NAK
err=i?ERR_TIME_OUT:NAK;
else if (i= =0 && recBuff[i]= =NAK && mode)
//收到NAK
err = NAK;
else if (!mode)
//方式位为0表示还有数据
check +=recBuff[i];
} //for i
if(!err){ //未发生错误
if (!mode){
//收完36个字节还未结束
TransmitByte(NAK,0);
err=ERR_NO_MODE_BIT;
}else if (i>1) {
//收到数据块
if(check !=recBuff[i-1]){ //校验和错
TransmitByte(NAK,0);
err=ERR_CHECKSUM;
} else{
//一切正常,发送ACK后跳出循环
TransmitByte(ACK,0);
break;
《基于MDB/ICP协议的自动售卖系统的主控制器实现(第4页)》