📄 24c08_twi.c
字号:
#include <iom88v.h>
//define avr88's PIN
#define PINSCL 0; //PC5--SCL
#define PINSDA 1; //PC4--SDA
//define avr88's fscl
#define fSCL 100000 //define TWI's CLK 100k
//预分频系数=1(TWPS=0)
/*
#if F_CPU < fSCL*36
#define TWBR_SET 10; //TWBR必须大于等于10
#else
#define TWBR_SET (F_CPU/fSCL-16)/2; //计算TWBR值
#endif*/
//TWCR为0xc4,TWI start work.
#define TW_ACT (1<<TWINT)|(1<<TWEN)|(1<<TWIE)
//define slave component's adress
//because 24c02's e0,e1,e2 connect to GND
#define SLA_24c02 0xA0
#define ADDR_24C02 0x00
//define TWI operator mode
#define TWI_Busy 0
#define TWI_OK 1
#define TWI_Fail 2
//define TWI R/W command
#define OP_BUSY 0
#define OP_RUN 1
//TWI读写操作公共步骤
#define ST_FAIL 0 //出错状态
#define ST_START 1 //START状态检查
#define ST_SLAW 2 //SLAW状态检查
#define ST_WADDR 3 //ADDR状态检查
//TWI读操作步骤
#define ST_RESTART 4 //RESTART状态检查
#define ST_SLAR 5 //SLAR状态检查
#define ST_RDATA 6 //读取数据状态检查,循环n字节
//TWI写操作步骤
#define ST_WDATA 7 //写数据状态检查,循环n字节
#define FAIL_MAX 20 //重试次数最大值
//定义全局变量
unsigned char ORGDATA[8]=
{0xAA,0xA5,0x55,0x5A,0x01,0x02,0x03,0x04}; //原始数据
unsigned char CMPDATA[8]; //比较数据
unsigned char BUFFER[256]; //缓冲区,可以装载整个AC24C02的数据
struct str_TWI //TWI数据结构
{
volatile unsigned char STATUS; //TWI_操作状态
unsigned char SLA; //从设备的器件地址
unsigned int ADDR; //从设备的数据地址
unsigned char *pBUF; //数据缓冲区指针
unsigned int DATALEN; //数据长度
unsigned char STATE; //TWI读写操作步骤
unsigned char FAILCNT; //失败重试次数
};
struct str_TWI strTWI; //TWI的数据结构变量
//AT24C02的读写函数(包括随机读,连续读,字节写,页写)
//根据sla的最低位决定(由中断程序中判断)
//bit0=1 TW_READ 读
//bit0=0 TW_WRITE 写
#define TWI_READ 1
#define TWI_WRITE 0
// sla 器件地址(不能搞错)
// addr EEPROM地址(0~1023)
// *ptr 读写数据缓冲区
// len 读数据长度(1~1024),写数据长度(1 or 8 or 16)
// 返回值 是否能执行当前操作
unsigned char TWI_RW(unsigned char sla,unsigned int addr,unsigned char *ptr,unsigned int len)
{
unsigned char i;
if(strTWI.STATUS==TWI_Busy)
{
return OP_BUSY;
}
strTWI.STATUS = TWI_BUSY;
i=(addr>>8)<<1;
i&=0x06; //考虑了24C04/08的EEPROM地址高位放在SLA里面
}
int main(void)
{
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -