基于MDB/ICP协议的自动售卖系统的主控制器实现
eByte(uchar *byte,uchar *bMode)
本文链接地址:http://www.oyaya.net/fanwen/view/161161.html
//形参:*byte——返回接收到的字节值
// *bMode——返回接收到的字节的方式位
//返回值:0—超时,1—成功接收
{
TMOD &=0xf0;
TMOD |=0x01; //设置定时器0为方式1(16位)
TH0=T_RESPONSE;
TL0=0x00; //设置超时门限
TF0=0;
TR0=1; //定时器0使能
While (!RI && !TF0)
; //等待接收字节直至超时
TF0=0;
if(RI){ //已接收字节
RI=0;
*byte=SBUF; //返回字节值
*bMode=RB8; //返回方式位
return 1;
}else{ //超时
RI=0;
return 0;
}
}
(3)数据块的传送
这部分与下面的会话部分放在一个函数体内实现。
(4)会话
这是MDB会话控制的核心部分。根据需要传送数据包,计算校验字节,控制方式位,在时序允许的响应时间内接爱外设返回的数据,做出ACK或NAK等反应。并且按照MDB/ICP标准中堆荐的方式处理异常情况,当接受数据超时或校验和错时,重复发送命令多次,以增强容错性能。将接收到的数据返回给调用乾,并返回结果码。源程序如下:
//与外设会话,在调用之前确认译码器选通MDB总线
uchar Session(uchar add,uchar dat[],uchar count)
//形参:add——VMC发送的地址指令字节
// dat[]——VMC发送的数据块
// count——数据块的大小
//返回值:0——外设应答ACK
//非0且小于0x80——外设应答的数据块的大小
//大于等于0x80——会话中出错
//外设应答的数据块存放在全局数组uchar recBuff[]
{
《基于MDB/ICP协议的自动售卖系统的主控制器实现(第3页)》