📄 i2c_s.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -