IIC mintakód
#tartalmazza “IIC.h”
//————-késleltetési idő_us——————————-
érvénytelen DELAY(u16 t)
{
míg (t != 0)
t–;
}
/*érvénytelen IIC_Start(üres) */
{
SDA = 1;
SCL = 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SDA = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 0;
}
/* érvénytelen IIC_Stop(üres) */
{
SCL = 0;
SDA = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SDA = 1;
}
/*
unsigned char IIC_Wait_Ack(üres) */
{
u8 rec = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ); //
SDA = 1; //
SCL = 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
rec = SDA;
SCL = 0; //
KÉSLELTETÉS(KÉSÉSI IDŐ);
vissza rec;
}
/* érvénytelen IIC_Ack(üres) */
{
SCL = 0;
SDA = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ);
}
/* érvénytelen IIC_NAck(üres) */
{
SCL = 0;
SDA = 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ);
}
/*
érvénytelen IIC_Send_Byte(u8 txd) */
{
u8 i;
számára(i = 0; én < 8; i++)
{
SDA = (txd & 0x80) >> 7; //
txd <<= 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 1;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ);
}
}
/*
u8 IIC_Read_Byte(üres)*/
{
u8 i, rec = 0;
SDA = 1; //
számára(i = 0; én < 8; i++)
{
SCL = 0;
KÉSLELTETÉS(KÉSÉSI IDŐ);
SCL = 1;
rec <<= 1;
ha(SDA) rec |= 1; //
KÉSLELTETÉS(KÉSÉSI IDŐ);
}
vissza rec;
}
#tartalmazza “XGZP6897D.h”
//u8 temp_a5;
//————-írjon egy bájt adatot,Adatok a MASTER-től a SLAVER-hez ——————————
//————-SLAVER cím bit:01101101——————————-
void Write_One_Byte(u8 cím, u8 az adatok) //Ír “az adat” a SLAVER címére “cím”
{
IIC_Start(); //IIC START
IIC_Send_Byte(0xDA); //IIC WRITE művelet,SLAVER címet
IIC_Wait_Ack();
IIC_Send_Byte(cím); /*cím*/
IIC_Wait_Ack();
IIC_Send_Byte(az adat); /*az adat*/
IIC_Wait_Ack();
IIC_Stop(); //IIC STOP
}
//————-Egy bájt adatot olvasott,Adatok a SLAVER-től a MASTER-hez —————————-
u8 Read_One_Byte(u8 cím)
{
u8 saját adatok;
IIC_Start();
IIC_Send_Byte(0xDA);
IIC_Wait_Ack();
IIC_Send_Byte(cím);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0xDB); //IIC READ művelet
IIC_Wait_Ack();
mydata = IIC_Read_Byte();
IIC_NAck(); //
IIC_Stop();
visszaadja az adataimat;
}
//
érvénytelen XGZP_Start_Conversion()
{
Write_One_Byte(0x30, 0x0A); //kombinált konverziót jeleznek
míg ((Read_One_Byte(0x30) & 0x08) > 0);
}
//————-Írjon n bájt adatot—————————-
u8 software_i2c_Write_nByte(u8 SlaveAddress, u8 REG_Cím, csak u8, u8 *buf)
{
int i;
//
IIC_Start();
//
IIC_Send_Byte(SlaveAddress);
IIC_Wait_Ack();
//
IIC_Send_Byte(REG_Cím);
IIC_Wait_Ack();
//
számára (i = 0; én < len; i++) {
IIC_Send_Byte(buf[én]);
ha (IIC_Wait_Ack() == SIKERTELEN) {
IIC_Stop();
visszaküldés SIKERTELEN;
}
}
//
IIC_Stop();
viszonozza a SIKERET;
}
//————-n bájt adat olvasása—————————-
u8 software_i2c_Read_nByte(u8 SlaveAddress, u8 REG_Cím, csak u8, u8 *buf)
{
//
IIC_Start();
//
IIC_Send_Byte(SlaveAddress);
IIC_Wait_Ack();
//
IIC_Send_Byte(REG_Cím);
IIC_Wait_Ack();
//
IIC_Start();
//
IIC_Send_Byte(SlaveAddress + 1);
IIC_Wait_Ack();
//
míg (len) {
//
*buf = IIC_Read_Byte();
//
ha (len == 1)
IIC_NAck();
//
más
IIC_Ack();
//
buf++;
//
len–;
}
//
IIC_Stop();
viszonozza a SIKERET;
}
//————-Olvasson három bájt nyomásadatokat—————————-
u8 Read_Pressure_ThreeBytes(u8 *nyomás_H, u8 *nyomás_M, u8 *nyomás_L)
{
u8 puffer[3];
u8 eredmény;
eredmény = software_i2c_Read_nByte(0xDA, 0x06, 3, puffer); //
ha(eredmény == SIKER) {
*nyomás_H = puffer[0]; //
*nyomás_M = puffer[1]; //
*nyomás_L = puffer[2]; //
viszonozza a SIKERET;
} más {
visszaküldés SIKERTELEN;
}
}
üres fő()
{
SensorData *p_sensor_data = &sensor_data; //
p_sensor_data->nyomás_k = 8192;
LCD1602_Heat(); //
LCD1602_show_string(3, 0, “Nyomás”); //
míg(1)
{
Write_One_Byte(0x30, 0x0A); //kombinált konverziót jeleznek
// míg ((Read_One_Byte(0x30) & 0x08) > 0);
Delay_ms(10);
//
ha(Read_Pressure_ThreeBytes(&p_sensor_data->nyomás_H,
&p_sensor_data->nyomás_M,
&p_sensor_data->nyomás_L) == SIKER)
{
//
p_sensor_data->nyomás_AD = (aláíratlan hosszú)((((aláíratlan hosszú)p_sensor_data->nyomás_H) << 16) |
(((aláíratlan int)p_sensor_data->nyomás_M) << 8) |
((előjel nélküli char)p_sensor_data->nyomás_L));
//
p_sensor_data->nyomás = (p_sensor_data->nyomás_AD > 8388608) ?
(kettős)((p_sensor_data->nyomás_AD – 16777216) / (kettős)(p_sensor_data->nyomás_k)) :
(kettős)(p_sensor_data->nyomás_AD / (kettős)(p_sensor_data->nyomás_k));
//
ha (is_nulla_pont_halmaz)
{
nulla_pont_nyomás = p_érzékelő_adat->nyomás; //
is_zero_point_set = 0; //
}
p_sensor_data->nyomás -= nulla_pont_nyomás;
//
ha (p_sensor_data->nyomás > 1000.0) {
//
p_sensor_data->nyomás /= 1000.0;
float_to_str(p_sensor_data->P_puffer, p_sensor_data->nyomás, 2, ” kPa”);
} más {
float_to_str(p_sensor_data->P_puffer, p_sensor_data->nyomás, 2, ” PA”);
}
LCD1602_show_string(3, 1, p_sensor_data->P_puffer);
}
más
{
//
LCD1602_show_string(3, 1, “OLVASÁSI HIBA”);
}
Delay_ms(200); //
}
}