dataio1.c
来自「该程序实现的是一个在织布厂用的提花机程序」· C语言 代码 · 共 224 行
C
224 行
CTest::CTest()
{
int p=MAP_O;
m_mapo._bit.sclk=m_mapo._bit.sdata=m_mapo._bit.latch=1;
_outp(p,m_mapo._byte);
p=PC_ENABLE_L_O;
int d=0;
_outp(p,d);
}
void CTest::SendEnable(int TimeWidth)
{
int t=TimeWidth*2;
int p=PC_ENABLE_L_O;
int d=0;
_outp(p,d);
p=PC_ENABLE_H_O;
_outp(p,d);
for(int i=0;i<t;i++)
g_running.Delay();
p=PC_ENABLE_L_O;
_outp(p,d);
}
void CTest::SendByte(BYTE data)
{
int bit;
int m=0x80;
for(int i=0;i<8;i++)
{
bit=data&m;
SendBit(bit);
m=m/2;
}
}
void CTest::SendBit(int bit)
{
if(bit!=0)
bit=1;
int p=MAP_O;
m_mapo._bit.sclk=0; //sclk=0
_outp(p,m_mapo._byte);
m_mapo._bit.sdata=bit;
g_running.Delay1u();
_outp(p,m_mapo._byte); //sdata=bit
g_running.Delay1u();
m_mapo._bit.sclk=1;
_outp(p,m_mapo._byte); //sclk=1
g_running.Delay1u();
g_running.Delay1u();
}
void CTest::SendSclks(int nSclk,int bit)
{
int p=MAP_O;
m_mapo._bit.sclk=1;
m_mapo._bit.sdata=bit;
_outp(p,m_mapo._byte); //sclk=1
if(nSclk==0)
return;
for(int i=0;i<nSclk;i++)
{
m_mapo._bit.sclk=0;
_outp(p,m_mapo._byte); //sclk=0
g_running.Delay1u();
g_running.Delay1u(); //delay 1uS
m_mapo._bit.sclk=1;
_outp(p,m_mapo._byte); //sclk=1
g_running.Delay1u(); // delay 2.5uS
g_running.Delay1u();
g_running.Delay1u();
g_running.Delay1u();
g_running.Delay1u();
}
}
void CTest::SendLatchLevel(int level)
{
int p=MAP_O;
m_mapo._bit.latch=level;
_outp(p,m_mapo._byte);
}
void CTest::SendSclkLevel(int level)
{
int p=MAP_O;
m_mapo._bit.sclk=level;
_outp(p,m_mapo._byte);
}
void CTest::SendEnableLevel(int level)
{
int p;
int d=0;
if(level==0)
p=PC_ENABLE_L_O;
else
p=PC_ENABLE_H_O;
_outp(p,d);
}
void CTest::SendLatch()
{
int p=MAP_O;
m_mapo._bit.latch=1;
_outp(p,m_mapo._byte); //latch=1
m_mapo._bit.latch=0;
_outp(p,m_mapo._byte); //latch=0
g_running.DelayMs(1); // delay 20mS
m_mapo._bit.latch=1;
_outp(p,m_mapo._byte); //latch=1
}
int CTest::GetMapNumber()
{
MAPI mapi;
int p=MAP_I;
int num;
InitialMap();
g_running.DelayMs(10);
int j;
for(j=0;j<25;j++)
{
SendBit(0);
}
SendBit(1);
SendBit(0);
SendBit(0);
SendBit(0);
SendBit(0);
SendBit(0);
g_running.DelayMs(10);
mapi._byte=_inp(p);
if(mapi._bit.test==0) // inverted
{
return 0; // error at D7
}
SendBit(0);
g_running.DelayMs(10);
mapi._byte=_inp(p);
if(mapi._bit.test==1) // inverted
{
return 0; // error at D7
}
for(num=1;num<MAX_MAP;num++)
{
for(j=0;j<31;j++) // data OK, test next MAP
{
SendBit(1);
}
g_running.DelayMs(10);
mapi._byte=_inp(p);
if(mapi._bit.test==0) // inverted
{
return num; // error at D7
}
SendBit(1);
g_running.DelayMs(10);
mapi._byte=_inp(p);
if(mapi._bit.test==1) // inverted
{
return num; // error at D7
}
}
return 0;
}
BOOL CTest::CheckDataConnect()
{
MAPI mapi;
int p=MAP_I;
int errn=0;
SendSclkLevel(0);
g_running.DelayMs(10);
mapi._byte=_inp(p);
if(mapi._bit.sclk_i==1)
return FALSE;
SendSclkLevel(1);
g_running.DelayMs(10);
mapi._byte=_inp(p);
if(mapi._bit.sclk_i==0)
return FALSE;
return TRUE;
}
BYTE CTest::GetByte(BOOL bInvert)
{
int p=MAP_I;
MAPI mapi;
BYTE data=0;
for(int i=0;i<8;i++)
{
data=data*2;
SendSclks(1);
mapi._byte=_inp(p);
if(bInvert!=0)
mapi._bit.sdata_i=1-mapi._bit.sdata_i;
data=data+mapi._bit.sdata_i;
}
return data;
}
void CTest::ByteToBit(BYTE data,int* bit)
{
int b;
BYTE mask=0x80;
for(int k=0;k<8;k++)
{
b=data&mask;
if(b!=0)
bit[k]=1;
else
bit[k]=0;
mask=mask/2;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?