ИИЦ узорак кода
#укључити “ИИЦ.х”
//————-кашњење тиме_ус——————————-
воид ДЕЛАИ(у16 т)
{
док (т != 0)
т–;
}
/*воид ИИЦ_Старт(воид) */
{
СДА = 1;
СЦЛ = 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СДА = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 0;
}
/* воид ИИЦ_Стоп(воид) */
{
СЦЛ = 0;
СДА = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СДА = 1;
}
/*
унсигнед цхар ИИЦ_Ваит_Ацк(воид) */
{
у8 рец = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ); //
СДА = 1; //
СЦЛ = 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
рец = СДА;
СЦЛ = 0; //
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
повратак рец;
}
/* воид ИИЦ_Ацк(воид) */
{
СЦЛ = 0;
СДА = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
}
/* воид ИИЦ_НАцк(воид) */
{
СЦЛ = 0;
СДА = 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
}
/*
воид ИИЦ_Сенд_Бите(у8 ткд) */
{
у8 и;
за(и = 0; и < 8; и++)
{
СДА = (ткд & 0к80) >> 7; //
ткд <<= 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 1;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
}
}
/*
у8 ИИЦ_Реад_Бите(воид)*/
{
у8 и, рец = 0;
СДА = 1; //
за(и = 0; и < 8; и++)
{
СЦЛ = 0;
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
СЦЛ = 1;
рец <<= 1;
ако(СДА) рец |= 1; //
ДЕЛАИ(ДЕЛАИ_ТИМЕ);
}
повратак рец;
}
#укључити “КСГЗП6897Д.х”
//у8 темп_а5;
//————-напишите један бајт података,Подаци од МАСТЕР-а до РОБА ——————————
//————-СЛАВЕР адресни бит:01101101——————————-
воид Врите_Оне_Бите(у8 аддр, у8 тхедата) //Пишите “тхедата” на адресу РОБОВА од “аддр”
{
ИИЦ_Старт(); //ИИЦ СТАРТ
ИИЦ_Сенд_Бите(0кДА); //Операција ИИЦ ВРИТЕ,СЛАВЕР адреса
ИИЦ_Ваит_Ацк();
ИИЦ_Сенд_Бите(аддр); /*адреса*/
ИИЦ_Ваит_Ацк();
ИИЦ_Сенд_Бите(тхедата); /*подаци*/
ИИЦ_Ваит_Ацк();
ИИЦ_Стоп(); //ИИЦ СТОП
}
//————-Прочитао један бајт података,Подаци од СЛАВЕР-а до МАСТЕР-а —————————-
у8 Реад_Оне_Бите(у8 аддр)
{
у8 мидата;
ИИЦ_Старт();
ИИЦ_Сенд_Бите(0кДА);
ИИЦ_Ваит_Ацк();
ИИЦ_Сенд_Бите(аддр);
ИИЦ_Ваит_Ацк();
ИИЦ_Старт();
ИИЦ_Сенд_Бите(0кДБ); //Операција ИИЦ РЕАД
ИИЦ_Ваит_Ацк();
мидата = ИИЦ_Реад_Бите();
ИИЦ_НАцк(); //
ИИЦ_Стоп();
врати моје податке;
}
//
воид КСГЗП_Старт_Цонверсион()
{
Врите_Оне_Бите(0к30, 0к0А); //указују на комбиновану конверзију
док ((Реад_Оне_Бите(0к30) & 0к08) > 0);
}
//————-Напишите н бајтова података—————————-
у8 софтваре_и2ц_Врите_нБите(у8 СлавеАддресс, у8 РЕГ_Аддресс, само у8, у8 *буф)
{
инт и;
//
ИИЦ_Старт();
//
ИИЦ_Сенд_Бите(СлавеАддресс);
ИИЦ_Ваит_Ацк();
//
ИИЦ_Сенд_Бите(РЕГ_Аддресс);
ИИЦ_Ваит_Ацк();
//
за (и = 0; и < лен; и++) {
ИИЦ_Сенд_Бите(буф[и]);
ако (ИИЦ_Ваит_Ацк() == ФАИЛЕД) {
ИИЦ_Стоп();
повратак ФАИЛЕД;
}
}
//
ИИЦ_Стоп();
врати УСПЈЕХ;
}
//————-Прочитајте н бајтова података—————————-
у8 софтваре_и2ц_Реад_нБите(у8 СлавеАддресс, у8 РЕГ_Аддресс, само у8, у8 *буф)
{
//
ИИЦ_Старт();
//
ИИЦ_Сенд_Бите(СлавеАддресс);
ИИЦ_Ваит_Ацк();
//
ИИЦ_Сенд_Бите(РЕГ_Аддресс);
ИИЦ_Ваит_Ацк();
//
ИИЦ_Старт();
//
ИИЦ_Сенд_Бите(СлавеАддресс + 1);
ИИЦ_Ваит_Ацк();
//
док (лен) {
//
*буф = ИИЦ_Реад_Бите();
//
ако (лен == 1)
ИИЦ_НАцк();
//
друго
ИИЦ_Ацк();
//
буф++;
//
лен–;
}
//
ИИЦ_Стоп();
врати УСПЈЕХ;
}
//————-Прочитајте три бајта података о притиску—————————-
у8 Реад_Прессуре_ТхрееБитес(у8 *притисак_Х, у8 *притисак_М, у8 *притисак_Л)
{
у8 бафер[3];
у8 резултат;
резултат = софтваре_и2ц_Реад_нБите(0кДА, 0к06, 3, тампон); //
ако(резултат == УСПЕХ) {
*притисак_Х = пуфер[0]; //
*притисак_М = пуфер[1]; //
*притисак_Л = пуфер[2]; //
врати УСПЈЕХ;
} друго {
повратак ФАИЛЕД;
}
}
воид маин()
{
СенсорДата *п_сенсор_дата = &сензор_подаци; //
п_сенсор_дата->притисак_к = 8192;
ЛЦД1602_Хеат(); //
ЛЦД1602_схов_стринг(3, 0, “Притисак”); //
док(1)
{
Врите_Оне_Бите(0к30, 0к0А); //указују на комбиновану конверзију
// док ((Реад_Оне_Бите(0к30) & 0к08) > 0);
Делаи_мс(10);
//
ако(Реад_Прессуре_ТхрееБитес(&п_сенсор_дата->притисак_Х,
&п_сенсор_дата->притисак_М,
&п_сенсор_дата->притисак_Л) == УСПЕХ)
{
//
п_сенсор_дата->притисак_АД = (непотписано дуго)((((непотписано дуго)п_сенсор_дата->притисак_Х) << 16) |
(((унсигнед инт)п_сенсор_дата->притисак_М) << 8) |
((унсигнед цхар)п_сенсор_дата->притисак_Л));
//
п_сенсор_дата->притисак = (п_сенсор_дата->притисак_АД > 8388608) ?
(дупло)((п_сенсор_дата->притисак_АД – 16777216) / (дупло)(п_сенсор_дата->притисак_к)) :
(дупло)(п_сенсор_дата->притисак_АД / (дупло)(п_сенсор_дата->притисак_к));
//
ако (ис_зеро_поинт_сет)
{
нулта_тачка_притисак = п_подаци_сензора->притисак; //
ис_зеро_поинт_сет = 0; //
}
п_сенсор_дата->притисак -= притисак_нулте тачке;
//
ако (п_сенсор_дата->притисак > 1000.0) {
//
п_сенсор_дата->притисак /= 1000.0;
флоат_то_стр(п_сенсор_дата->П_буффер, п_сенсор_дата->притисак, 2, ” кПа”);
} друго {
флоат_то_стр(п_сенсор_дата->П_буффер, п_сенсор_дата->притисак, 2, ” Па”);
}
ЛЦД1602_схов_стринг(3, 1, п_сенсор_дата->П_буффер);
}
друго
{
//
ЛЦД1602_схов_стринг(3, 1, “ГРЕШКА ЧИТАЊА”);
}
Делаи_мс(200); //
}
}