IIC Örnek Kodu
#katmak “IIC.h”
//————-gecikme süresi_us——————————-
geçersiz GECİKME(u16 t)
{
sırasında (T != 0)
T–;
}
/*geçersiz IIC_Başlangıç(geçersiz) */
{
SDA = 1;
SCL = 1;
GECİKME(DELAY_TIME);
SDA = 0;
GECİKME(DELAY_TIME);
SCL = 0;
}
/* geçersiz IIC_Stop(geçersiz) */
{
SCL = 0;
SDA = 0;
GECİKME(DELAY_TIME);
SCL = 1;
GECİKME(DELAY_TIME);
SDA = 1;
}
/*
imzasız karakter IIC_Wait_Ack(geçersiz) */
{
u8 kayıt = 0;
GECİKME(DELAY_TIME); //
SDA = 1; //
SCL = 1;
GECİKME(DELAY_TIME);
rec = SDA;
SCL = 0; //
GECİKME(DELAY_TIME);
kayıt dönüşü;
}
/* geçersiz IIC_Ack(geçersiz) */
{
SCL = 0;
SDA = 0;
GECİKME(DELAY_TIME);
SCL = 1;
GECİKME(DELAY_TIME);
SCL = 0;
GECİKME(DELAY_TIME);
}
/* geçersiz IIC_NAck(geçersiz) */
{
SCL = 0;
SDA = 1;
GECİKME(DELAY_TIME);
SCL = 1;
GECİKME(DELAY_TIME);
SCL = 0;
GECİKME(DELAY_TIME);
}
/*
geçersiz IIC_Send_Byte(u8 txd) */
{
u8 ben;
için(ben = 0; Ben < 8; i++)
{
SDA = (teşekkürler & 0x80) >> 7; //
teşekkürler <<= 1;
GECİKME(DELAY_TIME);
SCL = 1;
GECİKME(DELAY_TIME);
SCL = 0;
GECİKME(DELAY_TIME);
}
}
/*
u8 IIC_Read_Byte(geçersiz)*/
{
u8 ben, kayıt = 0;
SDA = 1; //
için(ben = 0; Ben < 8; i++)
{
SCL = 0;
GECİKME(DELAY_TIME);
SCL = 1;
kayıt <<= 1;
eğer(SDA) kayıt |= 1; //
GECİKME(DELAY_TIME);
}
kayıt dönüşü;
}
#katmak “XGZP6897D.h”
//u8 temp_a5;
//————-Bir Byte Veri Yaz,MASTER'dan SLAVER'a veriler ——————————
//————-KÖLE adres biti:01101101——————————-
void Write_One_Byte(u8 adresi, u8 verileri) //Yazmak “veri” KÖLE'nin adresine “adres”
{
IIC_Başlangıç(); //IIC BAŞLANGIÇ
IIC_Send_Byte(0xDA); //IIC YAZMA işlemi,KÖLE adresi
IIC_Wait_Ack();
IIC_Send_Byte(adres); /*adres*/
IIC_Wait_Ack();
IIC_Send_Byte(veri); /*veriler*/
IIC_Wait_Ack();
IIC_Durdur(); //IIC DURDURMA
}
//————-Bir Byte Veriye Ulaştık,SLAVER'dan MASTER'a veriler —————————-
u8 Read_One_Byte(u8 adresi)
{
u8 verilerim;
IIC_Başlangıç();
IIC_Send_Byte(0xDA);
IIC_Wait_Ack();
IIC_Send_Byte(adres);
IIC_Wait_Ack();
IIC_Başlangıç();
IIC_Send_Byte(0xDB); //IIC OKUMA işlemi
IIC_Wait_Ack();
verilerim = IIC_Read_Byte();
IIC_NAck(); //
IIC_Durdur();
verilerimi döndür;
}
//
geçersiz XGZP_Start_Conversion()
{
Write_One_Byte(0x30, 0x0A); //birleştirilmiş dönüşümü belirtmek
sırasında ((Read_One_Byte(0x30) & 0x08) > 0);
}
//————-n Bayt Veri Yaz—————————-
u8 yazılımı_i2c_Write_nByte(u8 KöleAdresi, u8 REG_Adresi, yalnızca u8, u8 *buf)
{
ben;
//
IIC_Başlangıç();
//
IIC_Send_Byte(KöleAdresi);
IIC_Wait_Ack();
//
IIC_Send_Byte(REG_Adresi);
IIC_Wait_Ack();
//
için (ben = 0; Ben < uzun; i++) {
IIC_Send_Byte(devetüyü[Ben]);
eğer (IIC_Wait_Ack() == BAŞARISIZ) {
IIC_Durdur();
geri dönüş BAŞARISIZ;
}
}
//
IIC_Durdur();
BAŞARI'ya dönüş;
}
//————-n Bayt Veri Oku—————————-
u8 yazılımı_i2c_Read_nByte(u8 KöleAdresi, u8 REG_Adresi, yalnızca u8, u8 *buf)
{
//
IIC_Başlangıç();
//
IIC_Send_Byte(KöleAdresi);
IIC_Wait_Ack();
//
IIC_Send_Byte(REG_Adresi);
IIC_Wait_Ack();
//
IIC_Başlangıç();
//
IIC_Send_Byte(KöleAdresi + 1);
IIC_Wait_Ack();
//
sırasında (uzun) {
//
*buf = IIC_Read_Byte();
//
eğer (uzun == 1)
IIC_NAck();
//
başka
IIC_Ack();
//
buf++;
//
uzun–;
}
//
IIC_Durdur();
BAŞARI'ya dönüş;
}
//————-Üç Bayt Basınç Verisini Okuyun—————————-
u8 Read_Pressure_ThreeBytes(u8 *basınç_H, u8 *basınç_M, u8 *basınç_L)
{
u8 arabellek[3];
u8 sonucu;
sonuç = yazılım_i2c_Read_nByte(0xDA, 0x06, 3, tampon); //
eğer(sonuç == BAŞARI) {
*basınç_H = tampon[0]; //
*basınç_M = tampon[1]; //
*basınç_L = tampon[2]; //
BAŞARI'ya dönüş;
} başka {
geri dönüş BAŞARISIZ;
}
}
geçersiz ana()
{
SensörVerileri *p_sensor_data = &sensör_verileri; //
p_sensor_data->basınç_k = 8192;
LCD1602_Isı(); //
LCD1602_show_string(3, 0, “Basınç”); //
sırasında(1)
{
Write_One_Byte(0x30, 0x0A); //birleştirilmiş dönüşümü belirtmek
// sırasında ((Read_One_Byte(0x30) & 0x08) > 0);
Gecikme_ms(10);
//
eğer(Read_Pressure_ThreeBytes(&p_sensor_data->basınç_H,
&p_sensor_data->basınç_M,
&p_sensor_data->basınç_L) == BAŞARI)
{
//
p_sensor_data->basınç_AD = (imzasız uzun)((((imzasız uzun)p_sensor_data->basınç_H) << 16) |
(((imzasız int)p_sensor_data->basınç_M) << 8) |
((imzasız karakter)p_sensor_data->basınç_L));
//
p_sensor_data->basınç = (p_sensor_data->basınç_AD > 8388608) ?
(çift)((p_sensor_data->basınç_AD – 16777216) / (çift)(p_sensor_data->basınç_k)) :
(çift)(p_sensor_data->basınç_AD / (çift)(p_sensor_data->basınç_k));
//
eğer (is_zero_point_set)
{
sıfır_nokta_basıncı = p_sensor_data->basınç; //
is_zero_point_set = 0; //
}
p_sensor_data->basınç -= sıfır_nokta_basıncı;
//
eğer (p_sensor_data->basınç > 1000.0) {
//
p_sensor_data->basınç /= 1000.0;
float_to_str(p_sensor_data->P_tampon, p_sensor_data->basınç, 2, ” kPa”);
} başka {
float_to_str(p_sensor_data->P_tampon, p_sensor_data->basınç, 2, ” Pa”);
}
LCD1602_show_string(3, 1, p_sensor_data->P_tampon);
}
başka
{
//
LCD1602_show_string(3, 1, “OKUMA HATASI”);
}
Gecikme_ms(200); //
}
}