АС
Алексей Свиридов

дОБРОЕ ВРЕМЯ СУТОК) ребята нужна ваша помощь.. в avr studio есть программа но сделана не до конца помогите дописать

Використання інтерфейсу І2С.
Мета: Освоїти програмні методи реалізації інтерфейсу І2С та взаємодію контролера з інтегральним датчиком температури та годинником реального часу.
Хід роботи.
1. В середовищі AVR Studio скласти та відлагодити підпрограми необхідні для програмної реалізації інтерфейсу І2С:
1.1. генератора синхроімпульсів та запису байту;
1.2. генератора синхроімпульсів та читання байту;
1.3. формування умови «старт» та «рестарт» ;
1.4. формування умови прийому та передачі імпульсу підтвердження;
1.5. формування умови «стоп» .
2. Скласти програму читання коду температури з цифрового датчика DS1621, апаратний адрес 0х90. Записати програму в пам'ять ЕОМ, та перевірити її роботу на лабораторному макеті. Цифровий код перетворити в 0С та відобразити на екрані, в разі потреби удосконалити програму.
3. Скласти програму котра зчитує поточну дату та час з годинника реального часу DS 1302 та відображає результат на дисплеї. Записати програму в пам'ять ЕОМ та перевірити роботу на макеті.
4. Доповнити програму п. 3 можливістю корекції дати та часу; вводу нових значень дати та часу. Для наглядності роботи використати РК – дисплей, текстові пояснення та мигаючий курсор.

ReStart: ; Перевірка можливості старту
SCL_Dwn ;перевести шину SCL в лог. 0
nop
SDA_Hi ; Шину SDA в 1
nop
rcall wait5us ; Цикл затримкики
nop
SCL_Up ; Наростаючий фронт SCL->1
RS1: sbis PinB,SCL ; Стан очікування відомого пристрою?
rjmp RS1
rcall wait5us ; Цикл затримки
Start:
SDA_Lo ; SDA = 0: умова старту
rcall wait4us ; Цикл затримки
Підпрограма запису байта в відомий пристрій:
WriteByte:
sec ; Прапорець переносу C = 1
rol dbyt ; Зсув вліво C->LSB, MSB->C
rjmp bit1 ; Особлива обробка для розряду 1
WriteBit:
lsl dbyt ; Якщо dbyt пустий, ..
bit1: breq GetAck ; ...то передача завершена
SCL_Dwn ; Спадаючий фронт SCL
brcc WriteLow ; Перехід, якщо прапорець C = 0
nop ; Щоб урівняти час виконання
SDA_Hi ; Встановити SDA в 1
rjmp SCL_High
WriteLow:
SDA_Lo ; Встановити SDA в 0
rjmp SCL_High ; Щоб зрівняти тривалість такту
SCL_High:
rcall wait4us ; Цикл затримки
SCL_Up ; Спадаючий фронт SCL
WB1:sbis PinB,SCL ; Стан очікування відомого пристрою?
rjmp WB1
rcall wait5us ; Цикл затримки
rjmp WriteBit

Підпрограма читання біта підтвердження:
GetAck:
SCL_Dwn ; Спадаючий фронт SCL
SDA_Hi ; SDA – високоомний стан
rcall wait5us ; Цикл затримки
SCL_Up ; Наростаючий фронт SCL
GA1:sbis PinB,SCL ; Стан очікування відомого пристрою
rjmp GA1
cbr Flg,1<

ReStart: ; Перевірка можливості старту
SCL_Dwn ;перевести шину SCL в лог. 0
nop
SDA_Hi ; Шину SDA в 1
nop
rcall wait5us ; Цикл затримкики
nop
SCL_Up ; Наростаючий фронт SCL->1
RS1: sbis PinB,SCL ; Стан очікування відомого пристрою?
rjmp RS1
rcall wait5us ; Цикл затримки
Start:
SDA_Lo ; SDA = 0: умова старту
rcall wait4us ; Цикл затримки
Підпрограма запису байта в відомий пристрій:
WriteByte:
sec ; Прапорець переносу C = 1
rol dbyt ; Зсув вліво C->LSB, MSB->C
rjmp bit1 ; Особлива обробка для розряду 1
WriteBit:
lsl dbyt ; Якщо dbyt пустий, ..
bit1: breq GetAck ; ...то передача завершена
SCL_Dwn ; Спадаючий фронт SCL
brcc WriteLow ; Перехід, якщо прапорець C = 0
nop ; Щоб урівняти час виконання
SDA_Hi ; Встановити SDA в 1
rjmp SCL_High
WriteLow:
SDA_Lo ; Встановити SDA в 0
rjmp SCL_High ; Щоб зрівняти тривалість такту
SCL_High:
rcall wait4us ; Цикл затримки
SCL_Up ; Спадаючий фронт SCL
WB1:sbis PinB,SCL ; Стан очікування відомого пристрою?
rjmp WB1
rcall wait5us ; Цикл затримки
rjmp WriteBit

Підпрограма читання біта підтвердження:
GetAck:
SCL_Dwn ; Спадаючий фронт SCL
SDA_Hi ; SDA – високоомний стан
rcall wait5us ; Цикл затримки
SCL_Up ; Наростаючий фронт SCL
GA1:sbis PinB,SCL ; Стан очікування відомого пристрою
rjmp GA1
cbr Flg,1<

Підпрограма читання біта підтвердження:
GetAck:
SCL_Dwn ; Спадаючий фронт SCL
SDA_Hi ; SDA – високоомний стан
rcall wait5us ; Цикл затримки
SCL_Up ; Наростаючий фронт SCL
GA1:sbis PinB,SCL ; Стан очікування відомого пристрою
rjmp GA1
cbr Flg,1<

ЕИ
Екатерина Иванова

Опа, ассемблер на украинском.. .
На специализированных сайтах не пробовали? посетите сайт radio-hobby.org и спросите на форуме. Только переведите ваш ассемблер на русский 🙂

Похожие вопросы
Помогите дописать программу! срочняк
Можно ли сделать так, чтобы в AVR Studio при ребилде компилятор в прогу записывал дату и время в какую-либо переменную?
Ребята мне очень нужна ваша помощь!
помогите дописать программу
Доброго времени суток! Оч нужна ваша помощь!
Доброго времени суток! Оооочень, нужна ваша помощь!
Помогите! нужно сделать программу в Microsoft Visual Studio
Помогите написать программу в AVR
доброго времени суток нужна помощь по си шарпу
Всем доброго времени суток!) Ребята, нужна ваша помощь!!!