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

📄 24cxx.bak

📁 此源码是用的NEC公司的MCU78F0396
💻 BAK
字号:
//******************************************************
//  Filename :	24CXX.c
//  Abstract :	This file implements main function.
//
//  Device    :	uPD78F0396
//  CreateTime: 2006/11/
//  ModifyTime:
//  Author    :  

//****************************************************** 
#include "UsrComm.h"
#include "AllSerial.h"
#include "24CXX.h"+-

//#define 24CXX_ACK_WAIT   100

//======================================================= 
 
MD_STATUS E24CXX_ReadMultData( unsigned short wAddr,unsigned short wLength ,unsigned char *pBuf)
{
	unsigned short i;
	unsigned short wWait;
	SetIORBit(IICC0, 0x80); // IICE0 = 1  
	SetIORBit(IICC0, 0x02); // generate start condition     	
     
	IIC0 = IIC_24C64ADDR_W; 
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)(wAddr & 0x00ff);
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
    
	SetIORBit(IICC0, 0x02); // generate start condition     	
    
	IIC0 = IIC_24C64ADDR_R;
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK; 
	
	ACKE0 = 1;   //Enable acknowledgment
	for (i = 0; i < wLength; i++)
	{  
		WREL0 = 1; // start receive (write WREL0 = 1 OR IIC0 = 0xff for send 9 clock ) 	 
		while((IICIF0 == 1)&& (wWait > 0)){wWait--;}	 
		*pBuf++ = IIC0;
	}
	
	ClrIORBit(IICC0, 0x04); // ACK STOP 
    SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
    return MD_OK ;
}
 
//===============================================================================

MD_STATUS E24CXX_WriteSingleByte(unsigned wAddr,unsigned char ucData)
{
   	SetIORBit(IICC0, 0x80); // IICE0 = 1  
	SetIORBit(IICC0, 0x02); // generate start condition     	
	WTIM0 = 1;  

    IIC0 = IIC_24C64ADDR_W; 
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)(wAddr & 0x00ff);
   	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = ucData;
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
    SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
	return MD_OK;
}

//===============================================================================

MD_STATUS E24CXX_WritePage(unsigned short wAddr,    unsigned char *pBuf)
{
	unsigned short i;
	SetIORBit(IICC0, 0x80); // IICE0 = 1  
	SetIORBit(IICC0, 0x02); // generate start condition     	
	
	IIC0 = IIC_24C64ADDR_W; 
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)(wAddr & 0x00ff);
   	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
    
	for( i = 0; i < E24C64_PAGESIZE; i++)
	{
		IIC0 = *pBuf;
		if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	}
	
    SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
	return MD_OK;
}

//===============================================================================

unsigned int E24CXX_WriteMultData( unsigned int wAddr,unsigned int wLength ,unsigned char *pBuf)
{
	unsigned int i;
	
	SetIORBit(IICC0, 0x80); // IICE0 = 1  
	SetIORBit(IICC0, 0x02); // generate start condition     	
	
	IIC0 = IIC_24C64ADDR_W; 
	if(IIC0_CheckACK() == MD_NACK) return MD_NACK;
	
	IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
	if(IIC0_CheckACK() == MD_NACK) return MD_NACK;
	
	IIC0 = (unsigned char)(wAddr & 0x00ff);
	if(IIC0_CheckACK() == MD_NACK) return MD_NACK;
    
	SetIORBit(IICC0, 0x02); // generate start condition     	
    
	//IIC0 = IIC_24C64ADDR_R;
	//if(IIC0_CheckACK() == MD_NACK)return MD_NACK; 
	
	
	for (i = 0; i < wLength; i++)
	{  
		SetIORBit(IICC0, 0x20); // start receive (write WREL0 = 1 OR IIC0 = 0xff for send 9 clock ) 	 
		*pBuf++ = IIC0;
	}
	
	ClrIORBit(IICC0, 0x04); // ACK Disanble 
    SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
    return MD_OK ;
	
} 

//************************************************************************************

MD_STATUS RX8025_ReadMultData( unsigned char ucAddr,unsigned char ucLength, unsigned char *pBuf )
{ 
	unsigned int wWait;
	unsigned char i;
	
	wWait = IIC_WAIT;
     IICE0 = 1;    // IIC operation Enable
	 WTIM0 = 1;    // INT request is generated at the ninth clock's falling edge
     STT0 =  1;    // generate start condition     
	  

	IIC0 = IIC_RTC8025ADDR_W; 
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)(ucAddr<<4); 
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
     
	STT0 =  1; // generate start condition     	
    
	IIC0 = IIC_RTC8025ADDR_R ;
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK; 
	
	WTIM0 = 0; //INT request is generated at the eighth clock's falling edge
	ACKE0 = 1;
	for (i = 0; i < ucLength; i++)
	{  
		WREL0 = 1; // start receive (write WREL0 = 1 OR IIC0 = 0xff for send 9 clock ) 	 
		while((IICIF0 == 1)&& (wWait > 0)){wWait--;}
		//while(((IICC0 &0xf7)==0xf7) && (wWait >0)){wWait--};
		*pBuf++ = IIC0;
	}
	
	ACKE0 = 0; // ACK STOP 
    SPT0 = 1;// generate stop condition and the IIC bus release;     
    return MD_OK ;
	
}

//===============================================================================

MD_STATUS RX8025_WriteSingleData( unsigned char ucAddr,unsigned char ucData )
{ 
	unsigned int wWait;
	unsigned char i;
	
	wWait = IIC_WAIT;
    IICE0 = 1;    // IIC operation Enable
	WTIM0 = 1;    // INT request is generated at the ninth clock's falling edge
    STT0 =  1;    // generate start condition     
	  

	IIC0 = IIC_RTC8025ADDR_W; 
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
	
	IIC0 = (unsigned char)(ucAddr<<4); 
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
     
	STT0 =  1; // generate start condition     	
    
	IIC0 = IIC_RTC8025ADDR_R ;
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK; 
		 	 
 	IIC0 = ucData;
	if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
 	
	ACKE0 = 0; // ACK STOP 
    SPT0 = 1;// generate stop condition and the IIC bus release;     
    return MD_OK ;
	
}
//===============================================================================

MD_STATUS RX8025_WriteMultData( unsigned char ucAddr,unsigned char ucLength, unsigned char *pBuf)
{ 
	unsigned char i;
	for(i = 0; i < ucLength; i++)
	{
	 if (RX8025_WriteSingleData(ucAddr,pBuf[i]));
	 return MD_ERROR;
	}
	return MD_OK;
			
}


⌨️ 快捷键说明

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