?? 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 + -