Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » Форум разработчиков РЭА »
Осторожно Atmel AT89C2051!

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   Осторожно Atmel AT89C2051!
Весельчак У
Moderator

Сообщений: 956
Откуда: Санктъ-Питербурхъ
Регистрация: Декабрь 2000

написано 16 Ноября 2001 02:29ИнфоПравкаОтветитьIP

Казалось бы, давно обсосанная архитектура, ошибок быть не должно. Ан нет. Умудрились и здесь напортачить. В дополнение к той ошибке, которую они сами признали, в AT89C2051 я обнаружил ещё одну: ежели в момент перехода по условию происходит прерывание, команда перехода не выполняется. Выход только в запрете прерывания на момент проверки условия.
Обнаружено в команде "jb bit, rel".

Vlad_Petr
unregistered
написано 18 Декабря 2001 23:04  ПравкаОтветитьIP

А что думает по этому поводу товарищь Жуков?
(в смысле отвечает ATMEL??)

Весельчак У
Moderator

Сообщений: 1087
Откуда: Санктъ-Питербурхъ
Регистрация: Декабрь 2000

написано 19 Декабря 2001 00:55ИнфоПравкаОтветитьIP

Задал вопрос на fulcrum и выслал часть программы. Жду ответ.

P.S. Команда jnb bit, rel работает аналогично.

Kosta_GG
unregistered
написано 16 Января 2002 14:09  ПравкаОтветитьIP

Есть какие-нибудь новости по subj, или fulcrum молчит как рыба об лед

Весельчак У
Moderator

Сообщений: 1225
Откуда: Санктъ-Питербурхъ
Регистрация: Декабрь 2000

написано 16 Января 2002 14:57ИнфоПравкаОтветитьIP

Молчит.

Kosta_GG
unregistered
написано 16 Января 2002 15:06  ПравкаОтветитьIP

А можно примерчик программы, интересно самому проверить.
kosta_g@rambler.ru
Заранее благодарен.

Весельчак У
Moderator

Сообщений: 1227
Откуда: Санктъ-Питербурхъ
Регистрация: Декабрь 2000

написано 16 Января 2002 15:19ИнфоПравкаОтветитьIP

Пример слишком большой. Можно просто попробовать что-то вроде такой конструкции:
код:

clr P3.7
clr P3.6
jnb P3.6, $
setb P3.7
sjmp $


Инициализацию прерываний не привожу. При вылезании ошибки на P3.7 выскочит единица сразу после прерывания. У меня было задействовано внешнее прерывание. По адресу обработки прерывания надо поставить
код:

<сброс признака прерывания, например, clr IE0>
setb EA
reti

[Это сообщение изменил Весельчак У (изменение 17 Января 2002 02:04).]

Black Eagle
unregistered
написано 27 Января 2002 21:02  ПравкаОтветитьIP

Это не только у Atmel, у других х51 тоже в свое время отмечалось. Лечится так:

;вместо этого
j(n)b foo,$

;надо писать вот это
_1:
nop
j(n)b foo,_1

;и ваши волосы снова станут мягкими и шелковистыми

skunk
Злобный админ

Сообщений: 2453
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 27 Января 2002 21:22ИнфоПравкаОтветитьIP

[offtop]
А это не тот ли самый Black Eagle, которого я знаю еще по Телесистемам с 1998-го года?

Black Eagle
unregistered
написано 27 Января 2002 22:31  ПравкаОтветитьIP

К Вашим услугам-с )

Весельчак У
Moderator

Сообщений: 1289
Откуда: Санктъ-Питербурхъ
Регистрация: Декабрь 2000

написано 28 Января 2002 01:59ИнфоПравкаОтветитьIP

Black Eagle
К сожалению, у меня другая ситуация: мне нужно не ожидать бит, а выполнить или нет определённые действия. Поэтому данная рекомендация не подходит. Так что, приходится запрещать прерывания на момент проверки.

Black Eagle
unregistered
написано 28 Января 2002 02:32  ПравкаОтветитьIP

Давайте конкретный кусок программы - попробуем разобраться. Например, IE0 сбрасывать не надо - само сбрасывается, какое конкретно условие глючит - проверка латч-бита (j(n)b/j(n)c) или хард-бита (j(n)z), наблюдается ли то же при cjne/djnz и т.д. Чудес не бывает, и такой дубовый глюк просто обязан был вылезти давным-давно у многих.

Весельчак У
Moderator

Сообщений: 1294
Откуда: Санктъ-Питербурхъ
Регистрация: Декабрь 2000

написано 29 Января 2002 01:49ИнфоПравкаОтветитьIP

Как я написал, "jb (jnb). cjne (djnz) не пробовал, точнее - не замечал ничего странного.
код:

