⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2_bus.c

📁 本程序为24C系列芯片读写程序,我已经编译调试过了.
💻 C
字号:
#include "m1101.h"
/************************************************
函数名称:delay(uchar time)
函数功能: 10ms延时函数
应用范围: 只在本文件中使用,内部函数
入口参数: uchar time
出口参数: 无
*************************************************/
void delay(uchar time)
{
  uchar i,j;
  for(i=100;i>0;i--)
      {
	     for(j=time;j>0;j--)
		    {
	          _nop_();
			}
	  }
}
/************************************************
函数名称:Start_iic(void)
函数功能:启动IIC总线
应用范围:局部函数,只在本文件中使用
入口参数: 无
出口参数: 无
*************************************************/	
void Start_iic(void)
{
  scl=1;
  sda=1;		     //开始信号,当SCL=1;SDA由高变为低时候,开始信号
  _nop_ ();
  _nop_ ();
  _nop_ ();
  _nop_ ();		   //建立开始信号时间
  sda=0;	       //发出开始信号
  _nop_ ();
  _nop_ ();		   //总线保持时间
  _nop_ ();
  _nop_ ();
  scl=0;           //释放总线   ,一定注意SCL=0
  _nop_();
  _nop_();

}
/************************************************
函数名称:void Stop_iic(void)
函数功能:挂起IIC总线
应用范围:局部函数,只在本文件中使用
入口参数: 无
出口参数: 无
*************************************************/	
void Stop_iic(void)
{
  scl=1;
  sda=0;		     //开始信号,当SCL=1;SDA由低变为高时候,开始信号
  _nop_ ();
  _nop_ ();
  _nop_ ();
  _nop_ ();		   //建立停止信号时间
  sda=1;	       //发出停止信号
  _nop_ ();
  _nop_ ();
  _nop_ ();		   
  _nop_ ();
  scl=0;           //钳住总线
  _nop_();
  _nop_();

}
/************************************************
函数名称:Ack(bit)
函数功能:应答函数,功能是主控制器进行应答信号(可以是应答或是非应答信号)
          当数据从E2ROM中被送出或者发送到E2ROM中,在低9个周期送出一个0;
		  已确认他送接受每个字
应用范围:全局函数
入口参数: 无
出口参数: 无
*************************************************/	
void Ack(bit a)
{
   if(a) sda=1;
   else sda=0;
   _nop_();  
   _nop_();          
   scl   =   1;  
   _nop_();  
   _nop_();  
   _nop_();  
   _nop_();  
   _nop_();          
   scl   =   0;  
   _nop_();  
   _nop_();    
}


/************************************************
函数名称:Read_byte()
函数功能:读取总线上一个数据
应用范围:全局函数
入口参数: 无
出口参数: uchar rom_data
*************************************************/	
uchar  Read_byte(void)
{
  uchar i,rom_data=0;
  sda=1;
  for(i=0;i<8;i++)
     {
	   scl=1;
	   _nop_ ();
	   _nop_ ();
	   rom_data<<=1;
	   if(sda)rom_data=rom_data+1;
	   else rom_data=rom_data;
	   scl=0;
       _nop_ ();
      _nop_ ();	  
	 }

	return (rom_data);
}
/************************************************
函数名称:Write_byte(uchar byte)
函数功能:往总线上写入数据
应用范围:全局函数
入口参数: uchar byte
出口参数: 无
*************************************************/	
void Write_byte(uchar byte)
{
  uchar i;
  for(i=0;i<8;i++)          //数据长度为8位
     {
	   if(byte&0x80) sda=1;
	   else sda=0;
	   _nop_ ();
	   scl=1;               //将时钟置为高,开始接受数据
	   _nop_ ();
       _nop_ ();		   
       _nop_ ();
	   _nop_ ();		  //始终周期
	   scl=0;    
	   byte<<=1;

	 }

}  

void clk()
{
  scl=1;
  _nop_ ();
  _nop_ ();		   
  _nop_ ();
  _nop_ ();		  //始终周期 
   scl=0;
  _nop_ ();
  _nop_ ();		   
  _nop_ ();
  _nop_ ();		  //始终周期
}
/************************************************
函数名称:Read_e2rom(uint add)
函数功能:从IIc器件中指定地址读出数据
应用范围:全局函数
入口参数: uchar byte
出口参数: 无
*************************************************/
uchar Read_e2rom(uint add)
{
  uchar h_add,l_add,rom_data;    
  h_add=add/256;	 //计算搞8位地址
  l_add=add%256; 	 //计算底8位地址
  Start_iic();          //启动总线
  Write_byte(0xa0);     //启动写操作,先写入地址
  clk();
  Write_byte(h_add);     //先写入高8位地址
  clk();
  Write_byte(l_add);     //先写入低8位地址
  clk();

  Start_iic();          //启动总线
  Write_byte(0xa1);	//启动读操作
  clk();
  rom_data=Read_byte();
  clk();
  Stop_iic();
  return (rom_data);
}
/************************************************
函数名称:void Write_e2rom(uint add,uchar byte)
函数功能:往指定地址中写入数据
应用范围:全局函数
入口参数: uint add,uchar byte
出口参数: 无
*************************************************/
void Write_e2rom(uint add,uchar byte)
{
  uchar h_add,l_add,i,j;  
  h_add=add/256;	 //计算搞8位地址
  l_add=add%256; 	 //计算底8位地址
  Start_iic();        //启动总线
  Write_byte(0xa0);     //启动写操作,先写入地址
  clk();
  Write_byte(h_add);     //先写入高8位地址
  clk();
  Write_byte(l_add);     //先写入低8位地址
  clk();
  Write_byte(byte);     //先写入8位数据
  clk();
  Stop_iic();
  for(i=200;i>0;i--)
     {
	   for(j=30;j>0;j--)
	     {
		    _nop_ ();	
			_nop_ ();	
		 }
	 }
}

⌨️ 快捷键说明

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