📄 24c02.c
字号:
#include <dos.h>
#include <string.h>
#include "typedefs.h"
#include "os_cpu.h"
#include "cdef.h"
#include "24c02.h"
extern uchar gpio_sel; // this variable defined in data.asm
extern uchar gpio_ctl;
extern uchar gpioa;
extern uchar gpiob;
extern uchar gpioc;
extern uchar setings;
void DelayMs(uint number);
void Start(void);
void Stop(void);
void Ack(void);
uchar TestAck(void);
void Write24c02(uchar *Wdata,uchar RomAddress,uchar number);
void Read24c02(uchar *RamAddress,uchar RomAddress,uchar bytes);
void DelayMs(unsigned int number)
{
unsigned char temp;
for(;number!=0;number--){
for(temp=155;temp!=0;temp--){
}
}
}
void Start(void)
{
SDA_H; /* SDA = 1 */
SCL_H; /* SCL = 1 */
SDA_L; /* SDA = 0 */
SCL_L; /* SCL = 0 */
}
void Stop(void)
{
SCL_L; /* SCL = 0 */
SDA_L; /* SDA = 0 */
SCL_H; /* SCL = 1 */
SDA_H; /* SDA = 1 */
}
void Ack(void)
{
SDA_L;
SCL_H;
SCL_L;
SDA_H;
}
void NoAck(void)
{
SDA_H;
SCL_H;
SCL_L;
}
uchar TestAck(void)
{
uchar Err;
SDA_H;
SCL_H;
// I2C_SDA_AS_IN;
outportb(I2C_PORT_INDEX, I2C_DAT);
Err = inportb(I2C_PORT_DATA);
// I2C_SDA_AS_INOUT;
SCL_L;
return Err;
}
void Write8Bit(uchar input)
{
uchar temp;
for(temp=8;temp!=0;temp--){
if(input&0x80){
SDA_H;
}
else{
SDA_L;
}
SCL_H;
SCL_L;
input <<= 1;
}
}
void Write24c02(uchar *Wdata,uchar RomAddress,uchar number)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
for(;number!=0;number--) {
Write8Bit(*Wdata);
TestAck();
Wdata++;
}
Stop();
DelayMs(10);
}
/***************************************************************************/
uchar Read8Bit(void)
{
uchar temp,rbyte, readval;
rbyte = 0;
for(temp=8;temp!=0;temp--) {
SCL_H;
rbyte=rbyte<<1;
;
// I2C_SDA_AS_IN;
outportb(I2C_PORT_INDEX, I2C_DAT);
readval = inportb(I2C_PORT_DATA);
// I2C_SDA_AS_INOUT;
if(readval&I2C_SDA_H)
rbyte |= 1;
SCL_L;
}
return(rbyte);
}
/***************************************************************************/
void Read24c02(uchar *RamAddress,uchar RomAddress,uchar bytes)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
while(bytes!=1) {
*RamAddress=Read8Bit();
Ack();
RamAddress++;
bytes--;
}
*RamAddress=Read8Bit();
NoAck();
Stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -