rcv_data = (unsigned char * )&rcv_buffer;
reread_sign = 1; //非错误态
while(reread_sign ==1)
{
for(i=0;i<rcv_count;i++) //接收数据
{
nwait = 1; //PC端反向后为低,表示外设准备好接收
while(nDstrb) //等待nDstrb为低时完成数据传输并锁存
nwait = 0; //完成写周期,
rcv_data[i] = UPSD_xreg.IMC_A; //从锁存的输入宏中读取数据
} //接收完成
ERROR = error_check(rcv_data); //检测错误,1为正确,0为错误
if(ERROR)
{
reread_sign = 0; //无错则退出while循环
}
else
{
ERROR = 1; //校验有错则while循环继续
}
}
该程序为单片机数据接收(即PC写数据)子程序,其中rcv_buffer为接收缓存区,error_check为对接收的数据进行校验.如果出错,则将用户自定义引脚12置低,PC机读取状态寄存器时读取到该用户自定义状态为低时,将数据重发,保证了通信的可靠性。
参考文献:
[1] 余张国,李众立,张晓琴,李磊民.基于 EPP协议 的AVR与PC并行通信系统的设计.PLC&FA,2004:(5)
[2] 霍晓方.用68HC908GP32单片机实现EPP增强并口的接口技术.单片机与嵌入式系统应用, 2006:(4)
[3] Interfacing the Enhanced Parallel Port.pdf. http://www.beyondlogic.org
作者简介:
方耀湘(1982-),男 湖南省湖南大学电气与信息工程学院硕士研究生,研究方向:电子技术应用。
黎福海(1964-),男,广西人,湖南大学电气与信息工程学院副教授,目前研究领域:数字信号处理。
胡兆斌(1963-),男,陕西人,深圳美安可有限公司总工,目前研究方向:工业印刷技术。