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

📄 main.c

📁 24c256程序的应用 很不错 的 值得借鉴 有什么好的东西大家一起探讨
💻 C
字号:

 /*---------------------------------------------
读写24C256/512标准程序段 适用于地址为两个字节的IIC存储器

-------------------------------------------*/
#include <reg52.h> 
#include <intrins.h> 
#define uchar unsigned char
#define uint unsigned int
/*
sbit SDA=P2^0;
sbit SCL=P2^1;
*/

sbit SDA=P1^0;
sbit SCL=P1^1;

/*-----------------------------------------------
调用方式:void start_bit(void)
函数说明:开始位
-----------------------------------------------*/
void start_bit(void)
{
 SCL=1;
 _nop_();
 SDA=1;
 _nop_(); 
 SDA=0;
 _nop_(); 
 SCL=0;
 _nop_(); 
}


/*-----------------------------------------------
调用方式:void stop_bit(void)
函数说明:停止位
-----------------------------------------------*/
void stop_bit(void)
{
 SDA=0;
 _nop_(); 
 SCL=1;
 _nop_(); 
 SDA=1;
 _nop_(); 
}


/*-----------------------------------------------
调用方式:void mast_ack(void)
函数说明:主答函数
-----------------------------------------------*/
void mast_ack(void)
{
 SCL=0;
 _nop_(); 
 SDA=0;
 _nop_();
 SCL=1;
 _nop_();
 SCL=0;
 _nop_();
 SDA=1;
 _nop_();
}


/*-----------------------------------------------
调用方式:void ack(void)
函数说明:应答函数
-----------------------------------------------*/
void ack(void)
{
 SDA=1;
 SCL=0;
 _nop_();  
 SCL=1;
 _nop_();
 //while(SDA){;}   //This may make the CPU crash. 04-3-18 17:16
 SCL=0;
 _nop_(); 
}


/*-----------------------------------------------
调用方式:void no_ack(void)
函数说明:无需应答位,在读程序中用到
-----------------------------------------------*/
void no_ack(void)
{
 SDA=1;
 _nop_(); 
 SCL=1;
 _nop_(); 
 //while(SDA){;}  //This may make the CPU crash. 04-3-18 17:16
 SCL=0;
 _nop_(); 
}


/*-----------------------------------------------
调用方式:void write_8bit(uchar ch)
函数说明:写一个字节(8位)数据
-----------------------------------------------*/
void write_8bit(uchar ch)
{
 uchar i=8;
 
 SCL=0;
 _nop_();
 while(i--)
 {
  SDA=(bit)(ch&0x80);
  _nop_(); 
  ch<<=1;
  SCL=1;
  _nop_();
  SCL=0;
  _nop_();  
 }
}


/*----------------------------------------------
调用方式:uchar read24c16(uint address)
函数说明:读24c16指定地址数据(字节读)
-----------------------------------------------*/
uchar ReadFm24c256(uint address)
{
 uchar data rdata;
 uchar i=8;
 //EA=0;//避免与串口通讯等中断冲突
 start_bit();
 write_8bit(0xA0);
 ack();
 write_8bit(address/256);
 ack();//伪写
 write_8bit(address%256);
 ack();
 start_bit();
 write_8bit(0xA1);
 ack();
 while(i--)
 {
  rdata<<=1;
  SCL=0;
  _nop_(); 
  SCL=1;
  if(SDA) rdata|=0x01;
 }
 no_ack();
 stop_bit();
 //EA=1;
 return rdata;
}

/*----------------------------------------------

-----------------------------------------------*/
void delay1(uchar x)
{
	uchar a,b;
	for(a=x;a>0;a--)
	 for(b=100;b>0;b--);
}



/*-----------------------------------------------
调用方式:void write24c16(uint address,uchar ddata)
函数说明:写数据到24c16的指定地址(字节写)
-----------------------------------------------*/
void WriteFm24c256(uint address,uchar ddata)
{
 //EA=0;  //避免与串口通讯等中断冲突
 start_bit();
 write_8bit(0xA0);
 ack();
 write_8bit(address/256);
 ack();
 write_8bit(address%256);
 ack();
 write_8bit(ddata);
 ack();   
 stop_bit();
 //EA=1;
}
 void main(void)
{
    WriteFm24c256(23,0xaa);
	delay1(100);
	P1=ReadFm24c256(23);
	while(1);
    
 /*  unsigned int count=65535;
   
   //   串口初始化
    TMOD = 0x20;
	PCON = 0x00;
	SCON = 0x50; //串口为方式1 UART
	TH1 = 0xfd;
	TL1 = 0xfd; //波特率9600
	TR1 = 1;
	//REN = 1;
	//ES = 1;
	EA = 1; 
   
  
    
   while(1)
   { WriteFm24c256(0x00,0x1c);      //把特定的值写到地址0X00中去  
   while(count--);
   count=65535;
   while(count--);
   count=65535;
   while(count--);
   count=65535;
  
   SBUF= ReadFm24c256(0x00);     //读0x00地址的值到SBUF中
   while(TI==0);       //发送中断标志
    TI=0;
   while(count--);
   count=65535;
   while(count--);
   count=65535;
    while(count--);
    count=65535;
   while(count--);
    count=65535;
    }*/
}

⌨️ 快捷键说明

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