📄 24c08page.c
字号:
/*
****************************************************************************
AT24C08 test program, Test ok!,Us with [delay.asm]
Write byte Tan-wentang, 2004-08-15
****************************************************************************
*/
//#pragma src(at24c08asm.asm)
//#pragma src
//#pragma CODE
#include <REG2051.H>
#include <intrins.H>
#include "AT24C08PAGE_Ok.H"
//#include "project.h"
sbit SCL = P3^4;
sbit SDA = P3^5;
sbit WP = P3^3;
void delay_ms (unsigned char delaytime);
//=========================================================================
bit EETestAcknowledge (void) {
SDA = 1;
delay_ms(10);
SCL = 1;
delay_ms(10);
F0 = SDA;
delay_ms(10);
SCL = 0;
return F0;
}
//=========================================================================
unsigned char EEReadByte (void) {
unsigned char d = 0;
unsigned char i;
i = 8;
do {
SCL = 1;
d *= 2;
if (SDA) d++;
SCL = 0;
delay_ms(10);
} while (--i);
return d;
}
//=========================================================================
void EESendByte (unsigned char d) {
unsigned char i;
i = 8;
do {
SDA = (bit)(d & 0x80);
delay_ms(10);
SCL = 1;
delay_ms(10);
SCL = 0;
d *= 2;
} while(--i);
return;
}
//=========================================================================
void EEStop (void) {
SCL = 0;
delay_ms(10);
SDA = 0;
delay_ms(10);
SCL = 1;
delay_ms(10);
SDA = 1;
return;
}
//=========================================================================
void EEAcknowledge (void) {
SDA = 0;
delay_ms(10);
SCL = 1;
delay_ms(10);
SCL = 0;
delay_ms(10);
SDA = 1;
return;
}
//=========================================================================
void EENoAcknowledge (void) {
SDA = 1;
delay_ms(10);
SCL = 1;
delay_ms(10);
SCL = 0;
return;
}
//=========================================================================
void EEStart (void) {
SDA = 1;
delay_ms(10);
SCL = 1;
delay_ms(10);
SDA = 0;
delay_ms(10);
SCL = 0;
return;
}
//=========================================================================
void EESendWcom (unsigned char Block, com) {
EEStart();
//EESendByte(0xa0);
EESendByte(0xa0 | com | ((Block & 0x07) * 2));
}
//=========================================================================
void EEReadPage (unsigned char *str, unsigned char Block, unsigned char StartAddr, unsigned char n) {
WP = 0;
EESendWcom(Block , 0x00);
EETestAcknowledge();
EESendByte(StartAddr);
EETestAcknowledge();
EEStart();
EESendWcom(Block , 0x01);
EETestAcknowledge();
do {
if (1 == n) break;
if (0 == n) break;
*str = EEReadByte();
EEAcknowledge();
str++;
n--;
} while(1);
*str = EEReadByte();
EENoAcknowledge();
EEStop();
WP = 1;
//EEDelayMs(0x000a);
}
// 0 1 2 3 4 5 6 7 * 256 = 8 * 0x100 = 0x800
// 0 1 2 3 4 5 6 7 * 256 = 8 * 0x100 * 8 = 0x4000
//=========================================================================
//; MOV R5, #83H ;DATAADDR
//; MOV R3, 2BH ;EEPROMADDR
//; MOV R2, 2AH ;EEPROM BLOCK ADDR
//; MOV R7, #01H ;BYTE COUNT
//; LCALL L1EE3H
//=========================================================================
void EEWritePage (unsigned char *str, unsigned char Block, unsigned char StartAddr, unsigned char n) {
WP = 0;
EESendWcom(Block , 0x00);
EETestAcknowledge();
EESendByte(StartAddr);
EETestAcknowledge();
do {
if (0 == n) break;
EESendByte(*str);
EETestAcknowledge();
str++;
n--;
} while (1);
EEStop();
delay_ms(0xfe);
WP = 1;
}
void delay_ms (unsigned char delaytime)
{ //22.1184
unsigned char i,j;
for (i = 0;i < delaytime;i++)
for (j = 0 ;j<delaytime;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -