них по послідовному каналу I2C. c - дана процедура виконує, в залежності від прапора readwrite, запис або читання блоків даних у масиві din, при цьому виконаються послідовність ініціалізації каналу через формування стартового імпульсу. Далі в змінну P заносяться префіксний адреса - покажчик на те, що це флеш-ПЗУ, так само додається біт запису читання. Передача виконується шляхом контролю молодшого біта і якщо він дорівнює 1, то в момент коли сигнал scl дорівнює 0, лінію sda встановлюємо рівною 1. Після цього проводиться переміщення переданого байта і витримується пауза тактирования, рівне 25 мкс, і сигнал scl виставляється в стан 1, вказуючи пристрою, що необхідно вважати передані дані, після чого сигнал scl знову переводиться в 0. Таким чином виконується 8 циклів передачі. Далі необхідно прийняти сигнал підтвердження з боку ПЗУ про те, що префікс прийнятий і оброблений. Для цього ми протягом необхідного часу міняємо стан сигналу scl з 1 на 0 і якщо при одиничному сигналі scl зчитується 0, це означає що чіп ПЗУ сформував сигнал відповіді, що підтверджує факт обробки даних. Далі виконується таким же чином передача адреси старшої та молодшої частини. Далі йдуть процедури читання або запису, по 10 байт, масив din. p align="justify"> Враховуючи формат пакета управління, коли перші 6б вказують наступне положення маніпулятора, 4 і 5 записи по 2 байти задають: напрямок руху (7-ий біт старшого байта, 1 праве обертання, 0 - ліве обертання) і тривалість руху в десятках мілісекунд (решту 7 біт старшого байта) і молодший байт задає число повторів (max 255сек) в русі в поточному напрямку. p align="justify"> Читання проводиться таким чином: виконуємо формування тактуючого сигналу з періодом, приблизно рівним 100 мікросек. Даний період визначений технічними параметрами мікросхеми і якщо на шині при нульовому сигналі виставляється одиниця і тактіруя одиничним сигналом scl ми перевіряємо стан сигналу sda, якщо він дорівнює 1, то ми в проміжну змінну встановлюємо 7-ий біт, що дорівнює 1. Після чого зсуваємо її на 1 вправо. Таким чином виконуючи весь цикл ми здійснюємо прийом 8-ми біт, після чого ці дані переносяться в масив din. Sda встановлюється в 0, формуючи сигнал підтвердження для ПЗУ, після чого пауза в 50 мікросек. і ще на 50 мікросек. scl = 1. Так організується сигнал відповіді ACK з боку майстра для флеш-ПЗУ, кажучи їй, що можна продовжити обмін. p align="justify"> Якщо прапор readwrite = 0, виконуємо запис 10 байт даних, надісланих комп'ютером. Процедура аналогічна прийому, тільки тепер ми формуємо записуваний біт самі, і передаємо так 8 біт починаючи з молодшого. Якщо молодший біт більше 0, то тоді sda = 1, інакше sda = 0. Витримка потрібних затримок: scl = 0 - 50 мкс, scl = 1 - 50 мкс. Далі повторюємо процедуру ACK від ПЗУ. Так записується 10 байт. По закінченню виконується формування стопового імпульсу, коли при scl = 1. p align="justify"> Далі розглянемо процедуру обробника переривання таймера.
...