IIC-näytekoodi

#sisältää “IIC.h”

//————-viive time_us——————————-
mitätön VIIVE(u16 t)
{
samalla kun (t != 0)
t–;
}

/*mitätön IIC_Start(mitätön) */
{
SDA = 1;
SCL = 1;
VIIVE(DELAY_TIME);
SDA = 0;
VIIVE(DELAY_TIME);
SCL = 0;
}

/* mitätön IIC_Stop(mitätön) */
{
SCL = 0;
SDA = 0;
VIIVE(DELAY_TIME);
SCL = 1;
VIIVE(DELAY_TIME);
SDA = 1;
}

/*
allekirjoittamaton merkki IIC_Wait_Ack(mitätön) */
{
u8 rec = 0;

VIIVE(DELAY_TIME); //
SDA = 1; //
SCL = 1;
VIIVE(DELAY_TIME);
rec = SDA;
SCL = 0; //
VIIVE(DELAY_TIME);

paluu rec;
}

/* mitätön IIC_Ack(mitätön) */
{
SCL = 0;
SDA = 0;
VIIVE(DELAY_TIME);
SCL = 1;
VIIVE(DELAY_TIME);
SCL = 0;
VIIVE(DELAY_TIME);
}

/* mitätön IIC_NAck(mitätön) */
{
SCL = 0;
SDA = 1;
VIIVE(DELAY_TIME);
SCL = 1;
VIIVE(DELAY_TIME);
SCL = 0;
VIIVE(DELAY_TIME);
}


/*
void IIC_Send_Byte(u8 txd) */
{
u8 i;

varten(minä = 0; i < 8; i++)
{
SDA = (txd & 0x80) >> 7; //
txd <<= 1;
VIIVE(DELAY_TIME);
SCL = 1;
VIIVE(DELAY_TIME);
SCL = 0;
VIIVE(DELAY_TIME);
}
}

/*
u8 IIC_Read_Byte(mitätön)*/
{
u8 i, rec = 0;

SDA = 1; //
varten(minä = 0; i < 8; i++)
{
SCL = 0;
VIIVE(DELAY_TIME);
SCL = 1;
rec <<= 1;
jos(SDA) rec |= 1; //
VIIVE(DELAY_TIME);
}

paluu rec;
}
#sisältää “XGZP6897D.h”

//u8 temp_a5;

//————-kirjoittaa yhden tavun dataa,Tiedot MASTERista SLAVERiin ——————————

//————-SLAVER osoitebitti:01101101——————————-
void Write_One_Byte(u8 osoite, u8 tiedot) //Kirjoittaa “tiedot” SLAVERin osoitteeseen “osoite”

{
IIC_Start(); //IIC ALOITUS
IIC_Send_Byte(0xDA); //IIC WRITE -toiminto,SLAVER-osoite

IIC_Wait_Ack();
IIC_Send_Byte(osoite); /*osoite*/
IIC_Wait_Ack();
IIC_Send_Byte(tiedot); /*tiedot*/
IIC_Wait_Ack();
IIC_Stop(); //IIC STOP
}


//————-Luettu yksi tavu dataa,Tiedot SLAVERista MASTERiin —————————-
u8 luku_yksi_tavu(u8 osoite)
{
u8 omat tiedot;
IIC_Start();
IIC_Send_Byte(0xDA);
IIC_Wait_Ack();
IIC_Send_Byte(osoite);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0xDB); //IIC READ -toiminto
IIC_Wait_Ack();
omat tiedot = IIC_Read_Byte();
IIC_NAck(); //
IIC_Stop();
palauta omat tiedot;
}


//
mitätön XGZP_Start_Conversion()
{

Write_One_Byte(0x30, 0x0A); //osoittavat yhdistettyä konversiota
samalla kun ((Lue_yksi_tavu(0x30) & 0x08) > 0);

}

