用两片2148的IO口来作并口通信,其中一片采集数据,利用IO口将数据传导另一片上去,接收数据的2148再将收到的数据用USB传到PC上,主要过程是:接收端先写入电路参数到发送端,发送端再发送数据,发送端的主要代码如下: while(1) { if((FIO0PIN3&0x10)==0) //当采集卡被片选时 { FIO0SET2=0x04;//置高发送端给接收端的握手信号 if((FIO0PIN1&0xa0)==0x80) //接收端写入参数 {。。。。。。//发送端接收写入的参数 } if((FIO0PIN1&0xa0)==0x20)//接收端要求接收数据 {。。。。。。//采集数据并发送数据 } } 接收端主要是用的那个USB DMA程序,大体都差不多,只做了一些修改: while(1) { usbserve(); if (bEPPflags.bits.configuration == 1) /* USB已配置完成 */ { if (bEPPflags.bits.ep2_rxdma == 1) { .......//片选采集卡 //写入参数 //读取数据 //发送数据 } } 现在我的问题在于两个程序同时运行时,只有第一次可以在PC上得到采集的数据,而第二次程序就会一直停在一个地方运行,我通过单步调试发现,在第二次准备进行数据传输的过程中,发送端的程序始终进不了if((FIO0PIN1&0xa0)==0x80)和 if((FIO0PIN1&0xa0)==0x20)下面的部分,而测得相对应的管脚值符合if((FIO0PIN1&0xa0)==0x80)条件,奇怪的是我在第一次数据传输过程中也单步执行程序,当测得相应管脚上的值符合if((FIO0PIN1&0xa0)==0x80)和 if((FIO0PIN1&0xa0)==0x20)两个条件时,程序都可以进行到相应的条件语句下面的部分执行,即程序执行顺序完全正常。由于我在两边程序里都作了同步处理,即当一边的程序不往下执行时,另一边也不能向下执行,这主要是为了保证数据传输的正确性,恳请各位帮忙分析一下原因,谢谢
|