Flags data 20h
NoMod bit Flags.4
clr EA
;!!!!!!!!!!!!!!!!!!!!!!!!!!!
;Вот это место!
;Мне пришлось вставить запрет прерываний для правильной работы
jb NoMod, Main_2
mov Buf, State
Main_2:
setb EA


Я пробовал заменять адрес бита на другой, даже менял на один из выводов порта (свободного). При этом состояние бита контролировалось осциллоскопом. Результат тот же.
Пробовал ставить подряд несколько команд
код:

jb NoMod, Main_2


Тоже помогало.

Black Eagle
unregistered
написано 29 Января 2002 02:50  ПравкаОтветитьIP

А NoMod'ом кто рулит - не таймер/еще какое-нибудь прерывание ли? Уверены ли Вы, что он ТОЧНО торчит в "1", когда регистрируется пропуск? А если в такой телвизор посмотреть:

mov c,NoMod
jb NoMod,Main_2
anl GlukPin,/c ;Телевизор для глюка - будет короткая иголка вниз ТОЛЬКО при NoMod=1
mov Buf,State
Main_2:
setb GlukPin ;Вертаем телевизор взад
blabla...

Попробуйте, может, что-либо прояснится.
Да, а выяснили, какое прерывание гадит? Его бы тоже разглядеть интересно. Нет ли в тексте ISR, исполняющейся дольше минимально возможного интервала возникновения порождающих запросов?

Добавление от 29 Января 2002 03:48:

Пардон, повторю код с попыткой сохранить форматирование и заодно еще вопрос - а стек или кто-либо еще у Вас ни с какой радости во Flags не может залезать случайно? Понимаю, что вряд ли, но все же...

<pre><blockquote>
mov c,NoMod
jb NoMod,Main_2
anl GlukPin,/c ;Телевизор для глюка - будет короткая иголка вниз ТОЛЬКО при NoMod=1 И ПРОПУСКЕ ПЕРЕХОДА
mov Buf,State
Main_2:
setb GlukPin ;Вертаем телевизор взад
blabla...
</pre></blockquote>


Жаль, нету под рукой ничего живого на AT89xxx51, сам бы попробовал. На Cygnal, что ли, прогнать?

Весельчак У
Moderator

Сообщений: 1297
Откуда: Санктъ-Питербурхъ
Регистрация: Декабрь 2000

написано 31 Января 2002 01:50ИнфоПравкаОтветитьIP

Прерывание INT0.
цитата:
Нет ли в тексте ISR, исполняющейся дольше минимально возможного интервала возникновения порождающих запросов?

Прерывания идут постоянно (программный I2C). Логика работы такая: по I2C идёт запрос на чтение от мастера, контроллер читает EEPROM, затем по запросу мастера выдаёт результат. Но в это время идёт постоянный опрос датчиков и копирование байта состояния по адресу "Buf". Ежели пришёл запрос от мастера на чтение EEPROM, производится запрет записи этого байта состояния (NoMod=1) и читается EEPROM в буфер с началом "Buf"; после чтения мастером массива данных, сбрасывается NoMod. После входа в прерывание выход осуществляется только после сигнала "СТОП", т.е. больше никаких пересылок по шине не осуществляется и прерываний не возникает.
Стек в порядке - проверял несколько раз и на бумаге и в симуляторе (ProView32).

P.S. Для сохранения форматирования пишется {code} текст{/code}, только скобки квадратные.

Black Eagle_
unregistered
написано 01 Февраля 2002 16:38  ПравкаОтветитьIP

[offtop]

Хотел зарегистрироваться - не получаю PW. Шо делать?

russian skunk
Administrator

Сообщений: 1015
Откуда: город-герой Ленинград
Регистрация: Ноябрь 2000

написано 01 Февраля 2002 19:55ИнфоПравкаОтветитьIP

Хотел зарегистрироваться - не получаю PW. Шо делать?
Если не помогает то, что написано в объявлении на главной странице, то написать письмо администратору info@skunksworks.net . Этот же e-mail доступен по ссылке "Свяжитесь с нами" внизу каждой страницы.

Black Eagle
Junior Member

Сообщений: 1
Регистрация: Январь 2002

написано 01 Февраля 2002 22:47ИнфоПравкаОтветитьIP

Весельчак У,

Похоже, что все-таки виновата асинхронность возможного изменения NoMod, и Вы поступаете единственно правильно, запрещая прерывания на время проверки/перехода по значению NoMod. Окончательно же успокоиться ИМХО можно будет лишь тогда, когда этот "глюк" удастся воссоздать на x51 другого бренда - например, Philips. Будет значительно печальнее, если это не воссоздастся - тогда это будет означать большУю вероятность действительно кремниевого бага у Atmel.

Удачи!
З.Ы. 2 russian skunk: регистрацию получил, спасибо.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика