Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Помогите начинающему по ATmega8515

Непрочитано 05.12.2011, 17:45  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Спасибо Kison! Добрался до своего компа - все замечательно работает! Теперь еще и есть на какой пример опираться в дальнейшем освоении.
Реклама:
roma9112 вне форума  
Непрочитано 06.12.2011, 20:44  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Блин, еще вопрос возник - если в вызываемой из основной программы функции я использую функцию обработки прерывания, например от переполнения таймера Т0, то в основной программе я уже не могу использовать обработчик прерывания от переполнения Т0, правильно? Или нет? Ведь вектор обработки этого прерывания уже занят...
roma9112 вне форума  
Непрочитано 06.12.2011, 21:24  
ALEKSEY188
Заблокирован
 
Регистрация: 14.04.2008
Адрес: Украина, совсем рядом от террористов!
Сообщений: 388
Сказал спасибо: 32
Сказали Спасибо 85 раз(а) в 62 сообщении(ях)
ALEKSEY188 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от roma9112 Посмотреть сообщение
если в вызываемой из основной программы функции я использую функцию обработки прерывания, например от переполнения таймера Т0, то в основной программе я уже не могу использовать обработчик прерывания от переполнения Т0
Во истинная сила и мощь языка С
ALEKSEY188 вне форума  
Непрочитано 07.12.2011, 06:26  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от ALEKSEY188 Посмотреть сообщение
Во истинная сила и мощь языка С
В смысле???
roma9112 вне форума  
Непрочитано 07.12.2011, 08:43  
makakus
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от roma9112 Посмотреть сообщение
если в вызываемой из основной программы функции я использую функцию обработки прерывания...
Вообще-то обработчик прерывания должен быть как можно короче (потому что пока он работает остальные прерывания ждут) и часто всего лишь устанавливает флаг для отработки его в основном цикле. Поэтому вызов функции прерывания из программы достаточно редкая вещь. Однако ничто этому не мешает, обработчик - такой же кусок программы, как и остальные, разве что в конце не ret, а reti, разрешающий прерывания.
Вы хотите вызывать обработчик из основной программы. Хорошо. Но во время его работы может возникнуть прерывание, снова его вызывающее. Он отработает от начала до конца и вернётся, куда-то в середину собственного тела (здесь уже прочие прерывания будут разрешены!). Что же с переменными, которые использует обработчик? Какое их значение после возврата "к прошлой жизни"? Погуглите "реентерабельность" - это свойство функции правильно работать, будучи вызванной одновременно в нескольких экземплярах - естественное дело для многозадачных операционных систем. Или функция может вызывать сама себя, это используется при вычислении сходящихся рядов.
makakus вне форума  
Непрочитано 07.12.2011, 09:40  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

У меня немного по другому построена программа:
- Сначала вызываю функцию в которой описан обработчик прерывания от переполнения Т0
- затем происходит выход из этой функции в основную программу main, и вот уже в ней я могу использовать(написать) другой обработчик того же прерывания от переполнения Т0, но которое и вызываться будет по условиям описанным в main?
roma9112 вне форума  
Непрочитано 07.12.2011, 10:21  
makakus
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от roma9112 Посмотреть сообщение
У меня немного по другому построена программа:
- Сначала вызываю функцию в которой описан обработчик прерывания от переполнения Т0
- затем происходит выход из этой функции в основную программу main, и вот уже в ней я могу использовать(написать) другой обработчик того же прерывания от переполнения Т0, но которое и вызываться будет по условиям описанным в main?
Обработчик прерывания "не подчиняется" main. Он случается вдруг от события, момент которого main не может предвидеть; он выполняется и дальше main и её функции продолжают жить, как ни в чём ни бывало.

Если ваше "сначала" - это до входа в основной цикл, когда прерывания запрещены, то вы ничем не рискуете. Если у вас две одинаковые функции - одна обработчик прерывания, а другая - для вызова из main, тоже ничего страшного, просто лишний расход памяти программы. Если вам не нужно реагировать на переполнение T0 немедленно, а можно подождать вплоть до времени основного цикла, то обработчик прерывания Т0 это установка бита (флаг) в переменной, видимой в основном цикле. (Одна! команда ассемблера "sbr Rr,(1‹‹bitNbr)" если флаги в регистре).

Main смотрит на флаг, если он установлен вызывает обработчик, который сбрасывает флаг и что-то делает. Так делается "системный тик", например, раз в 10 мс (по таймеру) опрашиваются клавиши, раз в 500 мс мигает светодиод, наращиваются секунды и т.д. Всё это происходит с точностью +- ‹время цикла main› (джиттер), при том что частота вызовов стабильна.

Последний раз редактировалось makakus; 07.12.2011 в 10:28.
makakus вне форума  
Непрочитано 07.12.2011, 10:29  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Чего-то я не пойму ничего блин Наверное так объясняю, хочу понять - можно ли в разных функциях, не работающих одновременно написать в каждой свой обработчик одного и того же прерывания? Компилятор "поймет" к какой функции какой обработчик надо подтыкать? Или обработчик определенного прерывания во всей программе может быть только один?
roma9112 вне форума  
Непрочитано 07.12.2011, 11:12  
makakus
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Сообщение от roma9112 Посмотреть сообщение
написать в каждой свой обработчик одного и того же прерывания?
Так разберитесь, что такое прерывание. А это когда программа вдруг переходит на заранее заданный адрес (в таблице прерываний). Там лежит команда перехода. На обработчик прерывания. Обработчик отработал и вернул программу в точку, откуда вдруг упрыгал. И тогда что значит "несколько обработчиков"?
makakus вне форума  
Непрочитано 07.12.2011, 11:38  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: Помогите начинающему по ATmega8515

Да подумал, что можно в обработчике прерывания поместить, как бы правильнее сказать-то, вариант выбора обработки прерывания(или это компилятор может делать), в зависимости от каких то условий, а далее перейти на этот самый вариант...
roma9112 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите начинающему (PIC16F84A). Slava-martyn Микроконтроллеры, АЦП, память и т.д 11 09.09.2010 21:55
помогите начинающему по WinAVR umkamaks Микроконтроллеры, АЦП, память и т.д 4 05.05.2010 21:01
Помогите начинающему! kolira Микроконтроллеры, АЦП, память и т.д 6 30.01.2010 15:22
Помогите советом начинающему eler Делимся опытом 100 11.09.2008 17:28
Помогите начинающему!!!! sma-etu Микроконтроллеры, АЦП, память и т.д 2 13.12.2006 18:31


Часовой пояс GMT +4, время: 15:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.