Здравствуйте, спасибо большое за поддержку.
Вот мой код:
Код
#include "io78f9222.h"
#include <intrinsics.h>
#define SCL P2_bit.no1
#define SDA P2_bit.no2
#define SCL_IN PM2_bit.no1
#define SDA_IN PM2_bit.no2
#define _1600_ns 0x04 // 300k
#define _3300_ns 0x08 // 300k
extern void _delay(unsigned int tt);
void ini()
{
SDA = 1;
SCL = 1;
SCL_IN = 0;
SDA_IN = 0;
}
void i2c_dly(void)
{
_delay(_3300_ns);
}
void i2c_start(void)
{
SDA_IN = 0;
SCL_IN = 0;
SDA = 1;
i2c_dly();
SCL = 1;
i2c_dly();
SDA = 0;
i2c_dly();
SCL = 0;
i2c_dly();
}
void i2c_stop(void)
{
SDA_IN = 0;
SCL_IN = 0;
SDA = 0;
i2c_dly();
SCL = 1;
i2c_dly();
SDA = 1;
i2c_dly();
}
unsigned char i2c_rx(char ack)
{
unsigned char x, d=0;
SDA_IN = 1;
SCL_IN = 0;
for(x=0; x<8; x++)
{
d <<= 1;
SCL = 1;
SCL_IN = 1;
while(SCL==0);
i2c_dly();
SCL_IN = 0;
if(SDA)
{
d |= 1;
}
SCL = 0;
i2c_dly();
}
SDA_IN = 0;
if(ack)
{
SDA = 0;
}
else
{
SDA = 1;
}
SCL = 1;
i2c_dly();
SCL = 0;
SDA = 1;
i2c_dly();
return d;
}
unsigned char i2c_tx(unsigned char d)
{
unsigned char x;
unsigned char b;
SDA_IN = 0;
SCL_IN = 0;
SCL = 0;
for(x=0; x<8; x++)
{
if(d&0x80)
{
SDA = 1;
}
else
{
SDA = 0;
}
i2c_dly();
SCL = 1;
d <<= 1;
i2c_dly();
SCL = 0;
}
SDA = 1;
i2c_dly();
SCL = 1;
i2c_dly();
SDA_IN =1;
b = SDA;
SDA_IN = 0;
SCL = 0;
i2c_dly();
return b;
}
Функции чтения записи работают, но не всегда.
Общаюсь с миркосхемой, и после преобразования, читаю все FF, думаю что-то напутал с клоками или с подтверждением.
Сообщение отредактировал addi - Sep 29 2008, 17:02