//————-Kirjoita n tavua dataa—————————-
u8 software_i2c_Write_nByte(u8 SlaveAddress, u8 REG_Osoite, vain u8, u8 *buf)
{
int i;

//
IIC_Start();

//
IIC_Send_Byte(SlaveAddress);
IIC_Wait_Ack();

//
IIC_Send_Byte(REG_Osoite);
IIC_Wait_Ack();

//
varten (minä = 0; i < len; i++) {
IIC_Send_Byte(buf[i]);
jos (IIC_Wait_Ack() == Epäonnistunut) {
IIC_Stop();
palautus epäonnistui;
}
}

//
IIC_Stop();
palauttaa MENESTYS;
}

//————-Lue n tavua dataa—————————-
u8 software_i2c_Read_nByte(u8 SlaveAddress, u8 REG_Osoite, vain u8, u8 *buf)
{
//
IIC_Start();

//
IIC_Send_Byte(SlaveAddress);
IIC_Wait_Ack();

//
IIC_Send_Byte(REG_Osoite);
IIC_Wait_Ack();

//
IIC_Start();

//
IIC_Send_Byte(SlaveAddress + 1);
IIC_Wait_Ack();

//
samalla kun (len) {
//
*buf = IIC_Read_Byte();
//
jos (len == 1)
IIC_NAck();
//
muu
IIC_Ack();
//
buf++;
//
len–;
}

//
IIC_Stop();

palauttaa MENESTYS;
}

//————-Lue kolme tavua painetietoja—————————-
u8 Read_Pressure_ThreeBytes(u8 *paine_H, u8 *paine_M, u8 *paine_L)
{
u8 puskuri[3];
u8 tulos;

tulos = ohjelmisto_i2c_Read_nByte(0xDA, 0x06, 3, puskuri); //

jos(tulos == MENESTYS) {
*paine_H = puskuri[0]; //
*paine_M = puskuri[1]; //
*paine_L = puskuri[2]; //
palauttaa MENESTYS;
} muu {
palautus epäonnistui;
}
}

tyhjä pää()
{
SensorData *p_sensor_data = &sensor_data; //
p_sensor_data->paine_k = 8192;

LCD1602_Lämpö(); //
LCD1602_show_string(3, 0, “Paine”); //

samalla kun(1)
{
Write_One_Byte(0x30, 0x0A); //osoittavat yhdistettyä konversiota
// samalla kun ((Lue_yksi_tavu(0x30) & 0x08) > 0);
Viive_ms(10);

//
jos(Read_Pressure_ThreeBytes(&p_sensor_data->paine_H,
&p_sensor_data->paine_M,
&p_sensor_data->paine_L) == MENESTYS)
{
//
p_sensor_data->paine_AD = (allekirjoittamaton pitkä)((((allekirjoittamaton pitkä)p_sensor_data->paine_H) << 16) |
(((allekirjoittamaton int)p_sensor_data->paine_M) << 8) |
((allekirjoittamaton merkki)p_sensor_data->paine_L));

//
p_sensor_data->paine = (p_sensor_data->paine_AD > 8388608) ?
(kaksinkertainen)((p_sensor_data->paine_AD – 16777216) / (kaksinkertainen)(p_sensor_data->paine_k)) :
(kaksinkertainen)(p_sensor_data->paine_AD / (kaksinkertainen)(p_sensor_data->paine_k));

//
jos (is_zero_point_set)
{
nollapisteen_paine = p_sensorin_data->paine; //
is_zero_point_set = 0; //
}

p_sensor_data->paine - = nollapisteen_paine;

//
jos (p_sensor_data->paine > 1000.0) {
//
p_sensor_data->paine /= 1000.0;
float_to_str(p_sensor_data->P_puskuri, p_sensor_data->paine, 2, ” kPa”);
} muu {
float_to_str(p_sensor_data->P_puskuri, p_sensor_data->paine, 2, ” Pa”);
}

LCD1602_show_string(3, 1, p_sensor_data->P_puskuri);
}
muu
{
//
LCD1602_show_string(3, 1, “LUE VIRHE”);
}

Viive_ms(200); //
}
}