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

📄 24c02.c

📁 24c02读写程序
💻 C
字号:

#include <dos.h>
#include <string.h>
#include "typedefs.h"
#include "os_cpu.h"
#include "cdef.h"
#include "24c02.h"

extern uchar gpio_sel;		// this variable defined in data.asm
extern uchar gpio_ctl;
extern uchar gpioa;
extern uchar gpiob;
extern uchar gpioc;
extern uchar setings;
void DelayMs(uint number);
void Start(void);
void Stop(void);
void Ack(void);
uchar TestAck(void);
void Write24c02(uchar *Wdata,uchar RomAddress,uchar number);
void Read24c02(uchar *RamAddress,uchar RomAddress,uchar bytes);


void DelayMs(unsigned int number)
{
	unsigned char temp;
	for(;number!=0;number--){
		for(temp=155;temp!=0;temp--){

		}
	}
}

void Start(void)
{
	SDA_H;		/* SDA = 1 */
	SCL_H;          /* SCL = 1 */
	SDA_L;		/* SDA = 0 */
	SCL_L;          /* SCL = 0 */
}

void Stop(void)
{
	SCL_L;		/* SCL = 0 */
	SDA_L;		/* SDA = 0 */
	SCL_H;		/* SCL = 1 */
	SDA_H;		/* SDA = 1 */
}

void Ack(void)
{
	SDA_L;
	SCL_H;
	SCL_L;
	SDA_H;
}

void NoAck(void)
{
	SDA_H; 
	SCL_H;
	SCL_L;
}

uchar TestAck(void)
{
	uchar Err;
	
	SDA_H;
	SCL_H;
//	I2C_SDA_AS_IN;
	outportb(I2C_PORT_INDEX, I2C_DAT);
	Err = inportb(I2C_PORT_DATA);
//	I2C_SDA_AS_INOUT;
	SCL_L;
	return Err;
}

void Write8Bit(uchar input)
{
	uchar temp;
	
	for(temp=8;temp!=0;temp--){
		if(input&0x80){
			SDA_H;
		}
		else{
		        SDA_L;
		}
		SCL_H;
		SCL_L;
		input <<= 1;
	}
}

void Write24c02(uchar *Wdata,uchar RomAddress,uchar number)
{
	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(RomAddress);
	TestAck();
	for(;number!=0;number--) {
		Write8Bit(*Wdata);
		TestAck();
		Wdata++;  
	}
	Stop();
	DelayMs(10);
}

/***************************************************************************/
uchar Read8Bit(void)
{
	uchar temp,rbyte, readval;
	rbyte = 0;
	for(temp=8;temp!=0;temp--) {
		SCL_H;
		rbyte=rbyte<<1;
		;
//		I2C_SDA_AS_IN;
		outportb(I2C_PORT_INDEX, I2C_DAT);
		readval = inportb(I2C_PORT_DATA);
//		I2C_SDA_AS_INOUT;
		if(readval&I2C_SDA_H)
			rbyte |= 1;
		SCL_L;
	}
	return(rbyte);
}

/***************************************************************************/
void Read24c02(uchar *RamAddress,uchar RomAddress,uchar bytes)
{	
	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(RomAddress);
	TestAck();
	Start();
	Write8Bit(ReadDviceAddress);
	TestAck();
	while(bytes!=1) {
		*RamAddress=Read8Bit();
		Ack();
		RamAddress++;
		bytes--;
	}
	*RamAddress=Read8Bit();
	NoAck();
	Stop();
} 
 

⌨️ 快捷键说明

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