sbitIC_SDA=P3A7;
unsignedcharlC_Re_Time;
unsignedcharlC_Err_Flag;voidTimerO」nit(void)
{
TMOD=OxOO;信方式:
I2C
2.通信端口:
IC_SCL,IC_SDA
3.通信地址:
0x0101000x?
*********************************************
voidlC_Start(void)〃启动IC通信
{?
IC_SDA=1;
}
voidlC_Stop(void)〃停止IC通信
{
}
voidlC_Receive_Ack(void)〃接受ACK
{?
IC_SDA=1;
IC_SCL=1;
?
Delay();?
IC_Re_Time=O;?
while(IC_Re_Time<=30){
if(IC_SDA==O)
{
IC_Err_Flag=1;
}
}
IC_SCL=O;
Delay();
}
〃voidlC_Send_ACK(void)〃发送ACK
//{//ifreadmanydatasatatime,thiscanbeused
〃IC_SDA=O;
〃Delay();
〃IC_SCL=1;
〃Delay();
〃IC_SCL=O;
〃Delay();
〃IC_SDA=1;
//}
voidlC_Send_NAck(void)〃发送NACK
Delay();
}
voidlC_Write_Byte(unsignedcharData)//写数据到8574
{
unsignedchari;?
for(i=0;i<=7;i++)
{
if(VALBIT(Data,(7-i)))//dataoutmsb
IC_SDA=1;
else
IC_SDA=0;
IC_SCL=1;
Delay();
IC_SCL=0;
}
unsignedcharlC_Read_Byte(void)〃从8574读取一个数据
unsignedchari;
unsignedcharData;
for(i=0;i<=7;i++)
SETBIT(Data,(7-i));//datainmsbtooelse
CLRBIT(Data,(7-i));
IC_SCL=0;
Delay();
}
return(Data);
}
voidlC_Write_Data(unsignedcharData)
{
unsignedcharwrite_time;
unsignedcharwrite_data;
write_data=Data;
for(write_time=0;write_time<=2;write_time++)
{?
IC_Start();
IC_Write_Byte(0x40);
IC_Receive_Ack();
IC_Write_Byte(write_data);
IC_Receive_Ack();?
IC_Stop();
if(IC_Err_Flag==0)
break;
}?
}
unsignedcharlC_Read_Data(void)
{
unsignedcharReturn_Data;
unsignedcharread_time;
for(read_time=0;read_time<=2;read_time++)
{?
IC_Start();
IC_Write_Byte(0x41);?
IC_Receive_Ack();?
Return_Data=IC_Read_Byte();?
IC_Send_NAck();
IC_Stop();?
if(IC_Err_Flag==0)
{
return(Return_Data);
break;
}?
}
voidPCF8574_lnit(void)
{
IC_Write_Data(OxfO);〃输入状态的必须开始的时候置为1,输出为0
}
voidmain(void)
{
unsignedchartemp3;
Timer0_lnit();
PCF8574_Init();
while
(1)
{
temp3=IC_Read_Data();
IC_Write_Data(OxOf);
Delay();
;中间可以添加你需要的模块,比如显示或者其他的操作等
中断服务子程序
*******************************************************
externvoidexternalO_rt(void)interruptO//INTO
,标准,定时中断
externvoideitO_rt(void)interrupt1//TO
THO=Ox1e;
{
}
voideit1_rt(void)interrupt3using1//T1,标准
voidsci_rt(void)interrupt4using1//UART
it2_rt(void)interrupt5using1//T23
种工作模式,输入捕捉、自动重载和
波形发生器
voidPCA_rt(void)interrupt6using1//PCA
voidKBDIT_rt(void)interrupt7using1//keyboard
voidspi_rt(void)interrupt9using1//SPI