Рис.9 блок-схема 16-бітного таймеру мікроконтроллера
Рис. 10 Блок-схема послідовного приємопередавача
Якщо з 10 або 11-розрядного зсувного регістру видана вся інформація(зсувний регістр передачі пустий), дані з UDR надсилаються у зсувний регістр. У цей час встановлюється біт UDRE(USART Data Register Empty) регістру статуса USART(UCSRA). При встановленому у стан 1 біті UDRE USART готовий прийняти наступний символ. Запис в UDR очищує біт UDRE. У цей самий час, коли дані пересилаються з UDR у 10(11)-розрядний зсувний регістр, біт 0 зсувного регістру скидається у стан 0(стан 0-стартовий біт), а біт 9 та 10 встановлюється у стан 1(стан 1 - стоповий біт). Також приємопередавач має налаштування для організації приємопередавача 9 бітних символів, налаштувати швидкість передачі можна за допомогою спеціального бод-генератора. Бод-генератор представляє собою дільник, генеруючий імпульси передачі із частотою, яка визначається виразом:
Де BAUD - частота в бодах, Fosc - частота тактового генератору CPU, UBRR - вміст регістру UBRRH та UBRRL. Для того, щоб можна було точно обирати усі швидкості прийому/передачі потрібно використовувати спеціальні частоти. Прийом виконується асинхронно, коли регістр данних заповнюється прийнятим байтом у регістрі UCSRA встановлюється біт RXC. Також USART підтримує обробку переривань по прийому та по передачі. Більш детальна інформація знаходиться у даташиті, який можна знайти на сайті виробника http:\\www.atmel.com.
Рис. 12 Схема розподілення ресурсів стенду
Рис 13. Блок схема алгоритму найшвидшої реестрації
Наступний алгоритм менш швидкий але дозволяє зареєструвати 512 станів вхідної послідовності. Він аналогічний попередньому тільки після кожної команди читання порту додається команда збереження у пам'ять. Швидкість виконання такого алгоритму дорівнює 7 372 800/3 = 2 457 600 Гц. Незважаючи на швидкісь код такого алгоритму займає багато пам'яті програм.
Наступний алгоритм дозволяє зареєструвати 1024 стани вхідної послідовності, але має ще менш швидкі характеристики, та займає ще більший об'єм програмної пам'яті мікроконтроллера. Швидкість такого алгоритму 7 372 800/5 = 1 474 560 Гц.
Наступний алгоритм виконує аналогічні дії попередньому але займає набагато менше пам'яті программ. Він складається із 4-ох послідовно розташованих однакових циклів. Це зв'язано з тим, що для підсумку необхідної кількості операцій використовується однобайтовий лічильник. 1024/256 = 4 послідовно розташованих циклів. Швидкість такого алгоритму 7 372 800/8 = 921 600 Гц. Для того щоб зменшити об'єм коду потрібно використати 2-ох байтовий лічильник, але тоді швидкість зменшиться до 7 372 800/9 = 819 200 Гц.
Можна піти іншим шляхом. 1024 у HEX коді це 0400h. А якщо початкова адреса пам'яті данних буде кратною 0100h, для перевірки того, що цикл був виконаний 1024 рази потрібно перевіряти тільки старший байт адреси.
Наступний алгоритм реалізує передпускову реєстрацію. Оскільки невідомо, коли з'явиться необхідна зміна стану пускового каналу, необхідно постійно реєструвати вхідну послідовність. Пам'ять у такому разі треба використовувати по кільцю рис. 15.
Коли виникає необхідна зміна стану пускового каналу, починається відлік зареєстрованих станів, він дорівнює:
1024 - [глибина передпускової реєстрації] (байт)
Рис. 14 Блок схема алгоритму реєстрації, яка виконується за допомогою циклів
Рис. 15 Використання пам'яті по кільцю
Коли вказівник стає на адрес 0700h, вказівник перенаправляється на адресу 0300h і реєстрація продовжується доки кількість зареєстрованих байт не дорівнюватиме 1024. Якщо зміна стану довго не відбувається мікроконтроллер увійде до вічного циклу тому передбачено перевірку на прийом команди “СТОП”. Також алгоритм реалізує керування швидкістю реєстрації. Оскільки для виконання затримки використовується таймер, для перевірки переповнення таймеру треба читати регістр стану, потім перевіряти чи виникла подія. Якщо подія виникла - скинути подію і перезапустити таймер, а інакще - перейти на читання регістру стану таймеру і т.д. Це призводить до того, що реакція на таймер буде залежити від швидкості, яка некратна швидкості 1 циклу перевірки таймеру на наявність події. Але з аналізу лабораторного практикуму необхідні швидкості реєстрації дорівнюють 50 гц тому розбіжність в декілька тактів не буде впливати на зареєстровану послідовність.
Всі алгоритми підпрограм аналізу знаходяться у додатках.
Рис 16. Блок схема алгоритму генератора слів(швидкий варіант)
Цей алгоритм не надає змогу змінювати швидкість генератору, та може працювати тільки у режимі одноразової генерації.
Наступний алгоритм дозволяє виконувати всі три режими: циклічний, одноразовий та шаговий; для перших двох дозволяє міняти швидкість генерації. Швидкість цього алгоритму набагато менша ніж у попередньому випадку, але відповідає технічному завданню. На початку алгоритму налагоджується початкова адреса ГС, потім перевіряється необхідність запуску таймера(пошаговий режим не використовує таймер). Далі йде тіло циклу, умова виходу з якого це, кінець виданих данних, або натиснення кнопки стоп у режимі цикл. Алгоритм зображений на рис. 17.
Рис. 17 Блок схема алгоритму генератора слів(повнофункціональний варіант)
Резюме
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21