lpc915_i2c.c

来自「基于飞利浦915控制FM发射模块和显示驱动原代码.」· C语言 代码 · 共 52 行

C
52
字号

#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 + =
减小字号Ctrl + -
显示快捷键?