i2c_s.c

来自「利用P89C66X系列单片机实现I2C总线从器件函数操作库」· C语言 代码 · 共 48 行

C
48
字号
#include<REG66x.H>
/* 主器件函数库 */

/*******************************************
            设置总线函数
用于设置I2C控制寄存器,包括总线时钟,速率及从地址.不接受广播地址
********************************************/
void setbus(unsigned char addr)
{
	S1ADR=addr&0xfe;    // 设置从地址,屏蔽高7位即广播地址响应位复位
	S1CON=0XC5;    // 启动硬件I2C
}

/*******************************************
            接收数据
读取总线传来的字节数据并发送应答位.
正常接收返回1,此时读入的数据写入变量c.
接收到总线结束信号或重新启动总线信号时返回0,此时不破坏变量c的数据
********************************************/
bit recvbyte(unsigned char *c)
{
	S1CON = 0XC5;    // 清除标志位
	while(SI == 0);    // 放开总线等待接收
	if(S1STA == 0xa0)
	{
		S1CON = 0XC5;    // 先放开总线再返回0
		return 0;
	}
	*c = S1DAT;    // 取数据
	return 1;
}

/*******************************************
            发送数据
向总线发送数据c,当接收到非应答位时返回0,否则返回1
********************************************/
bit sendbyte(unsigned char c)
{
	if(S1STA == 0xc0)
	{
		S1CON = 0XC5;
		return 0;
	}
	S1DAT = c;    // 发送数据
	S1CON = 0XC5;    // 释放总线
	while(SI == 0);    // 等待字节数据发送完成
	return 1;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?