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

📄 ic64.c

📁 基于LPC2132的AT24C64C51程序设计
💻 C
字号:
#include "config.h"
#include <intrins.h>

extern bit IC_ERR;

/*=======================================================================     
释放总线时,默认状态为:IC_SDA-"1",IC_SCL-"0"
=========================================================================*/        
void     delay_nus()
{
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_(); 
}

void     ic64_start()
{
    IC_SDA=1;
	delay_nus();
	IC_SCL=1;
	delay_nus();
	
	IC_SDA=0;                                    // scl--------|________
    delay_nus();								 // sda --|_______
	IC_SCL=0;
    delay_nus();                                      
} 
 
void     ic64_stop()
{
	delay_nus();
	IC_SDA=0;                                    // scl___|------------|____
    delay_nus();                                 // sda_______|--------
    IC_SCL=1;
    delay_nus();
    IC_SDA=1;
}
 
void     send64_ack()
{
	delay_nus();
	IC_SDA=0;                                    //scl_________|---|__
    delay_nus();                                     //sda====________
    IC_SCL=1;
    delay_nus();
    IC_SCL=0;
    delay_nus();	
}

void     send64_noack()
{
	delay_nus();
	IC_SDA=1;                                    //scl_______|----|__
    delay_nus();                                 //sda-----------
    IC_SCL=1;
    delay_nus();
    IC_SCL=0;
    delay_nus();
}

void     write64_8bit(uint8  ch)
{
	uint8   data   i=8;
    
	while (i--)
    {
    	delay_nus();
		IC_SDA = (bit)(ch&0x80);
		ch<<=1;
        delay_nus();
        
        IC_SCL=1;
        delay_nus();
        IC_SCL=0;
        delay_nus();
    }

	IC_SDA=1;
    delay_nus();                                 //scl____|--------|_____
    IC_SCL=1;                                    //sda---------|_____
    delay_nus();
	
	if(IC_SDA)
	{
		IC_ERR = 1;
	}

    IC_SCL=0;
	delay_nus();
}

uint8    read64_8bit()
{
	uint8   data  ddata=0;
    uint8   data  i=8;
 
	delay_nus();
	IC_SDA=1;

    while (i--)
    {	
	    ddata <<= 1;
    	
		delay_nus();
		IC_SCL=1;
        
     
        if(IC_SDA)   
        {
        	ddata|= 0x01;
        }
        
		delay_nus(); 
     	IC_SCL=0;
    }	
    
	return(ddata);	
}

/*****************************************************************
*功能:写24C64卡
*输入参数:*p       -   缓冲区首址
           address	- 	64卡片内地址
		   dcnt		-   写的个数
*返回值:无
*****************************************************************/
void    write24c64(uint8 *p, uint16 address, uint8 dcnt)
{
	uint8 data i; 
    
	ic64_start();                                /*START*/
    write64_8bit(0xa0);                          /*置为写模式*/
    write64_8bit(address>>8);                    /*写从地址*/
    write64_8bit(address&0x00ff);
 
    for(i=0;i<dcnt;i++)
    {
    	write64_8bit(p[i]);
    }

 	ic64_stop();
}

/*****************************************************************
*功能:读24C64卡
*输入参数:*p       -   缓冲区首址
           address	- 	64卡片内地址
		   dcnt		-   读的个数
*返回值:无
*****************************************************************/
void    read24c64(uint8 *p, uint16 address, uint8 dcnt)
{
	uint8  data  i;
  
    ic64_start();                                /*START*/
    write64_8bit(0xa0);                          /*置为写模式*/
    write64_8bit(address>>8);                    /*写从地址*/
    write64_8bit(address);
 
    ic64_start();                                /*START*/
    write64_8bit(0xa1);                          /*置为读模式*/
 
    for(i=0;i<dcnt-1;i++)
    {
    	p[i]=read64_8bit();
        send64_ack();
    }
 
    p[i]=read64_8bit();
    send64_noack();

    ic64_stop();
}

⌨️ 快捷键说明

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