Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

Закрытая тема
Опции темы
Непрочитано 17.11.2008, 01:17   #21
festoon
Частый гость
 
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
festoon на пути к лучшему
По умолчанию

Вот последняя программка, не хочет нормально фунциклировать с усартом.

Прикрепленный файл: 1594954.rar
Реклама:
festoon вне форума  
Непрочитано 17.11.2008, 11:35   #22
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от festoon
А что за TMP такой?
Билдер по умолчанию использует для макрорасширений регистры R16 и R17, обзывает их TMPL и TMHP или регистровой парой TMP. Так, если вы написали инкремент переменной в ОЗУ, то билдер постороит код
Код:
var -› R16
R16++
R16 -›var
Когда он использует R16, когда R17 - предсказать трудно, поэтому в прерываниях я всегда сохранял оба.
Это проще чем каждый раз смотреть а листинг
Цитата:
Почему указатель стека трогать нельзя?
Блин, как все запущено... Ладно, попытаюсь. При обработке прерывания в стеке запоминается адрес возврата. Если вы измените указатель, программа вернется ХЗ куда. А если вместо RETI сделать переход на метку, то прерывание это просто больше не возникнет - потому что RETI кроме собственно извлечения из стека адреса возврата еще и сбрасывает контроллер прерываний.
nml вне форума  
Непрочитано 17.11.2008, 11:48   #23
festoon
Частый гость
 
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
festoon на пути к лучшему
По умолчанию

Про стек понятно, что может вернуться хз куда. Но в программе-то это всё предусмотрено (вроде бы ), и нужный адрес в стеке и восстановление флага I.
festoon вне форума  
Непрочитано 17.11.2008, 11:54   #24
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

По поводу "последней программы"
1)при входе в прерывание тимера надо сделать так:
Код:
R16 -›
R17 -›
SREG -›
потому что последнее не может быть сделано "напрямую", а только как
Код:
SREG-›R16
R16-›
2)Мало того что вы по прежнему модифицируете стек в прерывании, что есть грубейшая ошибка, вы еще и оставляете программу там же в вечном цикле. Логика мне совершенно непонятна. Во всяком случае, прерываний таймера более точно не будет. Впрочем как и прерывания USART - оно в таблице векторов "ниже" таймерного.

3) Любой обработчик прерывания должен быть коротким, как тост. Иначе ваша программа перестанет быть реалтаймовой. А на хрена тогда прерывания вообще?

4) в прерывании USART то же с сохранением. Вот кстати фрагмент листинга (советую в него изредка смотреть):
Код:
-----          V: USART0_Receive_Complete
               F: sreg-›  ...
$008F: $B70F:     p$3F -› r16
$0090: $930F:     r16 -›
$0091: $930F:  F: r16 -› (r16-›)
то есть R16 сперва портится засылкой в него SREG, а потом дважды сохраняется.

5) В прерывании USART надо обязательно прочесть UDR, иначе флаг прерывания не сбросится и при выходе из прерывания оно же будет вызвано снова. А при nom=1 вы его не читаете.
nml вне форума  
Непрочитано 17.11.2008, 11:57   #25
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Сообщение от festoon
Такое ощущение, что или в контроллере косяк или в алгоритм билдере. Возможна ли косячная компиляцияпрограммирование? Никто не замечал подобного?
Я раньше использовал AB 4.9. Проблем ни когда не было (за исключением ограничений по коду ). Очень удобный отладчик в пошаговой прогонке и анализе алгоритма (особенно если много ветвлений), и "внутренние дела" все работают (как ни странно!).
Тут поставил 5.0 , так он даже .asm толком не формирует. .Hex не проверял, не знаю!
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 17.11.2008, 11:58   #26
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от festoon
Про стек понятно, что может вернуться хз куда. Но в программе-то это всё предусмотрено (вроде бы ), и нужный адрес в стеке и восстановление флага I.
Не советую применять шаманские методы до тех пор, пока не изучите архитектуру и систему команд досконально. Нужный адрес в стеке и восстановление I флага еще не все.

Цитата:
Возможна ли косячная компиляцияпрограммирование?
Возможна, почему я и советую поглядывать в листинг. Но - вероятность этого на пару порядков ниже вероятности "косяков" своих, да и просто очепяток.
nml вне форума  
Непрочитано 17.11.2008, 17:34   #27
festoon
Частый гость
 
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
festoon на пути к лучшему
По умолчанию

Блин, банальное невнимание. Действительно, ведь надо сначала, регистры загонять, потом sreg...
По поводу прерывания таймера: оно будет, ведь флаг I устанавливается сразу после загрузки стека, в процедуре stop.
То есть, я правильно понимаю, что если не сделать UDR0 -› data, то флаг прерывания не сбрасывается? Хотя да, в описании так и написано, но в билдере RXC0 сбрасывается сразу при входе в прерывание. Или опять чего напутал...
nml, если есть время и вы поняли смысл алгоритма, опишите, пожалуйста, как бы вы решили сею задачу?
festoon вне форума  
Непрочитано 17.11.2008, 18:02   #28
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от festoon
Блин, банальное невнимание.
Обычно именно из-за этого и происходят 90% ошибок, а мы ругаем компиляторы
Цитата:

По поводу прерывания таймера: оно будет, ведь флаг I устанавливается сразу после загрузки стека, в процедуре stop.
Это общий флаг разрешения всех прерываний. А есть еще контроллер прерываний, который зафиксировал вход в прерывание, но не увидел выхода из него. Рекурсивные же прерывания не разрешены, ибо опасны.
Цитата:
То есть, я правильно понимаю, что если не сделать UDR0 -› data, то флаг прерывания не сбрасывается?
Из даташита вот:
Код:
When interrupt-driven data reception is used, the receive complete routine must read the received data from UDR in order to clear the RXC Flag, otherwise a new interrupt will occur once the   interrupt routine terminates.
nml вне форума  
Закрытая тема

Закладки


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по Си компиляторам AVR dimonbest Proteus, KiCAD и другие ECAD 51 11.11.2009 22:59
обработчики прерываний микроконтроллеров AVR Gn0me Микроконтроллеры, АЦП, память и т.д 8 06.03.2009 00:40
обработка клавиатуры? maxNTF Микроконтроллеры, АЦП, память и т.д 18 26.10.2007 23:44
нид хелп. Обработка сигнала с датчика freele Автоматика и аппаратура связи 5 14.07.2007 16:56
Обработка прерываний. Tibo Микроконтроллеры, АЦП, память и т.д 12 13.07.2007 17:22


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot