📄 printer.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 + -