//*********************************************CAT9555初始化
void CAT9555_Init(U8 iich,U8 addrch){
CAT9555_CH_CS(addrch); //将IIC总线扩展切换到指定通道地址
delay_ms(100);
IIC_Start(iich);
IIC_Send_Byte(iich,WriteAddr_CAT9555); //写硬件地址
IIC_Wait_Ack(iich);
IIC_Send_Byte(iich,CFG_ADR); //写配置寄存器地址
IIC_Wait_Ack(iich);
IIC_Send_Byte(iich,ALLIN); //写配置数据 端口0 全为输入
IIC_Wait_Ack(iich);
IIC_Send_Byte(iich,ALLOUT); //写配置数据 端口1 全为输出
IIC_Wait_Ack(iich);
IIC_Stop(iich);
}
/*
函数名:CAT9555_Output
函数功能:将指定引脚IO输出高电平或低电平
返回值:无
参数(iich)1:i2c通道选择;
参数(addrch)2:CAT9555地址选择--由A0,A1,A2决定,CAT9555_CH_CS(addrch)函数切换
参数(bitnum)3:输入输出--引脚(引脚顺序:PIN0--PIN7对应P00--P07,PIN8--PIN15对应P10--P17)
参数(Status)4:输出状态---1.高电平。0.低电平
*/
//**********************************************CAT9555输出
void CAT9555_Output(U8 iich,U8 addrch,U8 bitnum,U8 status){
U8 L8Bit,H8bit;
GPIO_STA=(GPIO_STA &(~(1<<bitnum)))|(status<<bitnum);
H8bit=GPIO_STA>>8;
L8bit=GPIO_STA&0xff;
CAT9555_CH_CS(addrch); //将IIC总线扩展切换到指定通道地址
delay_ms(100);
IIC_Start(iich);
IIC_Send_Byte(iich,WriteAddr_CAT9555); //写硬件地址
IIC_Wait_Ack(iich); //等待应答
IIC_Send_Byte(iich,OUT_ADR); //写输出寄存器地址
IIC_Wait_Ack(iich); //应待应答
IIC_Send_Byte(iich,L8bit); //写端口0输出状态
IIC_Wait_Ack(iich); //等待应答
IIC_Send_Byte(iich,H8bit); //写端口1输出状态
IIC_Wait_Ack(iich); //等待应答
IIC_Stop(iich);
}
/*
函数名:CAT9555_Read
函数功能:读出指定引脚IO的高低电平状态
返回值:返回指定引脚电平状态,1=高电平,0=低电平
参数(iich)1:i2c通道选择;
参数(addrch)2:CAT9555地址选择--由A0,A1,A2决定,CAT9555_CH_CS(addrch)函数切换
参数(bitnum)3:输入输出--引脚(引脚顺序:PIN0--PIN7对应P00--P07,PIN8--PIN15对应P10--P17)
*/
//***********************************************CAT9555 IO读取
U8 CAT9555_Read(U8 iich,U8 addrch,U8 bitnum){
U16 rdata;
U8 L8bit,H8bit;
CAT9555_CH_CS(addrch); //将IIC总线扩展切换到指定通道地址
delay_ms(100); //延时100ms
IIC_Start(iich); //启动
IIC_Send_Byte(iich,WriteAddr_CAT9555); //写硬件地址
IIC_Wait_Ack(iich); //等待应答
IIC_Send_Byte(iich,INT_ADR); //写控制字节切换到输入寄存器
IIC_Wait_Ack(iich); //等待应答
IIC_Start(iich); //重新启动
IIC_Send_Byte(iich,ReadAddr_CAT9555); //读硬件地址
IIC_Wait_Ack(iich); //等待应答
L8bit=IIC_Read_Byte(iich,1); //读取端口0数据
H8bit=IIC_Read_Byte(iich,0); //读取端口1数据
IIC_Stop(iich); //停止
rdata=(H8bit<<8)|L8bit;
rdata=(rdata>>bitnum)&0x01;
return rdata;
}
|