📄 lpc915_i2c.c
字号:
#include "reg915.h"
#include "LPC915_I2C.H"
sbit SI = I2CON^3;
#define GENERATE_STOP 0x54 //置位 STO, 复位 STA 、 SI
#define RELEASE_BUS_ACK 0x44 //复位 STO,STA,SI 并置位 AA (ack)
#define RELEASE_BUS_NOACK 0x40 //复位 STO,STA,SI 并置位 AA (noack)
#define RELEASE_BUS_STA 0x64 //起动总线/重新起动总线, 置位 STA
#define sla 0x6C //器件地址
//申请总线
void GetBus()
{ I2SCLH = 15; //柚肧SCL高电平的PCLK周期数
I2SCLL = 15; //柚肧CL低电平的PCLK周期数,6MHz时为100Kbit/S
//申请成为主机,起动总线。使用内部SCL发生器,I2EN和AA置位。
I2CON = RELEASE_BUS_STA;
while( SI==0 ); //等待起始位的发送
}
//发送数据函数
void SendByte(unsigned char c)
{ I2DAT = c;
I2CON = RELEASE_BUS_ACK; //清除SI位等等
while( SI==0 ); //等待数据的发送
}
//向寄存器地址发送字节数据函数
bit ISendByte(unsigned char suba, unsigned char dat)
{ GetBus(); //启动总线
SendByte(sla); //发送器件地址,并接收应答位
if( I2STAT!=0x18 ) //无从机应答则退出操作
{ I2CON = GENERATE_STOP;
return(0);
}
SendByte(suba); //寄存器器件地址,并接收应答位
if( I2STAT!=0x28 )
{ I2CON = GENERATE_STOP;
return(0);
}
SendByte(dat); //发送数据
if( I2STAT!=0x28 )
{ I2CON = GENERATE_STOP;
return(0);
}
I2CON = GENERATE_STOP; //结束总线
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -