⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printer.txt

📁 从并口输入数据: 外设检测STB是否忙
💻 TXT
字号:
 
通信握手:一般使用SIN,SLCT进行联络。

  从并口输出数据:

  PC检测BUSY是否忙,忙则等待。发数据,置STB,检测ACK是否响应,是则清STB否则等待。

  外设检测STB是否选通,是则置BUSY否则等待。读数据,处理后发ACK清忙。

  从并口输入数据:将"?"置1设为输入数据的模式。

  外设检测STB是否忙,忙则等待。发数据,置ACK,检测AFD是否响应,是则清ACK否则等待。

  PC检测ACK是否选通,是则置STB否则等待。读数据,处理后发AFD清忙。

   以下是计算机收数据的一个类:

  //---------------------------------------------------------------------------

  //start Paralle.h

  #ifndef ParallelH

  #define ParallelH

  //---------------------------------------------------------------------------

  class TParaComm

  {

  private:

  short DataAddr;

  short StatusAddr;

  short CommandAddr;

  unsigned __fastcall InPort(short Addr);

  void __fastcall OutPort(unsigned char Data,short Addr);

  public:

  __fastcall TParaComm(int PortAddr);

  void __fastcall InitComm(void);

  bool __fastcall GetConect(bool Wait);

  bool __fastcall ReadPort(unsigned char *Data,int Time);

  };

  extern TParaComm *Para;

  #endif

  //end Paralle.h

  //start Paralle.cpp

  #include "Paralle.h"

  TParaComm *Para;

  unsigned __fastcall TParaComm::InPort(short Addr)

  {

  unsigned char Temp;

  asm{

  MOV DX,Addr

  in AL,DX

  MOV Temp,AL

  }

  return Temp;

  }

  //---------------------------------------------------------------------------

  void __fastcall TParaComm::OutPort(unsigned char Data,short Addr)

  {

  asm{

  MOV DX,Addr

  MOV AL,Data

  out DX,AL

  }

  }

  //---------------------------------------------------------------------------

  __fastcall TParaComm::TParaComm(int PortAddr)

  {

  DataAddr=PortAddr;

  StatusAddr=DataAddr+1;

  CommandAddr=StatusAddr+1;

  }

  //---------------------------------------------------------------------------

  void __fastcall TParaComm::InitComm(void)//初始化控制寄存器0xEC

  {

  OutPort(0xEC,CommandAddr);

  }

  //---------------------------------------------------------------------------

  bool __fastcall TParaComm::GetConect(bool Wait)

  {

  unsigned char Temp;

  do

  {

  Temp=InPort(StatusAddr);

  if(!(Temp&0x10)) return true;

  }while(Wait);

  return false;

  }

  //---------------------------------------------------------------------------

  bool __fastcall TParaComm::ReadPort(unsigned char *Data,int Time)
{

  extern void __fastcall Sleep(int ms);//call API

  unsigned char Temp,Ch;

  Temp=InPort(CommandAddr);

  OutPort(Temp|0x01,CommandAddr);//置ACK为1

  do

  {

  Ch=InPort(StatusAddr);

  if(!(Ch&0x40))//ACK应答是否为0

  {

  OutPort(Temp&0xFE,CommandAddr);//将STB置0

  *Data=InPort(DataAddr);//收数据

  return true;

  }

  Sleep(1);

  }while(--Time!=0);

  OutPort(Temp&0xFE,CommandAddr);

  return false;

  }

  //---------------------------------------------------------------------------

  //end Paralle.cpp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -