?? i2c.txt
字號(hào):
//EEPROM start
void EEP_start(void)
{
*pdddr|=0x0030; //SDA,SCL為輸出方式
delly(50);
asm(nop);
*pddr|=EEP_SDA;
delly(50);
asm(nop);
*pddr|=EEP_SCL;
delly(50);
asm(nop);
*pddr&=~EEP_SDA;
delly(50);
asm(nop);
*pddr&=~EEP_SCL;
delly(50);
asm(nop);
}
//EEPROM stop
void EEP_stop(void)
{
delly(50);
asm(nop);
*pddr&=~EEP_SDA;
delly(50);
asm(nop);
*pddr|=EEP_SCL;
delly(50);
asm(nop);
*pddr&=~EEP_SDA;
delly(50);
asm(nop);
*pddr|=EEP_SDA;
delly(50);
asm(nop);
*pddr&=~EEP_SCL;
delly(50);
asm(nop);
}
//EEPROM ack
byte EEP_ack(void)
{
byte return_val;
delly(50);
asm(nop);
*pdddr&=~EEP_SDA; //GPIOD方向寄存器 0--輸入
delly(50);
asm(nop);
*pddr|=EEP_SCL;
delly(50);
asm(nop);
return_val=*pddr&EEP_SDA;
asm(nop);
*pddr&=~EEP_SCL;
asm(nop);
delly(50);
*pdddr|=EEP_SDA; //GPIOD方向寄存器 1--輸出
delly(50);
asm(nop);
return return_val;
}
//向EEPROM送命令、數(shù)據(jù)
//輸入:data
void EEP_send_byte(byte data)
{
word i;
for(i=0;i<8;i++){
delly(50);
asm(nop);
if(data & 0x80) {
*pddr|=EEP_SDA;
}
else{
*pddr&=~EEP_SDA;
}
delly(50);
asm(nop);
*pddr|=EEP_SCL;
delly(50);
asm(nop);
*pddr&=~EEP_SCL;
delly(50);
asm(nop);
data<<=1;
asm(nop);
}
}
//向EEPROM送入0,應(yīng)答eeprom讀出數(shù)據(jù)
void EEP_send_bit0(void)
{
*pddr&=~EEP_SDA;
delly(50);
asm(nop);
*pddr|=EEP_SCL;
delly(50);
asm(nop);
*pddr&=~EEP_SCL;
delly(50);
asm(nop);
}
//從EEPROM取1BYTE數(shù)據(jù)
//輸入:data
byte EEP_rec_byte(void)
{
word i;
byte EEPdata;
EEPdata=0;
delly(50);
asm(nop);
*pdddr&=~EEP_SDA; //GPIOD方向寄存器 0--輸入
delly(50);
asm(nop);
*pddr|=EEP_SDA;
delly(50);
asm(nop);
for(i=0;i<8;i++){
EEPdata<<=1;
delly(50);
asm(nop);
*pddr|=EEP_SCL;
delly(50);
asm(nop);
if(*pddr & EEP_SDA)EEPdata++;
delly(50);
asm(nop);
*pddr&=~EEP_SCL;
asm(nop);
}
*pdddr|=EEP_SDA; //GPIOD方向寄存器 1--輸出
asm(nop);
return EEPdata;
}
//寫串行eeprom數(shù)據(jù)串寫
//輸入:E_data--要寫數(shù)據(jù)的指針,num--要寫數(shù)據(jù)的個(gè)數(shù),EW_point--頁(yè)數(shù)
//輸出:
word write_eeprom(word *E_data,word num,word EW_point)
{
word i;
word E_add;
delay_eeprom=0;
E_add=EW_point*32;
EEP_start();
EEP_send_byte(0xa0);
EEP_ack();
EEP_send_byte(E_add/256);
EEP_ack();
EEP_send_byte(E_add%256);
EEP_ack();
for(i=0;i<num;i++){
EEP_send_byte(E_data[i]);
delly(50);
asm(nop);
EEP_ack();
}
EEP_stop();
return 0;
}
//讀串行eeprom數(shù)據(jù)
//輸入:num--要讀數(shù)據(jù)的個(gè)數(shù),ER_point--頁(yè)數(shù)
//輸出:E_rd_data--讀出的數(shù)據(jù)
word read_63_eeprom(word num,word ER_point)
{
word i;
word E_add;
E_add=ER_point*32;
for(i=0;i<32;i++){
E_rd_data[i]=0;
}
EEP_start();
EEP_send_byte(0xa0);
EEP_ack();
EEP_send_byte(E_add/256);
EEP_ack();
EEP_send_byte(E_add%256);
EEP_ack();
EEP_start();
EEP_send_byte(0xa1);
EEP_ack();
for(i=0;i<num-1;i++){
E_rd_data[i]=EEP_rec_byte();
delly(50);
asm(nop);
EEP_send_bit0();
asm(nop);
delly(50);
}
E_rd_data[num-1]=EEP_rec_byte();
EEP_stop();
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -