PCF8574与单片机通讯

来源:百度知道 编辑:UC知道 时间:2024/09/28 06:19:50
用I2C总线 简单发送一个字节8574的端口数据,其中MDO为数据线MCO为时钟线
请高手帮我看看程序哪里有问题?调了好久就是不通,我可以确定硬件没问题。
uchar slvadr=0x40 ; //被控器地址
uchar ack;

void PCF8574init(void)
{
I2CM=1;
}

void delay1ms(uchar x)
{
unsigned char i,j;
while(x--)
{
for(i=5;i>0;i--)
for(j=132;j>0;j--);
}
}

/*---------------------------------------------------------------------------------------------------
开始:START
描述:启动I2C 总线子程序--发送I2C 起始条件
---------------------------------------------------------------------------------------------------*/
void start(void)
{
MDE=1;
MCO=1;
MDO=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
MDO=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
MCO=0;
}

void PCF8574init(void)
{
I2CM=1;
}

void delay1ms(uchar x)
{
unsigned char i,j;
while(x--)
{
for(i=5;i>0;i--)
for(j=132;j>0;j--);
}
}

/*---------------------------------------------------------------------------------------------------
开始:START
描述:启动I2C 总线子程序--发送I2C 起始条件
---------------------------------------------------------------------------------------------------*/
void start(void)
{
MDE=1;
MCO=1;
MDO=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
MDO=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
MCO=0;
}

void wrbyt(uchar shu)
{
uchar i;
ack=0;
for(i=0;i<8;i++)
{
if((shu&0x80)>0)
{
MDO=1;
_nop_();
MCO=1;
_nop_();
_nop_();
_nop_();
MCO=0;
// MDO=0;