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 + -
显示快捷键?