📄 fm3130.c
字号:
#define ENABLE_BIT_DEFINITIONS
#include <inavr.h>
#include <ioavr.h>
#include <stdio.h>
#include <iom16.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
#define SCL_HIGH {DDRC_Bit0=0;PORTC_Bit0=0;}
#define SCL_LOW {DDRC_Bit0=1;PORTC_Bit0=0;}
//#define SCL_IN DDRC&=0xFE;
//#define SCL_OUT DDRC|=0x01;
#define SDA_HIGH {DDRC_Bit1=0;PORTC_Bit1=0;}
#define SDA_LOW {DDRC_Bit1=1;PORTC_Bit1=0;}
#define SDA_IN DDRC&=0xFD;
#define DELAYTIME 10
//#define SDA_OUT DDRC|=0x02;
uint8 DATAR01,DATAR11,DATAR21,DATAR31,DATAR41,flag = 0;
void delay (unsigned int TT)
{
for (;TT!=0;TT--);
}
void init(void)
{
SCL_HIGH;
delay (DELAYTIME);
SDA_HIGH;
delay (DELAYTIME);
}
void IIC_START (void)
{
//SDA_OUT;
// SCL_OUT;
SCL_HIGH;
SDA_HIGH;
delay (DELAYTIME);
SDA_LOW;
delay (DELAYTIME);
}
void IIC_STOP (void)
{
//SDA_OUT;
//SCL_OUT;
SCL_LOW;
delay (DELAYTIME);
SDA_LOW;
delay (DELAYTIME);
SCL_HIGH;
delay (DELAYTIME);
SDA_HIGH;
delay (DELAYTIME);
}
void IIC_ACK (void)
{
//SDA_OUT;
//SCL_OUT;
SCL_LOW;
delay (DELAYTIME);
SDA_LOW;
delay (DELAYTIME);
SCL_HIGH;
delay (DELAYTIME);
SCL_LOW;
delay (DELAYTIME);
}
uint8 IIC_TX_DATA (uint8 DATA)
{
uint8 Rn=8,RR=0x80;
//SDA_OUT;
//SCL_OUT;
for (;Rn!=0;Rn--)
{
SCL_LOW;
delay (DELAYTIME);
if ((DATA&RR)!=0)
{
SDA_HIGH;
}
else
{
SDA_LOW;
}
delay (DELAYTIME);
SCL_HIGH;
delay (DELAYTIME);
RR>>=1;
}
SCL_LOW;
delay (DELAYTIME);
SDA_HIGH;
delay (DELAYTIME);
SCL_HIGH;
delay (DELAYTIME);
//SDA_IN;
if(!(PINC&0x02))
flag = 1;//收到应答
SCL_LOW;
delay (DELAYTIME);
return flag;
}
uint8 IIC_RX_DATA (void)
{uint16 Rn=8,DATA=0,RR=0x80;
//SDA_IN; // 端口为输入
//SCL_OUT;
//delay (DELAYTIME);
SCL_LOW;
SDA_HIGH;
for (;Rn!=0;Rn--)
{
SCL_LOW;
delay (DELAYTIME);
SCL_HIGH;
delay (DELAYTIME);
if (!(PINC&0x02==0))
DATA|=RR; //1
else
DATA&=~RR;//0
RR>>=1;
delay (DELAYTIME);
}
IIC_ACK();
return DATA;
}
void WAITBUSY(void)
{
uint8 i;
while(1)
{
IIC_START();
i = IIC_TX_DATA(0x00);
IIC_STOP();
if(i == 1)
break;
}
return;
}
void WRITE_BITE(uint16 ADDH,uint16 ADDL,uint8 DATA_W,uint16 BYTENUM)
{
IIC_START();
IIC_TX_DATA(0xA0);
if(1 == flag)
{
flag = 0;
IIC_TX_DATA(ADDH);//高地址位
if(1 == flag)
{
flag = 0;
IIC_TX_DATA(ADDL);//低地址位
if(1 == flag)
{
flag = 0;
for(uint16 i=0;i<BYTENUM;i++)
{
IIC_TX_DATA(DATA_W);//数据
}
}
if(1 == flag)
{
flag = 0;
IIC_STOP();
delay(0x6FFF);
}
}
}
}
uint8 READ_BETY(uint16 ADDH,uint16 ADDL,uint16 BYTENUM)
{
uint8 DATA_R;
IIC_START();
IIC_TX_DATA(0xA0);
delay(DELAYTIME);
if(1 == flag)
{
flag = 0;
IIC_TX_DATA(ADDH);//高地址位
delay(DELAYTIME);
if(1 == flag)
{
flag = 0;
IIC_TX_DATA(ADDL);//低地址位
delay(DELAYTIME);
}
delay(DELAYTIME);
IIC_START();
IIC_TX_DATA(0xA1);
if(1 == flag)
{
flag = 0;
for(uint16 i=0;i<BYTENUM;i++)
{
DATA_R = IIC_RX_DATA();
}
}
}
return DATA_R;
}
void main(void)
{
init();
WRITE_BITE(0x00,0xEF,0xBF,1);
READ_BETY(0x00,0xEF,1);
READ_BETY(0x00,0xF0,1);
READ_BETY(0x00,0xEE,1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -