Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Структура программы
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Alexey T
Народ! помогите пожалуйста, программирую микроконвертор ADUC 812, мне надо чтобы моя программа опрашивала датчики 2 раза в милисекунду (1/2048с) фильтровала и обрабатывала эти данные; и 1 раз в 2 милисекунды (1/512с) отправляла посылку по UART-у, посылка должна состоять из двух байт, между ними должна быть пауза 140 мкс , после двух байт должна быть большая пауза, более 1 мс.
Вопрос такой: как бы вы рекомендовали организовать структуру такой программы. нужны ли, желательны ли здесь прерывания? мне вот думалось что прощще всего сделать программу длительнось цикла которой, будет неизменно 1 мс, и программа будет в каждом цикле дважды опрашивать датчики, и каждый второй цикл ещё и передаавать всё это на УАРТ. Но что то у меня не очень получается... Я подозреваю что такой подход может быть в корне неверным. считать время должны таймеры, чтобы необходимые события (считывание и выдача) происходили вовремя, а во всё остальное время программа должна фильтровать и обрабатывать данные, так, и только так? непонятно как справиться тогда двумя прерываниями по таймерам, с такой задачкой..
sergeeff
Сразу выкиньте из головы подгонку программы под определенное время ее работы.
ukpyr
Цитата
нужны ли, желательны ли здесь прерывания?
обязательны - заряжайте таймер на переполнение каждые 500мкс, в прерывании делайте измерения, каждые 4 прерывания заполняйте буфер для передачи по UART и начинайте передачу. В прерывании пересылки байта начинайта пересылку следующего и т.д. до завершения передачи всего буфера.
Alexey T
Спасибо, не очень понимаю как работать с прерываниями в программе написанной на си, из какого-то примера выдрал следующую конструкцию:

void timer_0_isr (void) interrupt 1
{

....

}

это идёт в конце программы, как функция, только в начале, у неё не было прототипа..
она работае,т сюда программа переходит по прерыванию от переполнения таймера 0.
я не понимаю синтаксиса
я удивлён что компилятору нигде не пришлось указать адрес вектора прерываний..
подскажите пожалуйста как теперь такую же магическую фразу написать чтобы она обрабатывала прерывание от пересылки байта, или дайте пожалуйста в пример кусок кода обработки прерываний

Спасибо спасибо спасибо smile.gif
XVR
Сначала определитесь на каком компиляторе будете писать программу. Потом курите мануалы от вашего компилятора - обычно прерывания задаются с помощью каких то расширений языка С.
В вашем случае слово interrupt после определения функции говорит компилятору что это обработчик прерывания, а цифра 1 после interrupt видимо обозначает вектор прерывания.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.