首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
基于MDB/ICP协议的自动售卖系统的主控制器实现 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:48:20 点击数:[] ![]() |
|||||
这是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[] { uchar data check,i,j,err; 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,0); check +=dat; } 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= =NAK && mode) //收到NAK err = NAK; else if (!mode) //方式位为0表示还有数据 check +=recBuff; } //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; } } else //收到外设传来的ACK break; }//if(!err) Wait(T_RESPONSE); //防止与外设数据冲突 }//for j //返回接收到的数据块大小或出错代码 return err?err:(i-1); } 本文使用DS5002FP实现了对MDB总线的控制与访问。通过将MDB/ICP协议进行分解,很好地实现了总线驱动。实践证明该驱动程序稳定、可靠,大大降低了上层界面开发的难度,提高了系统的可维护性,节约了成本。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |