IIC-voorbeeldcode
#erbij betrekken “IIC.h”
//————-vertragingstijd_us——————————-
ongeldig VERTRAGING(u16 t)
{
terwijl (T != 0)
T–;
}
/*ongeldig IIC_Start(leegte) */
{
SDA = 1;
SCL = 1;
VERTRAGING(VERTRAGING_TIME);
SDA = 0;
VERTRAGING(VERTRAGING_TIME);
SCL = 0;
}
/* ongeldig IIC_Stop(leegte) */
{
SCL = 0;
SDA = 0;
VERTRAGING(VERTRAGING_TIME);
SCL = 1;
VERTRAGING(VERTRAGING_TIME);
SDA = 1;
}
/*
niet-ondertekende char IIC_Wait_Ack(leegte) */
{
u8 rec = 0;
VERTRAGING(VERTRAGING_TIME); //
SDA = 1; //
SCL = 1;
VERTRAGING(VERTRAGING_TIME);
rec = SDA;
SCL = 0; //
VERTRAGING(VERTRAGING_TIME);
terug rec;
}
/* ongeldig IIC_Ack(leegte) */
{
SCL = 0;
SDA = 0;
VERTRAGING(VERTRAGING_TIME);
SCL = 1;
VERTRAGING(VERTRAGING_TIME);
SCL = 0;
VERTRAGING(VERTRAGING_TIME);
}
/* ongeldig IIC_NAck(leegte) */
{
SCL = 0;
SDA = 1;
VERTRAGING(VERTRAGING_TIME);
SCL = 1;
VERTRAGING(VERTRAGING_TIME);
SCL = 0;
VERTRAGING(VERTRAGING_TIME);
}
/*
ongeldig IIC_Send_Byte(u8 txd) */
{
u8 ik;
voor(ik = 0; i < 8; ik++)
{
SDA = (txd & 0x80) >> 7; //
txd <<= 1;
VERTRAGING(VERTRAGING_TIME);
SCL = 1;
VERTRAGING(VERTRAGING_TIME);
SCL = 0;
VERTRAGING(VERTRAGING_TIME);
}
}
/*
u8 IIC_Read_Byte(leegte)*/
{
u8 ik, rec = 0;
SDA = 1; //
voor(ik = 0; i < 8; ik++)
{
SCL = 0;
VERTRAGING(VERTRAGING_TIME);
SCL = 1;
rec <<= 1;
indien(SDA) rec |= 1; //
VERTRAGING(VERTRAGING_TIME);
}
terug rec;
}
#erbij betrekken “XGZP6897D.h”
//u8 temp_a5;
//————-schrijf één byte aan gegevens,Gegevens van MASTER naar de SLAVER ——————————
//————-SLAVER-adresbit:01101101——————————-
void Write_One_Byte(u8 adres, u8 de gegevens) //Schrijven “de gegevens” naar het adres van de SLAVER van “adres”
{
IIC_Start(); //IIC BEGIN
IIC_Send_Byte(0xDA); //IIC WRITE-bewerking,SLAVER-adres
IIC_Wacht_Ack();
IIC_Send_Byte(adres); /*adres*/
IIC_Wacht_Ack();
IIC_Send_Byte(de gegevens); /*degegevens*/
IIC_Wacht_Ack();
IIC_Stop(); //IIC STOP
}
//————-Eén byte aan gegevens gelezen,Gegevens van SLAVER naar de MASTER —————————-
u8 Lees_Eén_Byte(u8 adres)
{
u8 mijngegevens;
IIC_Start();
IIC_Send_Byte(0xDA);
IIC_Wacht_Ack();
IIC_Send_Byte(adres);
IIC_Wacht_Ack();
IIC_Start();
IIC_Send_Byte(0xDB); //IIC READ-bewerking
IIC_Wacht_Ack();
mijndata = IIC_Read_Byte();
IIC_NAck(); //
IIC_Stop();
mijngegevens retourneren;
}
//
ongeldig XGZP_Start_Conversion()
{
Write_One_Byte(0x30, 0x0A); //duiden op een gecombineerde conversie
terwijl ((Lees_Eén_Byte(0x30) & 0x08) > 0);
}
//————-Schrijf n bytes aan gegevens—————————-
u8 software_i2c_Write_nByte(u8 SlaveAdres, u8 REG_Adres, alleen u8, u8 *buf)
{
int ik;
//
IIC_Start();
//
IIC_Send_Byte(SlaveAdres);
IIC_Wacht_Ack();
//
IIC_Send_Byte(REG_Adres);
IIC_Wacht_Ack();
//
voor (ik = 0; i < len; ik++) {
IIC_Send_Byte(buf[i]);
indien (IIC_Wacht_Ack() == MISLUKT) {
IIC_Stop();
retourneren mislukt;
}
}
//
IIC_Stop();
SUCCES terug;
}
//————-Lees n bytes aan gegevens—————————-
u8 software_i2c_Read_nByte(u8 SlaveAdres, u8 REG_Adres, alleen u8, u8 *buf)
{
//
IIC_Start();
//
IIC_Send_Byte(SlaveAdres);
IIC_Wacht_Ack();
//
IIC_Send_Byte(REG_Adres);
IIC_Wacht_Ack();
//
IIC_Start();
//
IIC_Send_Byte(SlaveAdres + 1);
IIC_Wacht_Ack();
//
terwijl (len) {
//
*buf = IIC_Read_Byte();
//
indien (len == 1)
IIC_NAck();
//
anders
IIC_Ack();
//
buf++;
//
len–;
}
//
IIC_Stop();
SUCCES terug;
}
//————-Lees drie bytes aan drukgegevens—————————-
u8 Read_Pressure_ThreeBytes(u8 *druk_H, u8 *druk_M, u8 *druk_L)
{
u8-buffer[3];
u8 resultaat;
resultaat = software_i2c_Read_nByte(0xDA, 0x06, 3, buffer); //
indien(resultaat == SUCCES) {
*druk_H = buffer[0]; //
*druk_M = buffer[1]; //
*druk_L = buffer[2]; //
SUCCES terug;
} anders {
retourneren mislukt;
}
}
leeg hoofd()
{
Sensorgegevens *p_sensor_data = &sensor_gegevens; //
p_sensor_data->druk_k = 8192;
LCD1602_Heat(); //
LCD1602_show_string(3, 0, “Druk”); //
terwijl(1)
{
Write_One_Byte(0x30, 0x0A); //duiden op een gecombineerde conversie
// terwijl ((Lees_Eén_Byte(0x30) & 0x08) > 0);
Vertraging_ms(10);
//
indien(Lees_Pressure_ThreeBytes(&p_sensor_data->druk_H,
&p_sensor_data->druk_M,
&p_sensor_data->druk_L) == SUCCES)
{
//
p_sensor_data->druk_AD = (lang niet ondertekend)((((lang niet ondertekend)p_sensor_data->druk_H) << 16) |
(((niet ondertekend int)p_sensor_data->druk_M) << 8) |
((niet-ondertekend teken)p_sensor_data->druk_L));
//
p_sensor_data->druk = (p_sensor_data->druk_AD > 8388608) ?
(dubbele)((p_sensor_data->druk_AD – 16777216) / (dubbele)(p_sensor_data->druk_k)) :
(dubbele)(p_sensor_data->druk_AD / (dubbele)(p_sensor_data->druk_k));
//
indien (is_nulpunt_set)
{
nulpunt_druk = p_sensor_data->druk; //
is_zero_point_set = 0; //
}
p_sensor_data->druk -= nulpuntdruk;
//
indien (p_sensor_data->druk > 1000.0) {
//
p_sensor_data->druk /= 1000.0;
float_to_str(p_sensor_data->P_buffer, p_sensor_data->druk, 2, ” kPa”);
} anders {
float_to_str(p_sensor_data->P_buffer, p_sensor_data->druk, 2, ” vader”);
}
LCD1602_show_string(3, 1, p_sensor_data->P_buffer);
}
anders
{
//
LCD1602_show_string(3, 1, “LEES FOUT”);
}
Vertraging_ms(200); //
}
}