|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.05.2018, 19:29 | #1 |
Новичок
Джуниор
Регистрация: 04.05.2018
Сообщений: 1
|
Настройка UART на Atmega8 (язык С)
Здраствуйте. Есть задача написать программу для ATmega8, которая при получении байт по UART, должна находить среднее арифметическое значение этих байт и отправлять результат по UART. Код пишу в AlmelStudio, для ввода чисел использую виртуальный терминал в Proteus. Опыта общения с языком С никакого. Пока удалось составить такой код.
Код:
Вопросы пока у меня следующие: Основную работу с массивами нужно писать в обработчике прерываний или в основном цикле программы? Есть ли возможность как то проверить построчно что у меня в какой переменной находится? Хочется отследить запись чисел в массив. На данном этапе при прошивке виртуального МК в Протеусе не терминале выводится прописанная буквами фраза, есть возможность вводить числа, но больше ничего не происходит. |
11.05.2018, 18:41 | #2 | ||
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
1. При получении прерывания их нужно сразу ЗАПРЕТИТЬ (иначе, могут валится еще и все в итоге отвалится из-за бесконечной рекурсии), а по окончании обработки - РАЗРЕШИТЬ (тут не совсем помню, там у ардуины визарды код генерят, в котором это уже как бы есть не явно ... но в коде "с нуля" нужно делать, как я сказал).
2. Насчет "основная"... тут все зависит от времени. Обработка прерывания должна быть максимально быстрой (см 1, пока оно обрабатывается - все остальные теряются). 3. Насчет всего остального - учите уже С++/С. За вас делать никто не будет. Учите что-то для компа в режиме консоли. Для контроллера можно вполне писать на современном С++ со всеми плюшками и наворотами, НО! добавить флаги компиляции Цитата:
Цитата:
Последний раз редактировалось alexzk; 11.05.2018 в 18:49. |
||
11.05.2018, 22:08 | #3 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,566
|
Не нужно. При входе в прерывание флаг I в SREG сбрасывается, при выходе из прерывания по RETI устанавливается. Даже наоборот: чтобы разрешить вложенные прерывания, приходится производить определенные телодвижения, да это и не нужно, можно в них запутаться.
RenvY для передачи/приема чего-нибудь по UART нужен протокол - или стандартный какой-нибудь (напр., MODBUS), или по крайности свой простейший. Из него будет ясно: передаем байты по счетчику или до признака конца сообщения. И в соответствии с этим организуем цикл. Заодно и на приемной стороне будут знать - пакет закончился - или еще ждать до хзч . Работа с массивами в прерываниях в МК считается плохим стилем. В прерывании след. находиться мин. время (почему - см. выше), обмен с главной программой - через буферы и флаги. Последний раз редактировалось digitalis; 12.05.2018 в 10:48. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что надо записать в регистры UART для передачи данных через сом порт? | седьмой | Общие вопросы C/C++ | 3 | 23.06.2017 15:26 |
Serial uart | mrprim | Python | 5 | 04.08.2016 19:54 |
Генератор на Atmega8 (AVR). Код на C | dem66 | Общие вопросы C/C++ | 4 | 05.02.2013 08:22 |
Чтение UART через read | dfyz.s | Общие вопросы C/C++ | 2 | 15.11.2012 10:14 |
ШИМ для мк atmega8 | pimple2006 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 09.02.2012 04:11 |