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

📄 iic.c

📁 讲述ADE7755芯片的基本知识和一些基本应用包含C语言编程
💻 C
字号:
#include <REG932.h>
#include <Define.h>
#include <Stdio.h>
#include <Intrins.h>
//-----***-IIC延时-***-----//
void wait(void)
{
	_nop_();//01
	_nop_();//02
	_nop_();//03
	_nop_();//04
	_nop_();//05
	_nop_();//06
	_nop_();//07
	_nop_();//08
	_nop_();//09
	_nop_();//10
}

void iicstart(void)//总线开始
{
     iicsda=1;
     wait();
     iicscl=1;
     wait();
     iicsda=0;
     wait();
     iicscl=0;
     wait();
}

void iicstop(void)//总线结束
{
     iicsda=0;
     wait();
     iicscl=1;
     wait();
     iicsda=1;
     wait();
}

bit ack(void)//检测
{
       bit t;
       iicsda=1;
       wait();
       iicscl=1;
       wait();
       t=iicsda;
       iicscl=0;
       wait();
       return t;
}

void noack(bit ack)//非检测
{
     iicsda=ack;
     wait();
     iicscl=1;
     wait();
     iicscl=0;
     wait();
}

bit w8bitiic(unsigned char templ)
{
    unsigned char i;
    bit t;
    for(i=0;i<8;i++)
   {
    	if(templ&0x80)
    	iicsda=1;
    	else
    	iicsda=0;
    	wait();
    	iicscl=1;
    	wait();
    	iicscl=0;
    	templ<<=1;
    }
    t=ack();
    return t;

}

unsigned char r8bitiic(void)
{
    unsigned char i;
    unsigned char byte=0;
    iicsda=1;
    for(i=0;i<8;i++)
    	{iicscl=1;
    	 byte<<=1;
    	 if(iicsda)byte|=0x01;
    	 else byte|=0x00;
    	 iicscl=0;
    	}
    return byte;
}


void wbyteiic(unsigned char deviceaddress,unsigned char dateaddress,unsigned char byte)
{
     
     iicwp=0;
     Delay(500);
     EA=0;
     iicstart();
     w8bitiic(deviceaddress);
     w8bitiic(dateaddress);
     w8bitiic(byte);
     iicstop();
     EA=1;
     iicwp=1;
     Delay(500);
}

unsigned char rbyteiic(unsigned char deviceaddress,unsigned char dateaddress)
{
	unsigned char c;
	EA=0;
	iicstart();
	w8bitiic(deviceaddress);
	w8bitiic(dateaddress);
	iicstart();
	w8bitiic(deviceaddress|0x01);
	c=r8bitiic();
	noack(1);
	iicstop();
	EA=1;
	return(c);

}

//-----***-无扇区读---多字节-***-----//
//读取指定器件无扇区指定地址多字节数据到指定地址
//Device=器件地址---单字节 
//DataAdd=字节地址---单字节
void IicMByteRead(unsigned char deviceaddress,unsigned char dateaddress,unsigned char *DataDptr,unsigned char DataLend)
{
    unsigned char i;
    EA=0;
	iicstart();
	w8bitiic(deviceaddress);
	w8bitiic(dateaddress);
	iicstart();
	w8bitiic(deviceaddress|0x01);
    for(i=0;i<DataLend-1;i++)
    {
        *DataDptr=r8bitiic();
        DataDptr++;
		noack(0);
    }
	*DataDptr=r8bitiic();
	noack(1);
	iicstop();
	EA=1;
}

//-----***-无扇区写---多字节-***-----//
//写入指定器件无扇区指定地址中的多字节数据
//Device=器件地址---单字节
//DataAdd=字节地址---双字节
//DataByte=被存放数据的地址
//DataLend=被存放数据的长度
/*void IicMByteWrite(unsigned char deviceaddress,unsigned char dateaddress,unsigned char *DataDptr,unsigned char DataLend)
{
	unsigned char i,j;
	ET0=0;
        iicwp=0;
    	for(i=0;i<3;i++)
    	{
    		iicstart();
    		w8bitiic(deviceaddress);
    		w8bitiic(dateaddress);
    		for(j=0;j<DataLend;j++)
            {
                w8bitiic(*DataDptr); 
                DataDptr++;
            }
    		iicstop();
    	}
    	iicwp=1;
    	ET0=1;
    	Delay(500);

}*/

⌨️ 快捷键说明

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