📄 drv_1161.h
字号:
// ==== 1161 ====
void Sta_PCF1161T(void) //起始
{
IIC_1161=1;
NOP;
NOP;
IIC_CLK=1;
NOP;
NOP;
NOP;
NOP;
IIC_1161=0;
NOP;
NOP;
NOP;
NOP;
IIC_CLK=0;
NOP;
NOP;
}
void Stop_PCF1161T(void) //停止
{
IIC_1161=0;
NOP;
NOP;
IIC_CLK=1;
NOP;
NOP;
NOP;
NOP;
IIC_1161=1;
NOP;
NOP;
NOP;
NOP;
IIC_CLK=0;
NOP;
NOP;
}
void Master_NAck(void) //主器件应答非信号
{
IIC_1161=1;
NOP;
IIC_CLK=1;
NOP;
IIC_CLK=0;
NOP;
NOP;
}
bit Slave_Ack(void) //检测应答信号,返回SDA状态
{
bit flag_pcf=0;
IIC_1161=1;
NOP;
IIC_CLK=1;
NOP;
NOP;
NOP;
NOP;
if (IIC_1161)
{
flag_pcf=1; //对方没应答
}
else
{
flag_pcf=0; //对方应答了
}
NOP;
IIC_CLK=0;
return(flag_pcf);
}
void out_1b_1161(unsigned char byte) //发送一个字节
{
unsigned char i;
IIC_CLK = 0;
NOP;
NOP;
for (i=0;i<8;i++)
{
IIC_1161=(bit)(byte & 0x80);
NOP;
NOP;
IIC_CLK=1;
NOP;
NOP;
NOP;
NOP;
IIC_CLK=0;
NOP;
NOP;
NOP;
NOP;
IIC_1161=0;
NOP;
NOP;
byte <<= 1;
}
}
unsigned char in_1b_1161(void) //接收一个字节
{
unsigned char byte1 = 0;
unsigned char i;
for (i=0;i<8;i++)
{
byte1 <<= 1;
IIC_CLK=1;
NOP;
if(IIC_1161) byte1 |= 0x01;
NOP;
NOP;
IIC_CLK=0;
NOP;
NOP;
NOP;
NOP;
}
return(byte1);
}
unsigned char rd_1b_1161(unsigned char address) //读一个字节
{
unsigned char dat;
bit flag_ack=0;
//WP_1021 = 0;
do
{
do
{
do
{
Sta_PCF1161T(); // 启动PCF1161T
out_1b_1161(0xa0); //虚写 10100000
flag_ack=Slave_Ack();
}while (flag_ack);
out_1b_1161(address);
flag_ack=Slave_Ack();
}while (flag_ack);
Sta_PCF1161T();
out_1b_1161(0xa1); // 10100001
flag_ack=Slave_Ack();
}while (flag_ack);
dat = in_1b_1161();
Master_NAck(); //无应答
Stop_PCF1161T(); // 停止
//WP_1021 = 1;
return(dat);
}
void wt_1b_1161(unsigned char address,unsigned char dat) //写一个数据字节
{
bit flag_ack=0;
//WP_1021 = 0;
do
{
do
{
do
{
Sta_PCF1161T();// 启动PCF1161T
out_1b_1161(0xa0); //虚写 10100000
flag_ack=Slave_Ack();
}while(flag_ack);
out_1b_1161(address);
flag_ack=Slave_Ack();
}while(flag_ack);
out_1b_1161(dat); // 寄存器地址 0xa0
flag_ack=Slave_Ack();
}while(flag_ack);
Stop_PCF1161T(); // 停止
//WP_1021 = 1;
}
void wt_nb_1161(unsigned char address,unsigned char *idata PCF1161T,unsigned char number) //写n个字节
{
unsigned char i;
bit flag_ack=0;
//WP_1021 = 0;
do
{
do
{
do
{
Sta_PCF1161T();// 启动PCF1161T
out_1b_1161(0xa0); // 器件地址写 0xa0 10100000
flag_ack=Slave_Ack();
}while(flag_ack);
out_1b_1161(address);
flag_ack=Slave_Ack();
}while(flag_ack);
for (i=0;i<number;i++)
{
out_1b_1161(*PCF1161T); // 寄存器地址 0xa0
PCF1161T++;
flag_ack=Slave_Ack();
if(flag_ack) break;
}
}while (flag_ack);
Stop_PCF1161T(); // 停止
//WP_1021 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -