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

📄 tm24cl02.c

📁 首先pic和铁电24c02通讯
💻 C
字号:
#include"lcd.h"
#include"pic18fxx2.h"

//#define uchar unsigned char
//#define uint unsigned int
//#define ulong unsigned long
//void delay2(uchar delay_temp);   //长延时
//void delaym(uchar delaym_temp);  //短延时
//void sta(void);//启动IIC总线
//void stop(void);//停止IIC总线数据传送
//void mack(void);//发送应答位
//void mnack(void);//发送非应答位
//uchar cack(void);//应答位检查
//void wrbyt(uchar date_24c02);//向SDA线上发送一个数据字节
//uchar rdbyt(void);//从SDA线上读取一个数据字节
unsigned int ii;

void delay2(uchar delay_temp)//延时子程序
{
	uchar i,j;
	for(i=0;i<delay_temp;i++)
	{
		for(j=0;j<200;j++);
	}
}

void delaym(uchar delaym_temp)//延时子程序
{
	uchar i;
	for(i=0;i<delaym_temp;i++);
}

void sta(void)//启动IIC总线
{
	slk=0;
    sda=1;
	slk=1;
	delaym(1);
	sda=0;
	delaym(1);
	slk=0;
}

void stop(void)//停止IIC总线数据传送
{
	slk=0;
    sda=0;
	slk=1;
	delaym(1);
	sda=1;
	delaym(1);
	slk=0;
}

/*
void mack(void)//发送应答位
{
	at24c02_sda=0;
	at24c02_scl=1;
	delaym(1);
	at24c02_scl=0;
	at24c02_sda=1;
}
*/

uchar cack(void)//应答位检查
{
	uchar i;
	i=0x00;
	sda=1;
	slk=1;
	if(sda==1)i=0xff;
	slk=0;
	return i;
}

void mnack(void)//发送非应答位
{
	sda=1;
	slk=1;
	delaym(1);
	slk=0;
	sda=0;
}

void wrbyt(uchar w24)//向SDA线上发送一个数据字节
{
	uchar i,j;
	j=0x80;
	for(i=0;i<8;i++)
	{
		if((w24&j)==0)
		{
			sda=0;
			slk=1;
			delaym(1);
			slk=0;
		}
		else
		{
			sda=1;
			slk=1;
			delaym(1);
			slk=0;
			sda=0;
		}
		j=j>>1;
	}
}

unsigned char  rd()    //从SDA线上读取一个数据字节
{
uchar i,j;
	j=0x00;
	for(i=0;i<8;i++)
	{
		sda=1;
		slk=1;
		if(sda==0)
		{
			j=j&0xfe;
		}
		else
		{
			j=j|0x01;
		}
		if(i!=7)j=j<<1;
		slk=0;
	}
	return j;
}

uchar wr(unsigned char dd)
{
uchar    m;
    for(ii=0;ii<2;ii++)//写入0x55
	{
		sta();
		wrbyt(0xa0);//写24C02
    	if(cack()!=0)break;
		wrbyt((uchar)ii);//地址
         //wrbyt(0x00);
	    if(cack()!=0)break;
		wrbyt(dd);//写数据
		if(cack()!=0)break;
		stop();
		delay2(20);//停止到启动信号之间需要延时
	}
	for(ii=0;ii<2;ii++)//读出并校验0x55
	{
		sta();
		wrbyt(0xa0);
		if(cack()!=0)break;
		wrbyt((uchar)ii);//地址
        //wrbyt(0x00);
		if(cack()!=0)break;
		sta();
		wrbyt(0xa1);//读24C02
		if(cack()!=0)break;
        m=rd();
        if(m==dd)break;
		//delaym(1);//	if(temp_1!=dd)break;
        mnack();
		stop();
		delay2(20);
	}
return m;
}


⌨️ 快捷键说明

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