我用的就是winio这个头文件 操作并口的
我是用pc的并口模拟IIC时序与芯片进行通信。效果还不错。
贴一下我的代码片段
void WriteSda(BOOL b)
{
unsigned long lPortVal;
GetPortVal(BASE_PORT_ADDR, &lPortVal, 1);
//lt
//printf("The Address is:%x,The Value is:%xn",BASE_PORT_ADDR,(unsigned char)(lPortVal));
//lt
lPortVal &= 0xfd;
lPortVal |= b<<1;
//Sleep(1);
SetPortVal(BASE_PORT_ADDR, lPortVal, 1);
}
BOOL ReadSda()
{
unsigned long lPortVal;
GetPortVal(BASE_PORT_ADDR+1, &lPortVal, 1);
lPortVal >>= 4;
//Sleep(1);
return lPortVal&1;
}
void WriteScl(BOOL b)
{
unsigned long lPortVal;
GetPortVal(BASE_PORT_ADDR, &lPortVal, 1);
lPortVal &= 0xfe;
lPortVal |= b;
SetPortVal(BASE_PORT_ADDR, lPortVal, 1);
//Sleep(1);
}
BOOL ReadScl()
{
unsigned long lPortVal;
GetPortVal(BASE_PORT_ADDR, &lPortVal, 1);
//Sleep(1);
return lPortVal&1;
}
BOOL SendByte(unsigned char c)
{
int i, ret;
BOOL b;
WriteScl(LOW);
for(i=7; i>=0; i--)
{
b = (c>>i) & 1;
WriteSda(b);
//printf("%dn", b);
WriteScl(HIGH);
//Sleep(1);
WriteScl(LOW);
}
// Receive Ack
WriteScl(HIGH);
WriteSda(HIGH);
if(ReadSda())
{
//AfxMessageBox("Can't Receive ACK!!");//printf("Can't Receive ACK!!n");
devoffline = false;
ret = 0;
}
else
{
//printf("ACK=0n");
devoffline = true;
ret = 1;
}
WriteScl(LOW);
return ret;
}
void Ack()
{
WriteSda(0);
// Sleep(1);
WriteScl(1);
// Sleep(1);
WriteScl(0);
// Sleep(1);
}
void NoAck()
{
WriteSda(1);
WriteScl(1);
WriteScl(0);
}
void Start()
{
WriteSda(1);
WriteScl(1);
WriteSda(0);
}
void Stop()
{
WriteSda(0);
WriteScl(1);
WriteSda(1);
}
如果想进一步了解,可以和我联系,相互探讨。
企鹅号:19570995
E-mail:fjpmbb@126.com