No.90495 作者:bossren 邮件:taodg@sina.com ID:44061 登陆:8次 文章数:15篇 最后登陆IP:60.22.206.220 最后登陆:2011/9/11 11:52:48 注册:2005/12/3 12:25:24 财富:151 发帖时间:2006/3/22 21:07:35 发贴者IP:59.45.228.54 标题:bossren:帮我看看并行通讯程序。。。。。。 摘要:No.90495帮我看看并行通讯程序。。。。。。 我用三根信号线Ready_U4、RD、WR作为两片单片机的联络信号(当然数据线是直接相连的),主机首先检查Ready_U4信号线是否为低(即是否申请了发送数据),如果发现Ready_U4信号线为低,则认为从机申请了发送数据,即进入接收数据状态与从机进行通讯,否则置Ready_U4为低,向从机申请发送数据。从机也是这样使用Ready_U4信号线的。 当主机接收从机的数据时,首先置RD=0,并查询WR,当从机回复WR=0时意味着从机已经将数据送到端口线上了,于是主机从端口线上读数据,并置RD=1,从机判断主机回复的RD=1时即进入下一个数据的发送。 当主机向从机发送数据时,首先置Ready_U4为低电平表明有数据要发送,然后等待从机发送回复信号WR=0,收到回复信号后,将数据写入端口,并等待从机回复WR=1取走数据,并开始下一个数据的发送。 具体程序为: 主机部分: while(1){ Ready_U4 = 1; if(!Ready_U4) //如果从机申请了发送数据,则接收数据 { i=0; do{ RD = 0; //应答从机,通知从机准备好数据 WR = 1; while(WR){} //等待从机回复 P2 = 0xFF; data_buf[i] = P2;//取走数据 i++; RD = 1; //回复从机数据已经取走 WR = 1; while(!WR){} //等待从机应答 Ready_U4 = 1; }while(Ready_U4 == 0); //如果从机还有数据发送则继续 f_newdata = 1; //接收到新数据标志 } else { //否则申请发送数据,将接收到的数据发送给仿真计算机 if(f_newdata) //将新接收到的数据发送给仿真计算机 { f_newdata =0; Ready_U4 = 0; //表示数据准备好,等待仿真CPU查询并向仿真CPU发送数据 for(i=0;i <22;i++){ WR = 1; while(WR){}; //等待从机应答 P2 = data_buf[i];//发送数据 RD = 0;//通知从机数据可以取走了 WR = 1; while( ......
>>返回讨论的主题
|